一、進退法、
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))*(1-exp(-2*(0.8+x(1))/3))*x(3)+k*(x(2)-(1.22*10^2*(9517.8*exp(-1
.6-2*0.42*x(1)/3)*x(2)+19035.6*exp(-2*x(1)/3)*x(3)))/(1.22*10^2+9517.8*exp(-1.6-2
*0.42*x(1)/3)*x(2)+19035.6*exp(-2*x(1)/3)*x(3)))^2+k*(x(3)-exp(-0.8-2*x(1)/3)*x(3)
-exp(-2.4-2*0.42*x(1)/3)*x(2))^2;
主函式,引數包括未知數的個數
n,懲罰因子
q,懲罰因子增長係數
k,初值
x0,以及
允許的誤差
rfunction g=fhs(x0,q,k,n,r
,h,a)
l=1;
while (l)
x=powell(x0,n,q,r(1),h,a);
呼叫powell
函式g(1)=ff1(x),g(2)=ff2(x) . . . g(p)=ffp(x);
呼叫不等式約束函式,將其值
存入陣列
gh(1)=hh1(x),h(2)=hh2(x) . . . h(t)=hht(x);
呼叫等式約束函式,將其值
存入陣列
hfor i=1:p
if g(i)
for j=1:t
if abs(h(j))
continue;
else
break;
endend
else
break;
endend
if (i==p)&(j==t)
如果所有約束條件的值都在允許的範圍內就結束
l=0;
else
x0=x;
q=k*q;
endend
g=x%powell
演算法,用於尋找無約束最優值點
function
powel=powell(x0,n,q,r
,h,a)
d=eye(n);
%n個線性無關的初始搜尋方向
k=1;
拉格朗日乘子法 懲罰函式法
karush kuhn tucker conditions,kkt條件,kt條件 乙個非線性規劃 nonlinear programming 問題能有最優化解法的條件。引入了乘子 目標函式 約束條件都是凸函式 向量間的線性加平移變換 也稱拉格朗日乘子法 約束問題只有等式約束條件,則可通過乘子將約束問...
優化之外罰函式法
罰函式法的基本思想是借助罰函式把約束問題轉化為無約束問題,然後用無約束最優方法來求解。目標函式 約束條件 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 求偏導 海森...
最優化問題 三 之 外點法(罰函式法)
罰函式法又稱乘子法,是將約束優化問題轉換為無約束最優化問題的方法之一。其基本思想就是通過在原始的目標函式中新增乙個障礙函式 也可以理解成懲罰函式 來代替約束條件中的不等式約束。如果當前解不滿足約束條件,就在目標項上加上乙個正向的懲罰 這裡考慮的都是最小化問題 強迫當前解往可行域的方向走。至於正向懲罰...