陳小平 史雪瑩
(南京航空航天大學(xué)金城學(xué)院 基礎(chǔ)部,江蘇 南京211156)
Matlab 是美國Math Works 公司推出的一個(gè)應(yīng)用軟件,它已被廣泛的應(yīng)用于工程計(jì)算、控制設(shè)計(jì)、信號處理與通訊、圖像處理、信號檢測、金融建模設(shè)計(jì)與分析等方面。 本文就Matlab 在解決優(yōu)化問題中的一些應(yīng)用結(jié)合一些實(shí)例列來加以說明,主要目的便于學(xué)生在解決數(shù)學(xué)建模的一些問題時(shí)能起到一定的幫助,因?yàn)閿?shù)學(xué)建模中的許多問題都可以轉(zhuǎn)化為最優(yōu)化模型, 比如大家比較熟悉的往年數(shù)學(xué)建模真題中的“逢山開路”問題,本質(zhì)上為路線設(shè)計(jì)最優(yōu)化問題;投資的收益和風(fēng)險(xiǎn)問題,本質(zhì)為數(shù)學(xué)規(guī)劃問題,以及車燈線光源的設(shè)計(jì)和飲酒駕車問題等等本質(zhì)上均為最優(yōu)化問題。 鑒于以上原因,下面將Matlab 中一些求解數(shù)學(xué)建模中的一些最優(yōu)化方法結(jié)合本人在指導(dǎo)學(xué)生數(shù)學(xué)建模競賽的經(jīng)驗(yàn)來做一簡單的歸納與分析,希望能起到拋磚引玉的作用。
首先先介紹一下什么是優(yōu)化問題。它是指用最好的方式使用或分配有限的資源即勞動(dòng)力原材料機(jī)器資金等使得費(fèi)用最小或利潤最大。
其數(shù)學(xué)模型如下:
其中是x=(x1,x2,...,xn)T為n 維向量,稱f(x)為目標(biāo)函數(shù),稱gi(x)≤0 為約束條件,稱若只有(1)的模型為無約束優(yōu)化模型;稱由(1)、(2)組成的模型為約束優(yōu)化模型。
若上述優(yōu)化模型中的目標(biāo)函數(shù)f(x)和約束條件gi(x) 均為線性函數(shù),則稱該模型為線性規(guī)劃;若目標(biāo)函數(shù)或約束條件中至少有一個(gè)為非線性函數(shù),則此時(shí)的優(yōu)化問題稱之為非線性規(guī)劃問題。 下面分為三個(gè)方面來介紹。
Matlab 中求無約束優(yōu)化模型最基本的是fmin 與fmins 函數(shù),具體格式、功能及舉例如下:
(a)x=fmin('fun',x1,x2);
(b)x=fminu('fun',x0)或者x=fmins('fun',x0);
(c)x=fminu('fun',x0,options)或者x=fmins('fun',x0,options);
其中:(a)用于求解一元函數(shù)無約束極小化問題, x1,x2分別為x 的上、下界;而(b)和(c)用于求多元函數(shù)的無約束極小化問題,x0為初始迭代值。 此外,fmin 與fmins 可以直接定義函數(shù)F(x),不一定非要用M-文件,而fminu 必須先用M-文件定義函數(shù)F(x)。
例1 用Matlab 求f(x)=2e-xsinx 在(0,8)中的最小值和最大值。在Matlab 命令窗口輸入如下命令:
以上命令運(yùn)行結(jié)果為:
Matlab中求無約束優(yōu)化模型最基本的是linprog 函數(shù), 具體格式、功能及舉例如下:
(a) x=linprog(c,A,b)
(b) x=linprog(c,A,b,vlb,vub)
(c) x=linprog(c,A,b,vlb,vub,x0)
也用于求解(b)中的模型,其中x0表示初始點(diǎn)。
(d) x=linprog(c,A,b,vlb,vub,x0,N)
也用于求解(b)中的模型,其中x0表示初始點(diǎn),N 表示Ax≤b 中的前N 個(gè)約束是等式約束。
在Matlab 命令窗口輸入如下命令:
c=[-80 -125]; A=[8 5;6 4;4 5];b=[3500;1800;2800];vlb=[0;0];vub=[inf;inf];
x=lp(c,A,b,vlb,vub),f=c*x
以上命令運(yùn)行結(jié)果為:
x = 0
450
f =-5.625e+004
此部分主要以二次規(guī)劃問題為例, 討論如何使用Matlab 求解這類問題。 二次規(guī)劃模型一般表達(dá)式為:minF(x),s.t.A≤b。
Matlab 中求二次規(guī)劃模型最基本的是quadprog 函數(shù), 具體格式、功能及舉例如下:
(a) x=quadprog(H,c,A,b);
(b) x=quadprog(H,c,A,b,vlb,vub);
(c) x=quadprog(H,c,A,b,vlb,vub,x0);
(d) x=quadprog (H,c,A,b,vlb,vub,x0,N); N 表示前N 個(gè)等式約束的數(shù)目。
在Matlab 命令窗口輸入如下命令:
>> H=[1 -1;-1 2];c=[-2;-6];A=[1 1;-1 2;2 1];b =[2;2;3];vlb =[0;0];vub =[inf,inf];x =quadprog (H,c,A,b,vlb,vub),z =0.5*x'*H*x+c'*x
以上命令運(yùn)行結(jié)果為:
x=0.6667
1.3333
z=-8.2222
本文只是簡單的介紹了求最優(yōu)化問題的一些常用函數(shù)調(diào)用格式,并用一些數(shù)學(xué)實(shí)例加以說明, 當(dāng)然Matlab 中還有許多求解這一問題的方法,比如:拉格朗日乘子法、制約函數(shù)法、可行方向法、近似型算法等等,感興的讀者可以參見文獻(xiàn)[3]??偟膩碚f,希望通過本文的探討,能給參加數(shù)學(xué)建模的同學(xué)對求解最優(yōu)化問題提供一點(diǎn)入門的知識,以幫助其更快地掌握數(shù)學(xué)建模中求解最優(yōu)化問題的方法。
[1]王沫然.Matlab 與科學(xué)計(jì)算[M].北京:電子工業(yè)出版社,2003.
[2]薛嘉慶.最優(yōu)化原理與方法[M].北京:冶金工業(yè)出版社,1983.
[3]趙書蘭.Matlab 編程與最優(yōu)化設(shè)計(jì)應(yīng)用[M].北京:電子工業(yè)出版社,2013.