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,:)));
감사합니다! 몇 백 가지의 변수가 있으므로 목적 함수를 직접 작성할 수는 없습니다.
'feval (fun, (pop (i, :))) :'의 반환 값과 차원에 'y'가있는 차원은 무엇입니까? – Schorsch
예. 보스턴에 완두콩을 운반하기 위해 맥 트럭을 사용하는 극단적 인 경우. 이와 같은 해킹을 사용하는 대신 합계와 같은 매우 기본적인 MATLAB 도구를 배웁니다. m 파일의 루프조차도 이것보다 쉬울 것입니다. –
당신은 바로 우드 칩입니다. 죄송합니다 ... 청각 장애인의 귀를 새로운 (오래된) 아이디어로 바꾸는 고전적인 사례입니다. – Sascha