플롯 함수
실행 중 최적화 플로팅하기
솔버를 실행하는 동안 다양한 진행률 측정값을 플로팅할 수 있습니다. optimoptions
에 PlotFcn
이름-값 쌍을 설정하고, 매 반복 시 호출할 솔버에 대해 하나 이상의 플롯 함수를 지정합니다. 함수 핸들 또는 함수 핸들로 구성된 셀형 배열을 전달합니다.
미리 정의된 다양한 플롯 함수를 사용할 수 있습니다. 솔버 함수 도움말 페이지의 PlotFcn
옵션 설명을 참조하십시오.
맞춤형으로 작성한 플롯 함수를 사용할 수도 있습니다. 동일한 구조체를 출력 함수로 사용하여 함수 파일을 작성합니다. 이 구조체에 대한 자세한 내용은 Output Function and Plot Function Syntax 항목을 참조하십시오.
플롯 함수 사용하기
이 예제에서는 플롯 함수를 사용하여 fmincon
'interior-point'
알고리즘의 진행률을 표시하는 방법을 보여줍니다. 이 문제는 제약 조건이 있는 비선형 문제 풀기, 솔버 기반에서 가져왔습니다.
비선형 목적 함수와 제약 조건 함수를 해당 기울기와 함께 작성합니다. 목적 함수는 로젠브록 함수입니다.
type rosenbrockwithgrad
function [f,g] = rosenbrockwithgrad(x) % Calculate objective f f = 100*(x(2) - x(1)^2)^2 + (1-x(1))^2; if nargout > 1 % gradient required g = [-400*(x(2)-x(1)^2)*x(1)-2*(1-x(1)); 200*(x(2)-x(1)^2)]; end
이 파일을 rosenbrockwithgrad.m
으로 저장합니다.
제약 조건 함수는 해가 norm(x)^2 <= 1
을 충족하는 것입니다.
type unitdisk2
function [c,ceq,gc,gceq] = unitdisk2(x) c = x(1)^2 + x(2)^2 - 1; ceq = [ ]; if nargout > 2 gc = [2*x(1);2*x(2)]; gceq = []; end
이 파일을 unitdisk2.m
으로 저장합니다.
세 개의 플롯 함수 호출을 포함하는 솔버의 옵션을 만듭니다.
options = optimoptions(@fmincon,'Algorithm','interior-point',... 'SpecifyObjectiveGradient',true,'SpecifyConstraintGradient',true,... 'PlotFcn',{@optimplotx,@optimplotfval,@optimplotfirstorderopt});
초기점 x0 = [0,0]
을 만들고 나머지 입력값을 빈 값([]
)으로 설정합니다.
x0 = [0,0]; A = []; b = []; Aeq = []; beq = []; lb = []; ub = [];
options를 포함하여 fmincon
을 호출합니다.
fun = @rosenbrockwithgrad; nonlcon = @unitdisk2; x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)
Local minimum found that satisfies the constraints. Optimization completed because the objective function is non-decreasing in feasible directions, to within the value of the optimality tolerance, and constraints are satisfied to within the value of the constraint tolerance.
x = 1×2
0.7864 0.6177