【发布时间】:2012-09-09 09:52:44
【问题描述】:
我的 Matlab 程序有多个输入作为结构(in.a、in.b 等)
和多个输出(out.a、out.b 等)
我想使用优化工具箱中的遗传算法求解器来找到最佳输入in.a,而所有其他输入都是恒定的。适应度是输出之一,例如out.b(2,3).
我如何“告诉”求解器?
谢谢 丹尼尔
【问题讨论】:
标签: matlab optimization genetic-algorithm
我的 Matlab 程序有多个输入作为结构(in.a、in.b 等)
和多个输出(out.a、out.b 等)
我想使用优化工具箱中的遗传算法求解器来找到最佳输入in.a,而所有其他输入都是恒定的。适应度是输出之一,例如out.b(2,3).
我如何“告诉”求解器?
谢谢 丹尼尔
【问题讨论】:
标签: matlab optimization genetic-algorithm
在编程中遇到这样的情况并不少见:什么对您的函数最方便,而某些库调用对它的期望却不一致。解决此类问题的正常方法是在两者之间写一个小层,以允许两者进行对话;一个接口。
来自help ga:
X = GA(FITNESSFCN,NVARS) 找到一个局部无约束最小值 X 到 使用 GA 的 FITNESSFCN。 [...] FITNESSFCN 接受大小为 X 的向量 1 乘 NVARS,并返回在 X 处计算的标量。
所以,ga 需要向量输入、标量输出,而您有一个进出结构。您必须编写以下(子)函数:
function Y = wrapper_Objfun(X, in)
in.a = X; %# variable being optimized
out = YOUR_REAL_FUNCTION(in); %# call to your actual function
Y = out.b(2,3); %# objective value
end
然后对ga 的调用看起来像
X = ga(@(x) wrapper_Objfun(x,in), N);
N 应该很大,in.a 应该很大。
【讨论】: