2013-07-31 51 views
1

我苦苦为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,:)));

的感谢!我无法用手写出目标函数,因为我将有数百个变量。

+0

返回的值来自'feval(fun,(pop(i,:))):'和什么维度有'y'? – Schorsch

+0

叶赫斯。使用卡车将豌豆运送到波士顿的极端情况。而不是像这样使用黑客,学习一些非常基本的matlab工具,比如sum。即使是m文件中的循环也比这更容易。 – 2013-08-01 01:53:16

+0

你是对的@woodchips。对不起......对新的(旧)想法置若罔闻的经典案例。 – Sascha

回答

1

您可以使用sum(x)直接使用函数句柄,而不是编写所有索引,请执行:fitnessfcn = @(x) sum(x)

+0

我可能对这次派对有点迟,但使用'fitnessfcn = @ sum'更简单:) –