Excel和Python求解线性规划问题
文章目錄
- 一、線性規劃的基本思想
- 二、Excel求解線性規劃
- 三、Python 編程實現【scipy庫】
- 四、參考🔗
一、線性規劃的基本思想
為求解決策變量,需要將目標函數、約束條件表達為決策變量的函數式,若約束條件和目標函數都是線性的,即表示約束條件的數學式子都是線性等式或線性不等式,表示問題最優化指標的目標函數都昌線性函數,則該問題就是線性規劃的問題。
例:已知 {x≤0x+2y≥0x?2y+4≥0\left\{\begin{aligned} x\leq 0 \\ x+2y \geq 0 \\ x-2y+4 \geq 0 \end{aligned} \right.??????x≤0x+2y≥0x?2y+4≥0? (線性約束條件), 求:x+yx+yx+y (線性目標函數)的最值。
解:令 x+y=tx+y=tx+y=t,則點 (x,y)(x,y)(x,y) 在 “三角形陰影” 和 "直線 y=?x+ty=-x+ty=?x+t " 上,即 “陰影” 與 "直線 y=?x+ty=-x+ty=?x+t" 有交點
直線的截距為 ttt,易知直線過點A時得最大值tmaxt_{max}tmax?,直線過點B時得最小值 tmint_{min}tmin?。
所以 {x=0y=2\left\{\begin{aligned} x=0 \\ y=2 \end{aligned} \right.{x=0y=2? 時,x+yx+yx+y 有最大值2,{x=?2y=1\left\{\begin{aligned} x=-2 \\ y=1 \end{aligned} \right.{x=?2y=1? 時,x+yx+yx+y 有最小值-1。
二、Excel求解線性規劃
問題描述:
MaxZ=60x1+20x2+40x3+30x4s.t.{4x1+2x2+x3+2x4≤600(木材約束)6x1+2x2+x3+2x4≤1000(玻璃約束)2x1+2x2+3x3+2x4≤400(勞動時間約束)x1≤100(家具1需求量約束)x2≤200(家具2需求量約束)x3≤50(家具3需求量約束)x4≤100(家具4需求量約束)x1,x2,x3,x4≥0(非負約束)MaxZ = 60x_1 + 20x_2 + 40x_3 + 30x_4 \\ s.t.\left\{\begin{aligned} 4x_1 + 2x_2 + x_3 + 2x_4 \leq 600 \qquad (木材約束) \\ 6x_1 + 2x_2 + x_3 + 2x_4 \leq 1000 \qquad (玻璃約束) \\ 2x_1 + 2x_2 + 3x_3 + 2x_4 \leq 400 \qquad (勞動時間約束) \\ x_1 \leq 100 \qquad (家具1需求量約束) \\ x_2 \leq 200 \qquad (家具2需求量約束) \\ x_3 \leq 50 \qquad (家具3需求量約束) \\ x_4 \leq 100 \qquad (家具4需求量約束) \\ x_1,x_2,x_3,x_4 \geq 0 \qquad (非負約束) \end{aligned} \right. MaxZ=60x1?+20x2?+40x3?+30x4?s.t.????????????????????????????????4x1?+2x2?+x3?+2x4?≤600(木材約束)6x1?+2x2?+x3?+2x4?≤1000(玻璃約束)2x1?+2x2?+3x3?+2x4?≤400(勞動時間約束)x1?≤100(家具1需求量約束)x2?≤200(家具2需求量約束)x3?≤50(家具3需求量約束)x4?≤100(家具4需求量約束)x1?,x2?,x3?,x4?≥0(非負約束)?
勞動力約束:
木材約束,玻璃約束,目標實際值添加方法一樣
規劃求解:
① 選擇規劃求解:
② 設置目標和可變單元格
③ 添加勞動力、木材、玻璃約束
④ 添加決策變量得約束
⑤ 求解方法選擇:單純線性規劃
單純形法的基本思路
單純形法的基本思想是:先找出一個基本可行解,對它進行鑒別,看是否是最優解;若不是,則按照一定法則轉換到另一改進的基本可行解,再鑒別;若仍不是,則再轉換,按此重復進行。因基本可行解的個數有限,故經有限次轉換必能得出問題的最優解。如果問題無最優解也可用此法判別。 根據單純形法的原理,在線性規劃問題中,決策變量(控制變量)x1,x2,…x n的值稱為一個解,滿足所有的約束條件的解稱為可行解。使目標函數達到最大值(或最小值)的可行解稱為最優解。這樣,一個最優解能在整個由約束條件所確定的可行區域內使目標函數達到最大值(或最小值)。求解線性規劃問題的目的就是要找出最優解。
單純形法的解題步驟
- 把線性規劃問題的約束方程組表達成典范型方程組,典范型方程組要實現變量轉換(所有變量為非負)、目標轉換(統一為求極大值,若求極小值可乘以(-1))、約束轉換(由不等式轉化為等式)。然后,找出基本可行解作為初始基可行解。列出初始單純形表。
- 若基本可行解不存在,即約束條件有矛盾,則問題無解。
- 若基本可行解存在,從初始基可行解作為起點,根據最優性條件和可行性條件,引入非基變量取代某一基變量,找出目標函數值更優的另一基本可行解。
- 按步驟3進行迭代,直到對應檢驗數滿足最優性條件(這時目標函數值不能再改善),即得到問題的最優解。
- 若迭代過程中發現問題的目標函數值無界,則終止迭代。
⑥ 選擇報告類型
最終求解的值
三、Python 編程實現【scipy庫】
① 數據的約束向量
4 2 1 2 600 6 2 1 2 1000 2 2 3 2 400 1 0 0 0 100 0 1 0 0 200 0 0 1 0 50 0 0 0 1 100② 導入所需庫
from scipy import optimize import numpy as np③ 添加約束向量
c = np.array([60,20,40,30]) A_ub = np.array([[4,2,1,2],[6,2,1,2],[2,2,3,2],[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]]) B_ub = np.array([600,1000,400,100,200,50,100])④ 求解
res =optimize.linprog(-c,A_ub,B_ub) print(res)- 參數c:表示目標函數中的系數,一個一維的數組
- 參數A_ub:該參數為可選參數,若線性規劃問題中的約束條件含有不等式則使用該參數,A_ub是一個二維的矩陣(數組),它的每一行都代表一個不等式的系數
- 參數b_ub:該參數為可選參數,對應上面的系數矩陣,是一個一維的列向量
由此可見,excel 和 python編程求解線性規劃問題,所得的最優解結果一致
四、參考🔗
- 基于jupyter notebook的python編程
- excel求解線性規劃問題
總結
以上是生活随笔為你收集整理的Excel和Python求解线性规划问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PS插件:灯光工厂安装教程
- 下一篇: Python 脚本编写