記錄奮斗路上的點滴,
希望能幫到一樣刻苦的你!
如有不足歡迎指正!
共同學習交流!
🌎歡迎各位→點贊 👍+ 收藏? + 留言?📝
既然選擇了遠方,當不負青春,砥礪前行!
求解線性規劃模型已經有比較成熟的算法。對一般的線性規劃模型,常用的解法有圖解法、單純形法等;雖然針對線性規劃的理論算法已經比較完善,但是當需要求解的模型的決策變量和約束條件數量比較多時,手工求解模型是十分繁雜甚至不可能的,通常需要借助計算機軟件來實現。
目前,求解數學規劃模型的常用軟件有Python、LINGO、MATLAB等多種軟件,本種的數學規劃模型使用Python軟件求解。
求解線性規劃模型可以使用Python的cvxpy庫。
cvxpy庫與MATLAB中cvx工具庫類似,用于求解凸優化問題。cvx與cvxpy都是由加州理工學院的Stephen Boyd教授課題組開發。cvx是用于MATLAB的庫,cvxpy是用于Python的庫。下載、安裝及學習地址如下:
cvx: http://cvxr.com/cvx/; cvxpy: http://www.cvxpy.org/
max?z=70x1+50x2+60x3,s.t.{2x1+4x2+3x3≤150,3x1+x2+5x3≤160,7x1+3x2+5x3≤200,xi≥0,i=1,2,3.\begin{aligned} \max z &= 70x_1 + 50x_2 + 60x_3, \\ \text{s.t.} \quad & \left\{ \begin{array}{l} 2x_1 + 4x_2 + 3x_3 \leq 150, \\ 3x_1 + x_2 + 5x_3 \leq 160, \\ 7x_1 + 3x_2 + 5x_3 \leq 200, \\ x_i \geq 0, i = 1, 2, 3. \end{array} \right. \end{aligned}maxzs.t.?=70x1?+50x2?+60x3?,????2x1?+4x2?+3x3?≤150,3x1?+x2?+5x3?≤160,7x1?+3x2?+5x3?≤200,xi?≥0,i=1,2,3.??
目標函數的最優值為 z=2590.9091z = 2590.9091z=2590.9091。
解 利用Python程序,求得最優解為
x1=15.9091,x2=29.5455,x3=0,x_1 = 15.9091, x_2 = 29.5455, x_3 = 0,x1?=15.9091,x2?=29.5455,x3?=0,
計算的Python程序如下:
import cvxpy as cp
from numpy import array# 定義目標向量
c = array([70, 50, 60])
# 定義約束矩陣
a = array([[2, 4, 3], [3, 1, 5], [7, 3, 5]])
# 定義約束條件的右邊向量
b = array([150, 160, 200])
# 定義三個決策變量
x = cp.Variable(3, pos=True)
# 構造目標函數
obj = cp.Maximize(c @ x)
# 構造約束條件
constraints = [a @ x <= b]
prob = cp.Problem(obj, constraints)
# 求解問題
prob.solve(solver='GLPK_MI')
print('最優解為:', x.value)
print('最優值為:', prob.value)