四種最優化方法總結


最優化方法
當我們准備好了一個函數表達式之后,如何求解該函數的最優值就會成為一個巨大的挑戰。以下是常用的四種優化方法。

無約束優化問題
所謂無約束優化問題,就是指對一個函數求最優值,最優值可以出現在函數上任意一點,而我們不去限定查找最優值的范圍。

有約束優化問題
有約束優化問題就是指給自變量的取值范圍做限制,縮小優化范圍,經典的約束優化算法有:

  • 內點法(interior-point)
  • 有效集法(active-set)
  • SQP算法(sqp)
  • 信賴域反射法(trust-region-reflective)

約束,又分線性約束與非線性約束,所謂線性約束,就是指約束條件中的自變量都是1次冪的,非線性約束即有高次冪的自變量出現。

假設如下約束優化函數和約束:


首先把這個函數的圖像在Matlab中給大家畫出來:

%%目標函數圖像繪制
x1=-1:0.05:1;
x2=-1:0.05:1;
[x1,x2]=meshgrid(x1,x2);
y=-x1.*x2;
figure(1)
%使用mesh函數畫圖
mesh(x1,x2,y);
figure(2)
%使用surfl畫圖
% surfl(x1,x2,y);
% figure(3)
%使用surf函數畫圖
surf(x1,x2,y);
hold on;
%約束區域部分位置
[x1,x2]=meshgrid(-1:0.05:1);
z=1-x1.^2-x2.^2;
ind=(z>=0);
h=scatter(x1(ind),x2(ind),'r');
hold on;

%% 繪制圓柱 % 上半部分 R=1;%半徑 h=-1;%圓柱高度 m=1000;%分割線的條數 [x1,y1,z1]=cylinder(R,m);%創建以(0,0)為圓心,高度為[0,1],半徑為R的圓柱 z1=h*z1;%高度放大h倍 mesh(x1,y1,z1)%重新繪圖 % 下半部分 hold on R=1;%半徑 h=1;%圓柱高度 m=1000;%分割線的條數 [x1,y1,z1]=cylinder(R,m);%創建以(0,0)為圓心,高度為[0,1],半徑為R的圓柱 z1=h*z1;%高度放大h倍 mesh(x1,y1,z1)%重新繪圖

從上面第三張圖中可知紅色圓圈位置處有最優值,對應的最優質的大約時-0.5,下面通過優化計算查看最優值結果。

使用Matlab實現一下四種優化算法:

function [xsol, fval] = runfmincon % 初始點 x0 = [-0.1 -0.1]; % 四種優化算法,大家選一種用,這里用的是內點法 % 'active-set', 'interior-point', 'sqp', or 'trust-region-reflective'. % 在優化器中選擇優化算法 options = optimset('Display', 'iter-detailed', 'Algorithm', 'interior-point', 'MaxIter', 8); % 優化器參數 % fmincon參數解釋 % fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options); % fun:要優化的函數 % x0:自變量的初始值 % A:非等式(<)線性約束的約束矩陣A % b:非等式(<)線性約束的約束條件矩陣b % Aeq:等式約束的線性約束的約束矩陣Aeq % beq:等式線性約束的約束條件矩陣beq % lb,ub:自變量的下限和上限 % nonlcon:非線性約束 [xsol, fval] = fmincon(@objfun, x0, [], [], [], [], [], [], @confun, options); % 目標函數 function f = objfun(x) f = - x(1) * x(2); end % 非線性約束 function [c, ceq] = confun(x) % Nonlinear inequality constraints c = [x(1)^2 + x(2)^2 - 1]; % Nonlinear equality constraints ceq = []; end end

 

%在Matlab命令行窗口輸入 [xsol,fval] = runfmincon; % xsol中是最優點 fval為最優點對應的最優值 % 迭代優化結果 [x1,x2]=[-0.7071,-0.7071] f=-0.5

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM