我的 Matlab 程序有多个输入作为结构(in.a
,in.b
等)和多个输出(out.a
,out.b
等)
我想使用优化工具箱中的遗传算法求解器来找到最佳输入in.a
,而所有其他输入都是恒定的。适应度是输出之一,例如out.b(2,3)
。
我如何“告诉”求解器?
谢谢丹尼尔
我的 Matlab 程序有多个输入作为结构(in.a
,in.b
等)和多个输出(out.a
,out.b
等)
我想使用优化工具箱中的遗传算法求解器来找到最佳输入in.a
,而所有其他输入都是恒定的。适应度是输出之一,例如out.b(2,3)
。
我如何“告诉”求解器?
谢谢丹尼尔
在编程中,遇到对您的函数最方便的内容与某些库调用对它的期望不相符的情况并不少见。解决此类问题的正常方法是在两者之间写一个小层,以允许两者进行对话;一个界面。
来自help ga
:
X = GA(FITNESSFCN,NVARS) 使用 GA 找到 FITNESSFCN 的局部无约束最小值 X。[...] FITNESSFCN 接受大小为 1×NVARS 的向量 X,并返回在 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
应该在哪里。