優化之外罰函式法

2022-08-24 14:33:12 字數 1555 閱讀 2217

罰函式法的基本思想是借助罰函式把約束問題轉化為無約束問題,然後用無約束最優方法來求解。

目標函式:

約束條件:

clc

syms x1 x2 e; % e為罰因子

m(1)=1;c=10;a(1)=0;b(1)=0; % c為遞增係數 賦初值

f=x1^2+x2^2+e*(1-x1)^2; % 構造罰函式

f0(1)=0;

%求偏導、海森陣

fx1=diff(f,'x1');

fx2=diff(f,'x2');

fx1x1=diff(fx1,'x1');

fx1x2=diff(fx1,'x2');

fx2x1=diff(fx2,'x1');

fx2x2=diff(fx2,'x2');

for k=1:100 %外點法e迭代迴圈

x1=a(k);x2=b(k);e=m(k);

for n=1:100 %牛頓法求最優值

f1=subs(fx1); %求梯度值和海森矩陣

f2=subs(fx2);

f11=subs(fx1x1);

f12=subs(fx1x2);

f21=subs(fx2x1);

f22=subs(fx2x2);

if(double(sqrt(f1^2+f2^2))<=0.000001) %最優值收斂條件

a(k+1)=double(x1);b(k+1)=double(x2);f0(k+1)=double(subs(f));

break;

else

x=[x1 x2]'-inv([f11 f12;f21 f22])*[f1 f2]';

x1=x(1,1);x2=x(2,1);

endend

if(double(sqrt((a(k+1)-a(k))^2+(b(k+1)-b(k))^2))<=0.000001)&&(double(abs((f0(k+1)-f0(k))/f0(k)))<=0.000001) %迭代收斂條件

disp('最優座標 x1:'),disp(a(k+1))%輸出最優點座標,迭代次數,最優值

disp('最優座標 x2:'),disp(b(k+1))

disp('迭代次數'),disp(k)

disp('最優值'),disp(f0(k+1))

break;

else

m(k+1)=c*m(k);

endend

執行結果如下:

最優化問題 三 之 外點法(罰函式法)

罰函式法又稱乘子法,是將約束優化問題轉換為無約束最優化問題的方法之一。其基本思想就是通過在原始的目標函式中新增乙個障礙函式 也可以理解成懲罰函式 來代替約束條件中的不等式約束。如果當前解不滿足約束條件,就在目標項上加上乙個正向的懲罰 這裡考慮的都是最小化問題 強迫當前解往可行域的方向走。至於正向懲罰...

拉格朗日乘子法 懲罰函式法

karush kuhn tucker conditions,kkt條件,kt條件 乙個非線性規劃 nonlinear programming 問題能有最優化解法的條件。引入了乘子 目標函式 約束條件都是凸函式 向量間的線性加平移變換 也稱拉格朗日乘子法 約束問題只有等式約束條件,則可通過乘子將約束問...

matlabff2函式 罰函式法MATLAB程式

一 進退法 0.618 法 powell 法 罰函式法的 matlab 程式設計 罰函式法 通用 function y ff x,k y 17.86 0.42 x 1 0.8 0.42 x 1 1 exp 2 0.8 0.42 x 1 3 exp 1.6 x 2 22.99 x 1 0.8 x 1 ...