?? 文章首發(fā)于我的個(gè)人博客:歡迎大佬們來(lái)逛逛
數(shù)學(xué)建模:線性與非線性優(yōu)化算法
優(yōu)化算法是指在滿足一定條件下,在眾多方案中或者參數(shù)中最優(yōu)方案,或者參數(shù)值,以使得某個(gè)或者多個(gè)功能指標(biāo)達(dá)到最優(yōu),或使得系統(tǒng)的某些性能指標(biāo)達(dá)到最大值或者最小值
優(yōu)化的兩個(gè)關(guān)鍵點(diǎn):
1.明確優(yōu)化的目標(biāo)函數(shù)
2.明確優(yōu)化變量之間需要滿足的約束
線性優(yōu)化
使用函數(shù):linprog
函數(shù)原型:
[x,fval]=linprog(f,A,b,Aeq,Beq,LB,UB)
- x:求得最優(yōu)情況下變量的解
- fval:求得最優(yōu)目標(biāo)值
- f:目標(biāo)函數(shù)的系數(shù)(符號(hào)按最小值標(biāo)準(zhǔn),若目標(biāo)是求解機(jī)大值可以通過(guò)添加負(fù)號(hào)改成求極小值)
- A:不等式約束的變量系數(shù)(符合按小于標(biāo)準(zhǔn),如果是大于約束可通過(guò)加負(fù)號(hào)變成小于)
- b:不等式約束的常量
- Aeq:等式約束的變量系數(shù)
- Beq:等式約束的常量
- LB:變量的下限
- UB:變量的上限
例如我們需要計(jì)算求解如下線性函數(shù)的最優(yōu)解:
m i n { ? x 1 ? 2 x 2 + 3 x 3 } x 1 + x 2 ? 3 x 2 + x 3 ? 3 x 1 + x 3 = 4 0 ≤ x 1 , x 2 , x 3 ≤ 2 \begin{gathered}min\{-x_1-2x_2+3x_3\} \\x_1+x_2\geqslant3 \\x_2+x_3\geqslant3 \\x_1+x_3=4 \\0\leq x_1,x_2,x_3\leq2 \end{gathered} min{?x1??2x2?+3x3?}x1?+x2??3x2?+x3??3x1?+x3?=40≤x1?,x2?,x3?≤2?
clc;clear;
f = [-1;-2;3];
%% 不等式約束
A = [-1,-1,0;0,-1,-1];
B = [-3,-3];
%% 等式約束
Aeq = [1,0,1];
Beq = [4];
%% 上下限
LB = zeros(3,1);
UB = 2*ones(3,1);
%% 線性優(yōu)化
[x,fval] = linprog(f,A,B,Aeq,Beq,LB,UB);
%% 輸出結(jié)果
objstr = ['目標(biāo)函數(shù)最優(yōu)值:',num2str(fval)];
disp(objstr);
for i = 1:length(x)
xstr = ['x',num2str(i),'的系數(shù)為: ',num2str(x(i))];
disp(xstr);
end
非線性優(yōu)化
fmincon
是MATLAB的非線性規(guī)劃求解函數(shù)文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-729762.html
[x,fval]=fmincon(fun,x0,A,b,Aeq,Beq,LB,UB,nonlcon)
- x:求得最優(yōu)情況下變量的解
- fval:求得最優(yōu)目標(biāo)值
- fun:目標(biāo)函數(shù)(符號(hào)按最小值標(biāo)準(zhǔn),若目標(biāo)是求解機(jī)大值可以通過(guò)添加負(fù)號(hào)改成求極小值)
- x0:初始解
- A:不等式約束的變量系數(shù)(符合按小于標(biāo)準(zhǔn),如果是大于約束可通過(guò)加負(fù)號(hào)變成小于)
- b:不等式約束的常量
- Aeq:等式約束的變量系數(shù)
- Beq:等式約束的常量
- LB:變量的下限
- UB:變量的上限
- nonlcon :非線性約束函數(shù)表達(dá)式
m a x { x 1 2 ? x 2 2 + x 2 x 3 } 2 x 1 + x 2 + 3 x 3 ≤ 6 x 1 2 + x 1 x 2 + x 2 x 3 ≤ x 2 + 6 0 ≤ x 1 , x 2 , x 3 ≤ 1 \begin{gathered}max\begin{Bmatrix}x_1^2-x_2^2+x_2x_3\end{Bmatrix} \\2x_1+x_2+3x_3\leq6 \\x_1^2+x_1x_2+x_2x_3\leq x_2+6 \\0\leq x_1,x_2,x_3\leq1 \end{gathered} max{x12??x22?+x2?x3??}2x1?+x2?+3x3?≤6x12?+x1?x2?+x2?x3?≤x2?+60≤x1?,x2?,x3?≤1?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-729762.html
clc;clear;
% 指定初始解
x0 = zeros(3,1);
%% <線性>不等約束
A = [2,1,3];
B = [6];
%% <線性>等式約束
Aeq = [];
Beq = [];
%% 變量上下限
LB = zeros(3,1);
UB = 1*ones(3,1);
%% 整體非線性優(yōu)化目標(biāo)函數(shù)
fun = @(x) -x(1)^2-x(2)^2+x(2)*x(3);
%% 取得非線性不等式約束函數(shù)
nonlcon = @noLinearLimited;
[x,fval] = fmincon(fun,x0,A,B,Aeq,Beq,LB,UB,nonlcon);
objstr=['目標(biāo)函數(shù)最優(yōu)值:',num2str(-fval)];
disp(objstr)
for i=1:length(x)
xstr=['x',num2str(i),'的值為:',num2str(x(i))];
disp(xstr)
end
%% 非線性不等式約束的表達(dá)式,如果有多個(gè),則在C后面加; 補(bǔ)充即可
function [C,Ceq] = noLinearLimited(x)
C = [x(1)^2+x(1)*x(2)+x(2)*x(3)-x(2)-6];
Ceq = [];
end
到了這里,關(guān)于數(shù)學(xué)建模:線性與非線性優(yōu)化算法的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!