目錄
基本概念
模型求解和應(yīng)用
基于求解器的求解方法
基于問(wèn)題的求解方法
其他?
基本概念
運(yùn)籌學(xué)的一個(gè)重要分支是數(shù)學(xué)規(guī)劃,線性規(guī)劃是數(shù)學(xué)規(guī)劃的一個(gè)重要的分支。
變量稱為決策變量,規(guī)劃的目標(biāo)稱為目標(biāo)函數(shù),限制條件稱為約束條件,s.t.是“受約束于”的意思。
建立線性規(guī)劃模型的一般步驟為:①分析問(wèn)題,找出決策變量。②找出等式或不等式約束條件。③構(gòu)造關(guān)于決策變量的一個(gè)線性函數(shù)。
線性規(guī)劃模型的一般形式:
或:
為目標(biāo)函數(shù)的系數(shù)向量,又稱為價(jià)值向量;為決策向量;為約束方程組的系數(shù)矩陣;為約束方程組的常數(shù)向量。
還有標(biāo)準(zhǔn)型:
目標(biāo)函數(shù)為極大型,約束條件為等式約束。滿足約束條件的解為可行解,使目標(biāo)函數(shù)達(dá)到最大值得可行解角叫最優(yōu)解。所有可行解構(gòu)成的集合叫做可行域,記為R。
在數(shù)學(xué)規(guī)劃問(wèn)題求解過(guò)程中,一定還要計(jì)算靈敏度分析。靈敏度分析指系統(tǒng)因周圍條件變化顯示出來(lái)的敏感程度的分析。線性規(guī)劃問(wèn)題的a、b、c都設(shè)定為常數(shù),但是在實(shí)際過(guò)程中,這些系數(shù)都會(huì)有少許的變動(dòng)。
模型求解和應(yīng)用
MATLAB中求解數(shù)學(xué)規(guī)劃的問(wèn)題有兩種模式:基于求解器的求解方法和基于問(wèn)題的求解方法,
基于求解器的求解方法
需要將線性規(guī)劃化為標(biāo)準(zhǔn)形式:
要求目標(biāo)函數(shù)必須是最小化,約束條件分為小于等于約束和等號(hào)約束,lb和ub是決策變量上下界。
MATLAB函數(shù)調(diào)用格式為:
[x,fval] = linprog(f,A,b)
[x,fval] = linprog(f,A,b,Aeq,beq)
[x,fval] = linprog(f,A,b,Aeq,beq,lb,ub)
x返回的是決策變量的取值,fval返回的是目標(biāo)函數(shù)的最優(yōu)值,f為價(jià)值向量,A,b對(duì)應(yīng)的是線性不等式約束,Aeq和beq對(duì)應(yīng)的是線性等式的約束,lb和ub分別對(duì)應(yīng)決策向量的下界向量和上界向量。
這種方法只能應(yīng)用于決策向量是一維的情況。
基于問(wèn)題的求解方法
首先用變量和表達(dá)式構(gòu)造優(yōu)化問(wèn)題,然后用solve函數(shù)求解,可以用doc optimproblem查看幫助。
①prob=optimproblem('ObjectiveSense','max');
ObjectiveSense可以是max和min,代表優(yōu)化最大值還是最小值,默認(rèn)是min
②定義f,A,b(同上,f可以定義為行向量,這樣目標(biāo)函數(shù)不同再轉(zhuǎn)置)
③x=optimvar('x',2,1,'TYPE','integer','LowerBound',0,'UpperBound',inf);
第一個(gè)‘x’里面是變量名,列向量,后面是存在幾行幾列。
‘TYPE’,后面定義的是該函數(shù)所屬類型,比如說(shuō)integer整數(shù)型,double雙精度型號(hào)
‘LowerBound'與'UpperBound'表示下界與上界所跟的0,inf分別是范圍
④prob.Objective=f?* x;%目標(biāo)函數(shù),目標(biāo)函數(shù)需要得到一個(gè)標(biāo)量數(shù)值,不是矩陣向量
⑤prob.Constraints.con=A*x<=b;%約束條件,只有一個(gè)約束,也可以不加.con,.con是標(biāo)簽,可以自己命名,多個(gè)約束條件時(shí),必須標(biāo)簽不能一樣。
⑥[sol fval flag out]=solve(prob);%fval是最優(yōu)值,sol.x是決策變量的值,當(dāng)多個(gè)決策變量時(shí),可以sol.y,flag在線性規(guī)劃中不用在意,在非線性規(guī)劃中注意不能為負(fù)值。
例如:
?采用求解器求解:
clc,clear
f = [-2;-3;5];%轉(zhuǎn)換為求最小
A = [-2,5,-1;1,3,1];
b = [-10;12];
Aeq = [1,1,1];
beq = [7];
lb = zeros(3,1);
[x,fval] = linprog(f,A,b,Aeq,beq,lb,[]);
x
-fval
x =
? ? 6.4286
? ? 0.5714
? ? ? ? ?0
ans =? ?14.5714文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-802302.html
采用基于問(wèn)題的求解
clc,clear
prob=optimproblem('ObjectiveSense','max');
x=optimvar('x',3,'LowerBound',0);
prob.Objective=2*x(1) + 3*x(2) - 5*x(3);
prob.Constraints.con1=2*x(1) - 5*x(2) + x(3)>=10;
prob.Constraints.con2=x(1) + 3*x(2) + x(3)<=12;
prob.Constraints.con3=x(1) + x(2) + x(3)==7;
[sol fval flag out]=solve(prob);
sol.x
fval
ans =
? ? 6.4286
? ? 0.5714
? ? ? ? ?0
fval =文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-802302.html? ?14.5714
其他?
- MATLAB中,加載現(xiàn)有的txt文件的矩陣時(shí),若用load函數(shù),則矩陣應(yīng)每一行列數(shù)應(yīng)該相等。如果缺少個(gè)別的數(shù),可使用readmatrix函數(shù)。writematrix(a,'data.xlsx')可以寫(xiě)入Excel中。?
- 矩陣索引a(1:end,1),end就自動(dòng)是行的最后一列
- sum(a,'all')表示矩陣a的所有元素求和
到了這里,關(guān)于數(shù)學(xué)建?!€性規(guī)劃的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!