2014-09-29 2 views
0

하나 이상의 매개 변수가있는 결정적인 함수에서 반환되는 가장 높은 값이 무엇인지 알아보기 위해서는 우아하고 간단한 시스템이 필요합니다.MATLAB의 블랙 박스 함수의 매개 변수 최적화

저는 MATLAB에 유전자 알고리즘을 잘 구현하고 있음을 알고 있습니다. 실제로는 제 경우에는 과도합니다. 좀 더 간단한 것이 필요해.

아이디어가 있으십니까?

+3

이를 당신의 기능에 달려 있습니다. 파생 상품이 있습니까? 함수가 볼록합니까? 제약이 수반됩니까? 당신은 글로벌/로컬 최대를 찾고 계십니까? 정확도는 어느 정도입니까? 이것은 수학에 관한 완전한 연구 주제입니다. 예를 들어 http://www.mathworks.nl/help/optim/ug/choosing-a-solver.html – MeMyselfAndI

+0

함수는 imperscrutable 인 것으로 가정합니다. 이미 black box에 질문했습니다. 함수의 힌트를 얻는 유일한 방법은 매개 변수를 사용하여 함수를 쿼리하고 최대화 할 값을 반환하는 것입니다. 이렇게하면 최대/최소값이 전역인지 로컬인지를 결정할 수 없기 때문에 로컬 최대/최소값으로 충분할 수 있습니다. 나는 이것이 완전한 연구 주제라는 것을 알고 있습니다. 그래서 math.stackexchange 대신에 stackoverflow에 썼습니다. MATLAB에 기존의 편리한 구현이 있는지를 알기 위해서입니다. – fstab

+0

'fminbnd' 또는'fminsearch'가 가장 좋은 장소입니다. 이것은 매우 광범위한 질문입니다. – David

답변

2

Matlab에서 직접 최대 값을 찾을 수는 없지만 최소화 할 수 있습니다. -1 함수를 곱하면 당신의 fminsearch

f = @(x) 2*x - 3*x.^2; % a simple function to find the maximum from 
minusf = @(x) -1*f(x); % minus f, find minimum from this function 
x = linspace(-2,2,100); 
plot(x, f(x)); 
xmax = fminsearch(minusf, -1); 
hold on 
plot(xmax,f(xmax),'ro') % plot the minimum of minusf (maximum of f) 

결과로 찾을 수있는 "최소를 찾아"-problem로 -problem "최대 값을 찾아"transformes은 다음과 같다 : 매우 this

1

진짜 간단한 생각은 그리드 검색 접근 방식을 사용하는 것입니다. 아마도 메쉬 리파인먼트를 사용할 것입니다. 더 나은 아이디어는 Nelder-Mead 알고리즘과 같이보다 진보 된 파생물없는 옵티 마이저를 사용하는 것입니다. 이 내용은 fminsearch에서 볼 수 있습니다.

글로벌 최적화 도구 상자에서 알고리즘을 시도해 볼 수도 있습니다 (예 : patternsearch 또는 악명 높은 simulannealbnd).