이번역페이지는최신내용을담고있지않습니다。최신내용을영문으로보려면여기를클릭하십시오。
이예제에서는优化工具箱™솔버를사용하여제약조건이있는비선형문제를푸는방법을보여줍니다。이예제에서는목적함수를생성하고,제약조건을생성하며,문제를풀고,결과를검토하는일반적인워크플로를설명합니다。
이예제에서는문제풀이를위한두가지접근법을제공합니다。이중한가지에서는최적화라이브편집기작업을사용하는데,이는시각적인접근법입니다。다른접근법에서는MATLAB®명령줄을사용하는데,이는텍스트기반접근법입니다。문제기반접근법을사용해이유형의문제를풀수도있습니다。제약조건이있는비선형문제풀기,문제기반항목을참조하십시오。
아래의로젠브록함수
이주어져있을때단위원판,즉원점을중심으로하고반지름이1인원안의영역에서이로젠브록함수를최소화하는문제입니다。즉,집합 의영역에서함수f (x)를최소화하는x를구한다는의미입니다。이문제는비선형제약조건이있는비선형함수를최소화하는문제입니다。
참고
로젠브록함수는최적화분야에서일반적인테스트함수입니다。이함수는점[1]
에서고유한최솟값0을가집니다。이함수는깊게굽은밸리내에서얕은최솟값을갖기때문에일부알고리즘에서는최솟값을구하는것이쉽지않을수있습니다。이문제의해는점[1]
에있지않는데그이유는이점은제약조건을충족하지않기때문입니다。
图는다음단위원판에서로젠브록함수의두가지보기를보여줍니다。세로축은로그스케일링되었습니다。즉,이플롯은日志(1 + f (x))를보여줍니다。등고선은곡면플롯아래에있습니다。
로젠브록함수,로그스케일링됨:두가지보기
함수f (x)는목적함수라고합니다。목적함수는최소화하고자하는함수입니다。부등식 은제약조건이라고합니다。제약조건은솔버가최솟값을탐색하는대상이되는x의집합을제한합니다。제약조건은부등식또는등식으로지정되는데사용자는제약조건의수를원하는만큼지정할수있습니다。
모든优化工具箱최적화함수는목적함수를최소화합니다。함f수를최대화하려면- f를최소화하는최적화루틴을적용하십시오。최대화에대한자세한내용은목적함수최대화하기항목을참조하십시오。
최적화라이브편집기작업에서는시각적접근법을사용해문제를설정하고풀수있습니다。
홈탭의파일섹션에서새라이브스크립트버튼을클릭하여새라이브스크립트를만듭니다。
최적화라이브편집기작업을삽입합니다。삽입탭을클릭한다음코드섹션에서작업>최적화를선택합니다。
작업의문제유형지정섹션에서목적함수>비선형과제약조건>비선형을선택합니다。이작업에서는솔버fmincon -제약조건이있는비선형최소화
를선택합니다。
로젠브록함수를목적함수로포함합니다。작업의문제데이터선택섹션에서목적함수>로컬함수를선택한다음,새로만들기…버튼을클릭합니다。작업아래의섹션에새로컬함수가나타납니다。
函数f = objectiveFcn (optimInput)%的例子:%最小化罗森布罗克函数% f = 100*(y - x)^2 + (1 - x)^2用你的计算编辑下面的行x = optimInput (1);y = optimInput (2);F = 100*(y - x)^2 + (1 - x)^2;结束
이함수는로젠브록함수를구현합니다。
작업의문제데이터선택섹션에서목적함수> objectiveFcn을선택합니다。
초기점x0 = (0, 0)
을MATLAB작업공간에배치합니다。작업을클릭한다음에삽입탭에서섹션나누기버튼을클릭하여최적화작업위에새섹션을삽입합니다。작업위의새섹션에서초기점에대한다음코드를입력합니다。
x0 = (0, 0);
按Ctrl + Enter를눌러섹션을실행합니다。그러면x0
이작업공간에배치됩니다。
작업의문제데이터선택섹션에서초기점(x0) > x0을선택합니다。
문제데이터선택섹션에서제약조건>비선형>로컬함수를선택한후새로만들기…버튼을클릭합니다。이전로컬함수아래에새로컬함수가나타납니다。
다음과같이새로컬함수를편집합니다。
函数[c,ceq] = unitdisk(x) c = x(1)^2 + x(2)^2 - 1;[];结束
문제데이터선택섹션에서unitdisk
를제약조건함수로선택합니다。
솔버진행상황을모니터링하려면작업의진행률표시섹션에서텍스트표시>각반복시를선택합니다。또한플롯에대해목적함수값및실현가능성을선택합니다。
솔버를실행하려면작업창오른쪽상단에있는⁝옵션버튼을클릭하고섹션실행을선택합니다。플롯은별개의图창과출력영역에표시됩니다。
출력영역에는결과해석하기에설명된,반복과정을나타낸표가표시됩니다。
해를찾으려면작업의맨위를보십시오。
솔버가변수解决方案
과objectiveValue
를작업공간에배치합니다。작업아래에새섹션나누기를삽입하고다음라인을입력하여이들변수의값을봅니다。
按Ctrl + Enter를눌러섹션을실행합니다。
결과를얻기위한fmincon
절차를이해하려면결과해석하기항목을참조하십시오。
문제풀이를위해최적화에서생성되는코드를표시하려면,작업창오른쪽상단에있는옵션버튼⁝을클릭하고컨트롤과코드를선택합니다。
작업맨아래에다음코드가표시됩니다。
设置非默认解算器选项选择= optimoptions (“fmincon”,“显示”,“通路”,“PlotFcn”,...“optimplotfvalconstr”);%解决(解决方案,objectiveValue) = fmincon (x0 @objectiveFcn ,[],[],[],[],[],[],...@unitdisk选项);
다음에설명된것처럼,이코드는명령줄에서문제를푸는데사용할수있는코드입니다。
명령줄에서최적화문제를푸는첫단계는솔버를선택하는일입니다。최적화의사결정표항목을참조하십시오。비선형목적함수와비선형제약조건을포함한문제를풀때는일반적으로fmincon
솔버를사용합니다。
fmincon
함수도움말페이지를참조하십시오。이솔버의구문은다음과같습니다。
[x, fval] = fmincon (Aeq有趣,x0, A, b,说真的,磅,乌兰巴托,nonlcon,选项)
有趣的
및nonlcon
입력값은각각목적함수와비선형제약조건함수를나타냅니다。
다음과같이문제를표현하십시오。
MATLAB언어에서목적함수를함수파일또는익명함수로정의합니다。이예제에서는함수파일을사용합니다。
개별파일또는익명함수로제약조건을정의합니다。
함수파일은MATLAB명령을포함하는텍스트파일이며00
확장자를가집니다。아무텍스트편집기에서함수파일을생성하거나이예제와같이내장된MATLAB편집기를사용할수있습니다。
명령줄에서다음을입력합니다。
编辑。
MATLAB편집기에서다음을입력합니다。
%% ROSENBROCK(x)期望一个两列矩阵并返回一个列向量%输出为Rosenbrock函数,其最小值为%(1,1)的值为0,并且在其他地方严格为正。函数F = 100*(x(:,2) - x(:,1).^2)^2 + (1 - x(:,1))
참고
。
은여러점의값을한번에계산할수있는벡터화된함수입니다。벡터화항목을참조하십시오。벡터화된함수는플로팅하는데가장적합합니다。벡터화되지않은함수를원하면다음을입력하십시오。
%% ROSENBROCK1(x)期望一个二元向量并返回一个标量%输出为Rosenbrock函数,其最小值为%(1,1)的值为0,并且在其他地方严格为正。函数f = rosenbrock1 f (x) = 100 * (x (2) - x (1) ^ 2) ^ 2 + (1 - x (1)) ^ 2;
파일이름을rosenbrock.m
으로지정하여저장합니다。
제약조건함수는c (x)≤0또는量表(x) = 0。형식을갖습니다。제약조건 은솔버가취급하는형식이아닙니다。올바른구문을지정하려면제약조건을 으로다시작성하십시오。
비선형제약조건구문은등식제약조건과부등식제약조건을모두반환합니다。이예제는부등식제약조건만포함하므로빈배열[]
测查을등식제약조건함수로전달해야합니다。
이러한고려사항을염두에두고비선형제약조건을정의하는함수파일을작성하십시오。
다음코드를포함하는unitdisk.m
이라는이름의파일을만듭니다。
函数[c,ceq] = unitdisk(x) c = x(1)^2 + x(2)^2 - 1;[];
파일unitdisk.m
을저장합니다。
목적함수와제약조건함수를정의했으므로,fmincon
의다른입력값도생성하십시오。
“optimplotfvalconstr”
플롯함수를사용하고반복과정표시를반환하기위한fmincon
의옵션을만듭니다。
选择= optimoptions (“fmincon”,...“PlotFcn”,“optimplotfvalconstr”,...“显示”,“通路”);
초기점을만듭니다。
X0 = [0 0];
이예제에사용되지않는제약조건에대해서는빈요소를만듭니다。
一个= [];b = [];Aeq = [];说真的= [];磅= [];乌兰巴托= [];
fmincon
을호출하여문제를풉니다。
[x, fval] = fmincon (Aeq有趣,x0, A, b,说真的,磅,乌兰巴托,nonlcon,选项)
Iter的一阶范数f(x)可行性优化步骤03 1.000000e+00 0.000e+00 2.000e+00 1 13 7.753537e-01 0.000e+00 6.250e+00 1.768e-01 2 18 6.519648e-01 0.000e+00 9.048e+00 1.679e-01 3 21 5.543209e-01 0.000e+00 8.033e+00 1.203e-01 4 24 2.985207e-01 0.000e+00 1.790e+00 9.328e-02 5 27 2.653799e-01 0.000e+00 2.788e+00 5.723e- 01 6 301.897216e-01 0.000e+00 2.311e -01 1.147e-01 7 33 1.13701e -01 0.000e+00 9.706e-01 5.764e-02 8 36 1.153330e-01 0.000e+00 1.127e - 00 8.1600e -02 9 39 1.198058e-01 0.000e+00 1.000e-01 1.1600e -02 10 42 8.91005e -02 0.000e+00 8.378e-01 8.301e-02 11 45 6.771960e-02 0.000e+00 1.365e -01 7.149e-02 12 48 6.437664e-02 0.000e+00 1.146e-01 5.701e- 02 13 516.329037e-02 0.000e+00 1.318e-02 3.774e- 02 14 54 4.161934e -02 0.000e+00 3.016e-01 4.464e-02 16 60 4.95540e -02 0.000e+00 5.462e-03 4.185e- 02 2.208e-05 18 66 4.658289e-02 0.000e+00 1.318e-02 1.255e-02 19 69 4.94011e -02 0.000e+00 8.006e-04 4.940e-04 20 724.568281e-02 0.000e+00 3.136e-03 3.379e-03 21 75 4.568281e-02 0.000e+00 6.440e-05 3.974e-05 22 78 4.568281e-02 0.000e+00 8.000e-06 1.084e-07 23 81 4.567641e-02 0.000e+00 1.601e-06 2.793e-05 24 84 4.567482e-02 0.000e+00 2.023e-08 6.916e-06优化完成是因为目标函数在可行方向上不减小到最优性公差的值内,约束条件满足到约束公差的值内。X = 0.7864 0.6177 fval = 0.0457
이종료메시지는목적함수의도함수가제약조건으로허용되는방향에서거의0에가까우므로제약조건이있는최적값탐색이종료되었으며제약조건이필요한정확도를충족함을알려줍니다。이메시지는메시지에서사용된용어에대한자세한정보를제공하는여러링크를담고있습니다。이러한링크에대한자세한내용은향상된종료메시지항목을참조하십시오。
라이브편집기작업출력영역과MATLAB명령창에모두표시되는반복과정을나타낸표는MATLAB이단위원판에서로젠브록함수의최솟값을탐색한방식을보여줍니다。표시되는표는툴박스버전과연산플랫폼에따라다를수있습니다。다음설명은이예제에표시된표에적용됩니다。
Iter
라는레이블이지정된첫번째열은0에서24까지의반복횟수입니다。fmincon
은수렴하기까지24회의반복을거쳤습니다。
F-count
라는레이블이지정된두번째열은로젠브록함수가실행된누적횟수를보고합니다。마지막행은F-count
84임가을보여주며,이는fmincon
이최솟값을구하는과정에서로젠브록함수를84회실행했음을나타냅니다。
f (x)
라는레이블이지정된세번째열은목적함수의값을표시합니다。최종값4.567482依照
은최적화실행시보고된최솟값이며명령창의종료메시지끝에있습니다。
네번째열可行性
는모든반복에대해0입니다。이열은제약조건이양수인각반복에서제약조건함수unitdisk
의값을보여줍니다。unitdisk
의값이모든반복에서음수였기때문에매반복마다제약조건을충족했습니다。
반복테이블의다른열에대해서는반복과정표시에설명되어있습니다。