我苦苦为matlab中的全局优化工具箱编写完全参数化的适应函数。如何在Matlab中为全局优化编写一个非常长的求和函数
方法:
[x fvall,exitflag,output]=ga(fitnessfcn,nvars,A,b,Aeq,beq,lb,ub)
我有健身功能,我称之为有
[email protected];
因此,该功能在一个单独的文件规定。
问题: 我的问题是,现在我的优化是一个简单但超长的总和一样
成本= 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不能正确识别的功能:
错误:
Subscripted assignment dimension mismatch.
Error in fcnvectorizer (line 14) y(i,:) = feval(fun,(pop(i,:)));
的感谢!我无法用手写出目标函数,因为我将有数百个变量。
返回的值来自'feval(fun,(pop(i,:))):'和什么维度有'y'? – Schorsch
叶赫斯。使用卡车将豌豆运送到波士顿的极端情况。而不是像这样使用黑客,学习一些非常基本的matlab工具,比如sum。即使是m文件中的循环也比这更容易。 – 2013-08-01 01:53:16
你是对的@woodchips。对不起......对新的(旧)想法置若罔闻的经典案例。 – Sascha