日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

内点法+外点法

發(fā)布時(shí)間:2025/3/15 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 内点法+外点法 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

內(nèi)點(diǎn)法屬于約束優(yōu)化算法。約束優(yōu)化算法的基本思想是:通過引入效用函數(shù)的方法將約束優(yōu)化問題轉(zhuǎn)換成無約束問題,再利用優(yōu)化迭代過程不斷地更新效用函數(shù),以使得算法收斂。?
內(nèi)點(diǎn)法(罰函數(shù)法的一種)的主要思想是:在可行域的邊界筑起一道很高的“圍墻”,當(dāng)?shù)c(diǎn)靠近邊界時(shí),目標(biāo)函數(shù)徒然增大,以示懲罰,阻止迭代點(diǎn)穿越邊界,這樣就可以將最優(yōu)解“檔”在可行域之內(nèi)了。

數(shù)學(xué)定義

對(duì)于下面的不等式約束的優(yōu)化問題:?

minf(x),xRn
s.tgi(x)0,i=1,2,...,m
利用內(nèi)點(diǎn)法進(jìn)行求解時(shí),構(gòu)造懲罰函數(shù)的一般表達(dá)式為?
φ(X,r)=f(X)?ri=1m1gi(X)
或者?
φ(X,r)=f(X)?ri=1mln[?gi(X)]

算法步驟

  • 取初始懲罰因子r(0)>0,允許誤差?>0
  • 在可行域D內(nèi)選取初始點(diǎn)X(0),令k=1
  • 構(gòu)造懲罰函數(shù)φ(X,r(k)),從X(k?1)點(diǎn)出發(fā)用無約束優(yōu)化方法求懲罰函數(shù)φ(X,r(k))的極值點(diǎn)(X?,r(k))
  • 檢查迭代終止準(zhǔn)則:如果滿足 X?r(k)?X?r(k?1)?1=10?5?10?7 或者 φ(X?,r(k))?φ(X?,r(k?1))φ(X?,r(k?1))?2=10?3?10?4 則停止迭代計(jì)算,并以(X?,r(k))作為原目標(biāo)函數(shù)f(X)的約束最優(yōu)解,否則轉(zhuǎn)入下一步;
  • r(k+1)=cr(k)X(0)=X?r(k)k=k+1,轉(zhuǎn)向步驟3。遞減系數(shù)c=0.1?0.5,通常取0.1。

  • 仿真

    1 用外點(diǎn)法求下列問題的最優(yōu)解
    方法一:外點(diǎn)牛頓法:
    clc
    m=zeros(1,50);a=zeros(1,50);b=zeros(1,50);f0=zeros(1,50);%a b為最優(yōu)點(diǎn)坐標(biāo),f0為最優(yōu)點(diǎn)函數(shù)值,f1 f2最優(yōu)點(diǎn)梯度。
    syms x1 x2 e; %e為罰因子。
    m(1)=1;c=10;a(1)=0;b(1)=0; %c為遞增系數(shù)。賦初值。
    f=x1^2+x2^2+e*(1-x1)^2;f0(1)=1;
    fx1=diff(f,'x1');fx2=diff(f,'x2');fx1x1=diff(fx1,'x1');fx1x2=diff(fx1,'x2');fx2x1=diff(fx2,'x1');fx2x2=diff(fx2,'x2');%求偏導(dǎo)、海森元素。
    for k=1:100 %外點(diǎn)法e迭代循環(huán).
    x1=a(k);x2=b(k);e=m(k);
    for n=1:100 %梯度法求最優(yōu)值。
    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.001) %最優(yōu)值收斂條件
    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);
    end
    end
    if(double(sqrt((a(k+1)-a(k))^2+(b(k+1)-b(k))^2))<=0.001)&&(double(abs((f0(k+1)-f0(k))/f0(k)))<=0.001) %罰因子迭代收斂條件
    a(k+1) %輸出最優(yōu)點(diǎn)坐標(biāo),罰因子迭代次數(shù),最優(yōu)值
    b(k+1)
    k
    f0(k+1)
    break;
    else
    m(k+1)=c*m(k);
    end
    end 方法二:外點(diǎn)梯度法:
    clc
    m=zeros(1,50);a=zeros(1,50);b=zeros(1,50);f0=zeros(1,50);?
    syms d x1 x2 e;?
    m(1)=1;c=10;a(1)=0;b(1)=0;?
    f=x1^2+x2^2+e*(1-x1)^2; f0(1)=1;?
    fx1=diff(f,'x1');?
    fx2=diff(f,'x2');
    for k=1:100?
    x1=a(k);x2=b(k);e=m(k);
    for n=1:100?
    f1=subs(fx1);
    f2=subs(fx2);
    if(double(sqrt(f1^2+f2^2))<=0.002)?
    a(k+1)=double(x1);b(k+1)=double(x2);f0(k+1)=double(subs(f));
    break;
    else
    D=(x1-d*f1)^2+(x2-d*f2)^2+e*(1-(x1-d*f1))^2;?
    Dd=diff(D,'d'); dd=solve(Dd); x1=x1-dd*f1; x2=x2-dd*f2;
    end
    end
    if(double(sqrt((a(k+1)-a(k))^2+(b(k+1)-b(k))^2))<=0.001)&&(double(abs((f0(k+1)-f0(k))/f0(k)))<=0.001)?
    a(k+1)
    b(k+1)
    k
    f0(k+1)
    break;
    else
    m(k+1)=c*m(k);
    end
    end 2,用內(nèi)點(diǎn)法求下列問題的最優(yōu)解
    內(nèi)點(diǎn)牛頓法
    clc
    m=zeros(1,50);a=zeros(1,50);b=zeros(1,50);f0=zeros(1,50);
    syms x1 x2 e;
    m(1)=1;c=0.2;a(1)=2;b(1)=-3;
    f=x1^2+x2^2-e*(1/(2*x1+x2-2)+1/(1-x1)); f0(1)=15;
    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
    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.002)
    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);
    end
    end
    if(double(sqrt((a(k+1)-a(k))^2+(b(k+1)-b(k))^2))<=0.001)&&(double(abs((f0(k+1)-f0(k))/f0(k)))<=0.001)
    a(k+1)
    b(k+1)
    k
    f0(k+1)
    break;
    else
    m(k+1)=c*m(k);
    end
    end
    ?


    總結(jié)

    以上是生活随笔為你收集整理的内点法+外点法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。