??*??** φ(゜▽゜*)? **??*??
歡迎來(lái)到饅頭俠的博客,該類(lèi)目主要講數(shù)學(xué)建模的知識(shí),大家一起學(xué)習(xí),聯(lián)系最后的橫幅!喜歡的朋友可以關(guān)注下,私信下次更新不迷路!
資源鏈接:點(diǎn)擊這里獲取眾多源碼、數(shù)模資料、思路精講、論文模板latex和word、學(xué)習(xí)書(shū)籍等
?? fmincon函數(shù)說(shuō)明
Matlab 的 fmincon 函數(shù):尋找約束非線(xiàn)性多變量函數(shù)的最小值。
適用于:
- 線(xiàn)性函數(shù)
- 非線(xiàn)性函數(shù)
- 線(xiàn)性等式和不等式約束
- 非線(xiàn)性等式和不等式約束
目標(biāo)優(yōu)化問(wèn)題的基本形式
min ? f ( x ) \min f(x) minf(x)
s . t . { A ? x ≤ b A e q ? x = B e q l b ≤ x ≤ u b c ( x ) ≤ 0 c e q ( x ) = 0 s.t. \begin{cases} A \cdot x \leq b \\ Aeq \cdot x = Beq \\ lb \leq x \leq ub \\ c(x) \leq 0 \\ ceq(x) = 0 \end{cases} s.t.? ? ??A?x≤bAeq?x=Beqlb≤x≤ubc(x)≤0ceq(x)=0?
fmincon語(yǔ)法和參數(shù)
[x,fval,exitflag,output,lambda,grad,hessian] = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)
輸入?yún)?shù):
- fun :目標(biāo)函數(shù),注意需要單引號(hào),或者@,(即寫(xiě)為符號(hào)函數(shù))
- x0:函數(shù)fun參數(shù)值的初始化;
- A, b:參數(shù)值的線(xiàn)性不等式約束(A * x <= b)
- Aeq, beq:參數(shù)值的等式線(xiàn)性約束 (Aeq * x = beq)
- lb, ub:參數(shù)值的下界和上界
- options:使用所指定的優(yōu)化選項(xiàng)執(zhí)行,options 可設(shè)置這些選項(xiàng)
- nonlcon:非線(xiàn)性約束,其參數(shù)值一般為約束函數(shù)。如果沒(méi)有非線(xiàn)性不等式或等式約束,設(shè)置為 nonlcon = []
輸出參數(shù):
- x:輸出最優(yōu)參數(shù)值
- fval:輸出 fun 在X參數(shù)的值
- exitflag: 輸出fmincon額外條件值
- lambda :結(jié)構(gòu)體,其字段包含解 x 處的拉格朗日乘數(shù)。
- grad:fun 在解 x 處的梯度。
- hessian:fun 在解 x 處的黑塞矩陣。請(qǐng)參閱fmincon Hessian 矩陣。
?? 算例實(shí)戰(zhàn)
算例都是比較簡(jiǎn)單的,希望大家好好理解,單元和多元區(qū)別不大,進(jìn)階的話(huà)重點(diǎn)是關(guān)于fmincon求解結(jié)果的分析,目標(biāo)函數(shù)屬于凸函數(shù)還是非凸,是否全局最優(yōu)還是局部最優(yōu),還得考慮fmincon求解的約束容限等。
初始解x0的設(shè)定
初始解的設(shè)定也很重要,得結(jié)合你所選用的算法。下面我都是直接設(shè)定x0=rand(2,1),大家可以嘗試修改初始解,看看結(jié)果有什么不同。
線(xiàn)性等式和不等式約束
min ? f ( x ) = 3 ? x 1 + 5 ? x 2 \min f(x)=3 \cdot x_1 +5 \cdot x_2 minf(x)=3?x1?+5?x2?
s . t . { x 1 + 3 x 2 ≤ 20 2 x 1 + x 2 ≤ 30 x 1 + x 2 = 10 0 ≤ x 1 ≤ 10 3 ≤ x 2 ≤ 8 s.t. \begin{cases} x_1+3 x_2 \leq 20 \\ 2 x_1+x_2 \leq 30 \\ x_1+x_2 = 10 \\ 0 \leq x_1 \leq 10 \\ 3 \leq x_2 \leq 8 \\ \end{cases} s.t.? ? ??x1?+3x2?≤202x1?+x2?≤30x1?+x2?=100≤x1?≤103≤x2?≤8?
將其與前面目標(biāo)規(guī)劃問(wèn)題的基本形式對(duì)照即可,代碼如下:
clc
clear
close all
fun=@(x) 3*x(1)+ 5*x(2);
x0=rand(1,2);
A=[1,3;2,1];
b=[20;30];
Aeq=[1,1];
beq=[10];
lb=[0,3];
ub=[10,8];
[x,fval,exitflag]=fmincon(fun,x0,A,b,Aeq,beq,lb,ub)
非線(xiàn)性等式和不等式約束
這里注意非線(xiàn)性部分得移項(xiàng)成標(biāo)準(zhǔn)形式,即非線(xiàn)性部分≤0和非線(xiàn)性部分=0的形式,下方換成上面形式得移向變號(hào),大家看到負(fù)號(hào)別訝異。
min ? f ( x ) = 3 ? x 1 2 + 5 ? x 2 2 \min f(x)=3 \cdot x_1^2 +5 \cdot x_2^2 minf(x)=3?x12?+5?x22?
s
.
t
.
{
x
1
+
3
x
2
≤
20
2
x
1
+
x
2
≤
30
x
1
+
x
2
=
10
0
≤
x
1
≤
10
3
≤
x
2
≤
8
x
1
2
?
x
2
≥
0
x
1
?
x
2
2
+
1
=
0
s.t. \begin{cases} x_1+3 x_2 \leq 20 \\ 2 x_1+x_2 \leq 30 \\ x_1+x_2 = 10 \\ 0 \leq x_1 \leq 10 \\ 3 \leq x_2 \leq 8 \\ x_1^2-x_2 \geq 0 \\ x_1-x_2^2 + 1 = 0 \end{cases}
s.t.?
?
??x1?+3x2?≤202x1?+x2?≤30x1?+x2?=100≤x1?≤103≤x2?≤8x12??x2?≥0x1??x22?+1=0?
主函數(shù):
clc
clear
close all
fun=@(x) 3*x(1)^2+ 5*x(2)^2;
x0=rand(1,2);
A=[1,3;2,1];
b=[20;30];
Aeq=[1,1];
beq=[10];
lb=[0,3];
ub=[10,8];
[x,fval,exitflag]=fmincon(fun,x0,A,b,Aeq,beq,lb,ub,'mycon')
新建mycon.m函數(shù)
function [c,ceq]=mycon(x)
c=-x(1)^2+x(2);
ceq=-x(1)-x(2)^2+1;
含有求和公式目標(biāo)函數(shù)
若目標(biāo)函數(shù)含有求和公式,如何用代碼表示呢?
min ? f ( x ) = ∑ i 50 ( x i ? 1 ) 2 \min f(x)= \sum_i^{50}(x_i-1)^2 minf(x)=i∑50?(xi??1)2
- 其中x為自變量,c為已知量
則我們的目標(biāo)函數(shù)為文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-679281.html
function f = fun(x)
f = 0;
for i=1:50
f = f + (x(i) - 1)^2
end
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-679281.html
到了這里,關(guān)于matlab進(jìn)階:求解在約束條件下的多元目標(biāo)函數(shù)最值(fmincon函數(shù)詳解)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!