两种方式对线性规划问题求解详细步骤:【Excel 2016】与【Python 编程】
生活随笔
收集整理的這篇文章主要介紹了
两种方式对线性规划问题求解详细步骤:【Excel 2016】与【Python 编程】
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄
- 一、問題描述
- 二、法一:Excel 線性規劃
- 三、法二:python 編程線性規劃
- 四、總結
- 五、參考資料
本文內容:用 Excel 和 python 編程完成線性規劃問題的求解。
一、問題描述
- 現有5個廣告投放渠道:日間電視、夜間電視、網絡媒體、平面媒體、戶外廣告。
- 每個渠道的效果、廣告費用、限制數據如下表:
| 日間電視 | 2000 | 1000 | 14 | 600 | x1x_1x1? |
| 夜間電視 | 4000 | 2000 | 8 | 800 | x2x_2x2? |
| 網絡媒體 | 3000 | 400 | 40 | 500 | x3x_3x3? |
| 平面媒體 | 5000 | 1000 | 5 | 400 | x4x_4x4? |
| 戶外廣告 | 600 | 100 | 50 | 300 | x5x_5x5? |
- 設日間電視、夜間電視、網絡媒體、平面媒體、戶外廣告的使用次數依次為x1x_1x1?、x2x_2x2?、x3x_3x3?、x4x_4x4?、x5x_5x5?,咨詢電話量為LLL,則 5 種謀體資源配置的三要素如下:
- (1)決策變量:x1x_1x1?、x2x_2x2?、x3x_3x3?、x4x_4x4?、x5x_5x5?;
- (2)目標函數(st):咨詢電話量L=600x1+800x2+500x3+400x4+300x5L=600x_1+800x_2+500x_3+400x_4+300x_5L=600x1?+800x2?+500x3?+400x4?+300x5?最大化;
- (3)所滿足的約束條件:
- 電視廣告費用不超過 3 萬元:1000x1+2000x2≤300001000x_1+2000x_2≤300001000x1?+2000x2?≤30000
- 電視廣告次數至少進行 20 次:x1+x2≥20x_1+x_2≥20x1?+x2?≥20
- 廣告總費用不超過 4 萬元:1000x1+2000x2+400x3+1000x4+100x5≤400001000x_1+2000x_2+400x_3+1000x_4+100x_5≤400001000x1?+2000x2?+400x3?+1000x4?+100x5?≤40000
- 被告知人數至少 10 萬人:2000x1+4000x2+3000x3+5000x4+600x5≥1000002000x_1+4000x_2+3000x_3+5000x_4+600x_5≥1000002000x1?+4000x2?+3000x3?+5000x4?+600x5?≥100000
- 各媒體使用次數不超過次數限量:x1≤14x_1≤14x1?≤14;x2≤8x_2≤8x2?≤8;x3≤40x_3≤40x3?≤40;x4≤5x_4≤5x4?≤5;x5≤50x_5≤50x5?≤50
- 各媒體使用次數均為正整數。
二、法一:Excel 線性規劃
- 首先使用 Excel 2016 建立一個數據表:
設置目標函數:
- 根據上面分析,目標函數為:E2:E6與F2:F6區域的乘積。
- 在 C10 單元格內輸入:=SUMPRODUCT(E2:E6,F2:F6)
- 輸入完畢后,值為 0 ,因為 F 那一列值為空,這里我在前面備注了一下。
設置約束條件:
- 將第一部分所寫的約束條件表達式設置在 Excel 中。
- 在 C15:C18 單元格內依次輸入公式:
- C15:=SUMPRODUCT(C2:C3,F2:F3)
- C16:=F2+F3
- C17:=SUMPRODUCT(C2:C6,F2:F6)
- C18:=SUMPRODUCT(B2:B6,F2:F6)
- 輸入完畢后均為 0 。
加載 Excel 的規劃求解模塊:
- 選擇【文件】→【選項】→【加載項】→【轉到】,勾選【規劃求解加載項(Solver add-in)】,再點擊【確定】按鈕,就出現了規劃求解模塊。
在 Excel 規劃求解模塊中設置決策變量和目標函數:
- 打開規劃求解。
- 修改以下兩個值:
(1)設置目標:輸出結果區域;
(2)通過更改可變單元格:也就是之前數據表空白的地方。
設置約束條件: - 點擊【添加】按鈕,分別設置 6 個約束條件。
- 約束條件 1——電視廣告費用不超過 3 萬元:1000x1+2000x2≤300001000x_1+2000x_2≤300001000x1?+2000x2?≤30000
- 約束條件 2——電視廣告次數至少進行 20 次:x1+x2≥20x_1+x_2≥20x1?+x2?≥20
- 約束條件 3——廣告總費用不超過 4 萬元:1000x1+2000x2+400x3+1000x4+100x5≤400001000x_1+2000x_2+400x_3+1000x_4+100x_5≤400001000x1?+2000x2?+400x3?+1000x4?+100x5?≤40000
- 約束條件 4——被告知人數至少 10 萬人:2000x1+4000x2+3000x3+5000x4+600x5≥1000002000x_1+4000x_2+3000x_3+5000x_4+600x_5≥1000002000x1?+4000x2?+3000x3?+5000x4?+600x5?≥100000
- 約束條件 5——各媒體使用次數不超過次數限量:x1≤14x_1≤14x1?≤14;x2≤8x_2≤8x2?≤8;x3≤40x_3≤40x3?≤40;x4≤5x_4≤5x4?≤5;x5≤50x_5≤50x5?≤50
- 約束條件 6——各媒體使用次數均為正整數
求解問題:
- 約束條件設置完畢后,設置【單純線性規劃】,然后點擊【求解】。
- 點擊【確定】。
- 結果如下:
三、法二:python 編程線性規劃
- scipy 庫中線性規劃求解函數的說明:
函數原型
- 參數說明:https://www.pianshen.com/article/39912031011/
使用 Jupter 編寫代碼:
# 導入包 from scipy import optimize import numpy as np #創建矩陣,c為目標函數的矩陣,A_ub為約束條件的左邊構成的矩陣,B_ub為約束條件的右邊 c=np.array([600,800,500,400,300]) A_ub=np.array([[1000,2000,0,0,0],[-1,-1,0,0,0],[1000,2000,400,1000,100],[-2000,-4000,-3000,-5000,-600],[1,0,0,0,0],[0,1,0,0,0],[0,0,1,0,0],[0,0,0,1,0],[0,0,0,0,1]]) B_ub=np.array([30000,-20,40000,-100000,14,8,40,5,50]) # 求解 res=optimize.linprog(-c,A_ub,B_ub) print(res)- 一樣的可以得到結果。
四、總結
- Excel 在數據處理方面是一個強大的工具,而 python 在處理數據方面是一個很強大的編程語言,針對大數據處理,用著兩種方式都可以做線性規劃。
五、參考資料
[1] 線性規劃問題的求解——Excel和python編程
總結
以上是生活随笔為你收集整理的两种方式对线性规划问题求解详细步骤:【Excel 2016】与【Python 编程】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: eNSP 配置OSPF
- 下一篇: Excel和Python求解线性规划问题