2013-07-31 1 views
1

matlab의 전역 최적화 도구 상자에 대해 완벽하게 매개 변수화 된 피트니스 기능을 작성하는 데 어려움을 겪고 있습니다.Matlab의 전역 최적화를위한 피트니스 기능에 매우 긴 합계를 쓰는 방법

접근 :

[x fvall,exitflag,output]=ga(fitnessfcn,nvars,A,b,Aeq,beq,lb,ub) 

은 내가 따라서

[email protected]; 

으로, 함수가 별도의 파일에 명시되어 전화 피트니스 기능을 가지고있다.

문제 : 내 문제는 내 최적화 fnxn

비용 = F1의 *의 1 개 + f2x2 + ... 같은 간단하지만 매우 긴 합이 것을 지금

n은 매개 변수화해야

(384에서 순간). 모든 MATLAB 도움말 파일에서 목적 함수는

y = 100 * (x(1)^2 - x(2)) ^2 + (1 - x(1))^2; 

내가 지능적으로 목적 함수를 "쓰기"여러 가지 방법을 시도 항상 짧고처럼 깔끔,하지만, 나는 제대로 기능을 호출 할 수 없습니다 :

경우 나는

function y = simple_fitness(x) 
y = x(1)+ x(2)+ x(3)+ x(4)+ x(5)+ x(6)+ x(7)+ x(8); 

글로벌 최적화

작동하지만 내 자동화 된 접근 방식을 사용하는 경우 (1 = 파이에 대한) 수동 피트니스 함수를 작성 :

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 도구를 배웁니다. m 파일의 루프조차도 이것보다 쉬울 것입니다. –

+0

당신은 바로 우드 칩입니다. 죄송합니다 ... 청각 장애인의 귀를 새로운 (오래된) 아이디어로 바꾸는 고전적인 사례입니다. – Sascha

답변

1

모든 색인을 쓰는 대신 function handle을 사용하여 sum (x)을 직접 사용할 수 있습니다 (fitnessfcn = @(x) sum(x)).

+0

나는이 파티에 좀 늦을 지 모르지만,'fitnessfcn = @ sum'을 사용하는 것이 더 간단합니다 :) –