patternsearch
을 사용하여 매끄럽지 않은 함수 최적화하기(문제 기반)
이 예제에서는 문제 기반 접근법으로 직접 탐색을 사용하여 매끄럽지 않은 함수를 최소화하는 방법을 보여줍니다. 이 예제를 실행할 때 최소화할 함수 ps_example(x)
가 포함됩니다.
목적 함수를 플로팅합니다.
fsurf(@(x,y)reshape(ps_example([x(:),y(:)]),size(x)),... [-6 2 -4 4],"LineStyle","none","MeshDensity",300) colormap 'jet' view(-26,43) xlabel("x(1)") ylabel("x(2)") title("ps\_example(x)")
2차원 최적화 변수 x
를 만듭니다. ps_example
함수에서는 변수가 행 벡터여야 하므로 x
를 요소를 2개 가진 행 벡터로 지정합니다.
x = optimvar("x",1,2);
ps_example
을 목적 함수로 사용하려면 fcn2optimexpr
을 사용하여 함수를 최적화 표현식으로 변환합니다.
fun = fcn2optimexpr(@ps_example,x);
목적 함수 ps_example
을 사용하는 최적화 문제를 만듭니다.
prob = optimproblem("Objective",fun);
초기점 x0
을 필드 x
의 값이 [2.1 1.7]
인 구조체로 지정합니다.
x0.x = [2.1 1.7];
patternsearch
솔버를 지정하여 문제를 풉니다.
[sol,fval] = solve(prob,x0,"Solver","patternsearch")
Solving problem using patternsearch. patternsearch stopped because the mesh size was less than options.MeshTolerance.
sol = struct with fields:
x: [-4.7124 -7.6294e-07]
fval = -2.0000
patternsearch
는 디폴트 fminunc
솔버보다 더 나은 해(낮은 함수 값)를 구합니다. 매끄럽지 않은 함수를 최소화하는 경우 이 디폴트 솔버는 권장되지 않습니다.
[solfminunc,fvalfminunc] = solve(prob,x0)
Solving problem using fminunc. Local minimum possible. fminunc stopped because it cannot decrease the objective function along the current search direction.
solfminunc = struct with fields:
x: [1.9240 8.8818e-16]
fvalfminunc = 2.9161
참고 항목
patternsearch
| fcn2optimexpr
| solve