python数学建模基础教程,如何用python数学建模

大家好,本文将围绕python数学建模基础教程展开说明,如何用python数学建模是一个很多人都想弄明白的事情,想搞清楚python数学建模资料需要先了解以下几个事情。

第 4 章  线性规划和整数规划模型

4.1 线性规划(Linear Programming,LP)

4.1.1 线性规划模型

线性规划模型的一般形式

\text{max(or min)}z=c_{1}x_{1}+c_{2}x_{2}+\cdots+c_{n}x_{n}

\text{s.t.} \left\{ \begin{matrix} a_{11}x_{1}+a_{12}x_{2}+\cdots+a_{1n}x_{n}\leqslant(or =,\geqslant)b_{1},\hfill \\ a_{21}x_{1}+a_{22}x_{2}+\cdots+a_{2n}x_{n}\leqslant(or =,\geqslant)b_{2},\hfill \\ \cdots\\ a_{m1}x_{1}+a_{m2}x_{2}+\cdots+a_{mn}x_{n}\leqslant(or =,\geqslant)b_{m},\hfill \\ x_{1},x_{2}\cdots,x_{n}\geqslant0 \hfill \end{matrix} \right.

或简写为

\text{max}\left(or\ \text{min} \right )z=\sum\limits_{j=1}^{n}c_{j}x_{j},

\text{s.t.} \left\{ \begin{matrix} \sum\limits_{j=1}^{n}a_{ij}x_{j}\leqslant\left(or \ =,\geqslant \right )b_{i},i=1,2,\cdots,m,\\ x_{j}\geqslant0,j=1,2,\cdots,n. \hfill \end{matrix} \right.

其向量表示形式为

\text{max}\left(or\ \text{min} \right )\textit{\textbf{z}}=\textit{\textbf{c}}^{T}\textit{\textbf{x}}

\text{s.t.} \left\{ \begin{matrix} \sum\limits_{j=1}^{n}\textit{\textbf{P}}_{j}x_{j}\leqslant\left(or \ =,\geqslant \right )\textit{\textbf{b}},\\ \textit{\textbf{x}}\geqslant0. \hfill \end{matrix} \right.

其矩阵表示形式为

\text{max}\left(or\ \text{min} \right )\textit{\textbf{z}}=\textit{\textbf{c}}^{T}\textit{\textbf{x}}

\text{s.t.} \left\{ \begin{matrix} \textit{\textbf{A}}\textit{\textbf{x}}\leqslant\left(or \ =,\geqslant \right )\textit{\textbf{b}},\\ \textit{\textbf{x}}\geqslant0. \hfill \end{matrix} \right.

其中,\textit{\textbf{c}}=\left[c_{1},c_{2},\cdots,c_{n} \right ]^{T} 为目标函数的系数向量,又称为价值向量;

\textit{\textbf{x}}=\left[x_{1},x_{2},\cdots,x_{n} \right ]^{T} 为决策向量;

\textit{\textbf{A}}=\left(a_{ij} \right )_{m\times n} 为约束方程组的系数矩阵;

\textit{\textbf{P}}_{j}=\left[a_{1j},a_{2j},\cdots,a_{mj} \right ]^{T},j=1,2,\cdots,n  为 \textit{\textbf{A}} 的列向量,又称约束方程组的系数向量;

\textit{\textbf{b}}=\left[b_{1},b_{2},\cdots,b_{m} \right ]^{T} 为约束方程组的常数向量。

4.1.2 模型求解及应用

可以使用 Python 的 cvxpy 库,用于求解凸优化问题python用turtle画固定樱花树。http://www.vcxpy.org/

例 4.2 求解线性规划模型

\text{max}z=70x_{1}+50x_{2}+60x_{3} \\ \text{s.t.}\left\{\begin{matrix} 2x_{1}+4x_{2}+3x_{3}\leqslant150,\\ 3x_{1}+x_{2}+5x_{3}\leqslant160,\hfill\\ 7x_{1}+3x_{2}+5x_{3}\leqslant200,\\ x_{i}\geqslant0,i=1,2,3.\hfill \end{matrix}\right.

# 程序文件 ex4_2.py
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)                 # 定义 3 个决策变量
obj = cp.Maximize(c@x)                       # 构造目标函数
cons = [a@x<=b]                              # 构造约束条件
prob = cp.Problem(obj, cons)
prob.solve(solver='GLPK_MI')                 # 求解问题
print('最优解为:', x.value)
print('最优值为:', prob.value)

例 4.3 某部分今后 5 年考虑以下投资项目,已知:

项目A,从第一年到第四年每年年初需投资,并于次年末收回本利 115%。

项目B,从第三年初需投资,到第五年末能回收本利125%,最大投资额不超过4万元。

项目C,第二年初需投资,到第五年末能收回本利140%,最大投资额不超过3万元。

项目D,五年内每年初购买,于当年末归还,利息收益6%。

部门现有资金10万元,试问如何确定这些项目每年投资额,使第五年末本利总额最大?

建立线性规划模型

\text{max}z=1.15x_{41}+1.40x_{23}+1.25x_{32}+1.06x_{54,} \\ \text{s.t.}\left\{\begin{matrix} x_{11}+x_{14}=100000,\hfill \\ x_{21}+x_{23}+x_{24}=1.06x_{14},\hfill \\ x_{31}+x_{32}+x_{34}=1.15x_{11}+1.06x_{24},\\ x_{41}+x_{44}=1.15x_{21}+1.06x_{34}, \hfill \\ x_{54}=1.15x_{31}+1.06x-{44},\hfill \\ x_{32}\leqslant40000,x_{23}\leqslant30000,\hfill \\ x_{ij}\geqslant0,i=1,2,3,4,5;j=1,2,3,4.\hfill \end{matrix}\right.

# 程序文件 ex4_3.py
import cvxpy as cp
x = cp.Variable((5, 4), pos=True)
obj = cp.Maximize(1.15*x[3, 0]+1.40*x[1, 2]+1.25*x[2, 1]+1.06*x[4, 3])
cons = [x[0, 0]+x[0, 3] == 100000,
       x[1, 0]+x[1, 2]+x[1, 3] == 1.06*x[0, 3],
       x[2, 0]+x[2, 1]+x[2, 3] == 1.15*x[0, 0]+1.06*x[1, 3],
       x[3, 0]+x[3, 3] == 1.15*x[1, 0]+1.06*x[2, 3],
       x[4, 3] == 1.15*x[2, 0]+1.06*x[3, 3],
       x[2, 1]<=40000,x[1,2]<=30000]
prob = cp.Problem(obj, cons)
prob.solve(solver='GLPK_MI')
print('最优解为:', x.value)
print('最优值为:', prob.value)

例 4.4 捷运公司在下一年度的 1~4 月拟租用仓库堆放物资。已知各月所需仓库面积如表 4.2 所示,仓库租借费用随合同同期而定,期限越长,折扣越大。合同每月初均可办理,规定租用面积和期限。每次办理可签一份合同,也可签若干份租用面积和期限不同的合同,试确定该公司签订租借合同的最优决策,使所付租借费用最小。

表 4.2 所需仓库面积和租借仓库费用数据

月份 1 2 3 4
所需仓库面积 / 100 m^{2} 15 10 20 12
合同租借期限 / 月 1 2 3 4
合同期内的租费 / 元 2800 4500 6000 7300

建立线性规划模型

\text{min}z=2800\left(x_{11}+x_{21}+x_{31}+x_{41} \right )+4500\left(x_{12}+x_{22}+x_{32} \right )+6000\left(x_{13}+x_{23} \right )+7300x_{14} \\ \text{s.t.} \left\{\begin{matrix} x_{11}+x_{12}+x_{13}+x_{14} \geqslant15,\hfill \\ x_{12}+x_{13}+x_{14}+x_{21}+x_{22}+x_{23}\geqslant10,\\ x_{13}+x_{14}+x_{22}+x_{23}+x_{31}+x_{32}\geqslant10,\\ x_{14}+x_{23}+x_{32}+x_{41}\geqslant12,\hfill \\ x_{ij}\geqslant0,i=1,2,\cdots,4;\ j=1,2,\cdots,4. \end{matrix}\right.

# 程序文件 ex4_4.py
import cvxpy as cp
x = cp.Variable((4, 4), pos=True)
obj = cp.Minimize(2800*sum(x[:,0])+4500*sum(x[:3,1])+6000*sum(x[:2,2])+7300*x[0,3])
cons = [sum(x[1,:])>=15,
       sum(x[0,1:])+sum(x[2,:3])>=10,
       sum(x[0,2:])+sum(x[1,1:3])+sum(x[2,:2])>=20,
       x[0,3]+x[1,2]+x[2,1]+x[3,0]>=12]
prob = cp.Problem(obj, cons)
prob.solve(solver='GLPK_MI')
print('最优解为:\n',x.value)
print('最优值为:',prob.value)

例 4.5 计算 6 个产地 8 个销地的最小费用运输问题,单位商品运价如表 4.3 所示

表 4.3 单位商品运价表

B_{1} B_{2} B_{3} B_{4} B_{5} B_{6} B_{7} B_{8} 产量
A_{1} 6 4 6 7 4 2 5 9 60
A_{2} 4 9 5 3 8 5
  • 15
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值