matlab中的线性规划
matlab中的線性規劃
版權聲明:該篇由特慢的一七原創,轉載請聯系創作者。
目前本人基于matlab做了一些建模入門的基礎教程,可以在這里分享給大家,
昨日推送:matlab中的線性規劃
近期來,好多童鞋面臨著數學建模這個大的BOSS,同時在各位童鞋沖鋒過程中的,matlab作為重要的數據分析軟件,好多小伙伴都說,之前是matlab零基礎,更別提linprog,GA函數這些了,去百度的時候度娘給我們的解釋是這樣的:
講道理,一七剛剛學習的時候遇到一些沒用過的函數然后去問度娘,然后我才發現度娘對我深深的惡意,今天一七就幫大家詳細的解答一下matlab中線性規劃的具體實現:
最經典的LP:
LP(Linear programming,線性規劃)是matlab中用于線性規劃的優化方法,具體到matlab中,我們常用的函數就是linprog。在matlab中輸入help linprog時,可以獲得具體函數的用法,在這里我們就具體闡述下,該函數在線性規
Matlab中關于linprog的具體使用語法。(其實對于一個剛入門時候的小七來說,看到這個圖腦袋一陣模糊,具體怎么用,依舊一臉懵。)
在matlab學習中,最好用的學習方法莫過于通過一個具體的實例,下面我們就結合具體問題,詳細解釋linprog函數的用法:
可以明顯看出來該規劃中一共有5個自變量,同時有8個約束條件
結合matlab中linprog具體語法來看,linprog函數中的變量需求可以根據我們需求填寫,在我們題目中我們可以采用:
x=linprog(c,A,b,aeq,beq,lb),(具體為什么采用該種形式,客官您耐心向下看哦)
具體每一個變量對應意義如下:
C:目標函數的系數,也就是目標函數minZ中各個變量的系數,在上述例子中為c=[0.2 0.7 0.4 0.3 0.8],同時該問題中是求最小值,在linprog中直接用c即可,當我們要求函數的最大值時,需要在linprog中寫成-c;
A:約束條件是不等式中的系數,同時在該條件下需要注意,不等號的方向不同可能我們需要對系數做一個正負變換,如果不等式為≥,那么在A中需要取原系數的相反數,例如該題中A=[-3 -2 -1 -6 -18;-1 -0.5 -0.2 -2 -0.5 ;-0.5 -1 -0.2 -2 -0.8];
b:不等式右邊的數值,同理不等號的方向不同可能我們需要對系數做一個正負變換,如果不等式為≥,那么在b中需要取原系數的相反數,該題中b=[-700;-30;-100];
aeq:等式部分的系數,該題目中約束條件不存在等式,所以在函數中aeq可以用[]來表示空白;
beq:等式等號右邊的值,該問題中不存在等式,同理用[]表示;
lb:指X的下限,在我們題目中所有的變量都要求≥0,在這里lb就可以用一個0矩陣來表示,因為我們題目中有五個變量,就可以設置為lb=zeros[5,1],就是zeros生成一個5行1列的零矩陣,通過該矩陣表示五個變量的下限。
在我們題目中,我們發現通過上述幾個系數,已經可以把我們題目中的約束條件表示出來,因此我們的linprog就采用上述形式,當我們面臨更復雜的題目時,約束條件更多時,我們可以采用后續的linprog形式。
上述題目在matlab中可以表示為:
完整代碼:
c=[0.2 0.7 0.4 0.3 0.8];
A=[-3 -2 -1 -6 -18;-1 -0.5 -0.2 -2 -0.5 ;-0.5 -1 -0.2 -2 -0.8];
b=[-700;-30;-100];
lb=zeros[5,1];
[x,fval]=linprog(c,A,b,[],[],lb);
disp(x); %x為最優解
disp(fval); %fval為我們要求的最小或者最大值
簡單的matlab中linprog函數應用如上,在這里可以總結給大家幾點容易報錯的地方:
1.寫各個系數的時候,注意;和,例如在A=[-3 -2 -1 -6 -18;-1 -0.5 -0.2 -2 -0.5 ;-0.5 -1 -0.2 -2 -0.8]中每一個不等式的系數用;隔開,而一個不等式中用,或者空格隔開。
2. linprog函數中用法很多,當約束條件比較多的時候,可以依次采用更復雜的形式,但是不存在的約束條件不能跳過,需要用[]表示。
在matlab中同樣可以采用GA(遺傳算法)進行簡單的線性規劃,這里明天給各位童鞋講GA函數的用法,linprog函數的用法童鞋們還需要自己在進行練習,以便能具體掌握:這里提供給大家一個例子:
大家可以拿來練手,具體程序會在明天的推送中更新給大家。
大家關于線性規劃有啥疑問,可以具體問我。
總結
以上是生活随笔為你收集整理的matlab中的线性规划的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机器人学导论第七章
- 下一篇: matlab人脸追踪,求大神帮助我这个菜