我正在努力为 matlab 中的全局优化工具箱编写一个完全参数化的适应度函数。
方法:
[x fvall,exitflag,output]=ga(fitnessfcn,nvars,A,b,Aeq,beq,lb,ub)
我有一个我调用的健身功能
fitnessfcn=@fitnessTest;
因此,该函数在单独的文件中说明。
问题: 我现在的问题是我的优化是一个简单但超长的总和,例如
成本=f1*x1+f2x2+...fnxn
n 应该被参数化(目前为 384)。在所有 matlab 帮助文件中,目标函数总是简短而整洁,例如
y = 100 * (x(1)^2 - x(2)) ^2 + (1 - x(1))^2;
我尝试了几种智能“编写”目标函数的方法,但是,我无法正确调用该函数:
如果我手动编写适应度函数(对于 fi=1)
function y = simple_fitness(x)
y = x(1)+ x(2)+ x(3)+ x(4)+ x(5)+ x(6)+ x(7)+ x(8);
全局优化工作
但是,如果我使用我的自动化方法:
n = 8; %# number of function handles
parameters = 1:1:n;
store = cell(2,3);
for i=1:n
store{1,i} = sprintf('x(%i)',parameters(i));
store{2,i} = '+'; %# operator
end
%# combine such that we get
%# sin(t)+sin(t/2)+sin(t/4)
funStr = [store{1:end-1}];%# ignore last operator
endFunction=';';
%functionHandle = str2func(funStr)
y=strcat(funStr,endFunction)
matlab 无法正确识别函数:
错误:
下标分配尺寸不匹配。
fcnvectorizer 中的错误(第 14 行)y(i,:) = feval(fun,(pop(i,:)));
谢谢!我无法手动编写目标函数,因为我将有数百个变量。