数学建模——线性规划

本文介绍了如何运用Python解决线性规划问题,通过标准模型转换和使用特定库如scipy,详细解释了两个例题的求解过程,并提供了一个综合题目的分析与建模思路。总结了解决线性规划的步骤,包括列出标准方程、调用相关函数,并展示了一个涉及多个货舱和货物质量决策的复杂问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数学建模——线性规划

参考博客:用python解决线性规划

模型标准型:

所需库:scipy、pulp(可选)

例题1

转化为标准形:
{ − x + y ≤ 5 − x − y ≤ 0 x ≤ 3 \begin{cases}-x+y\le 5\\-x-y\le 0\\x\le 3\end{cases} x+y5xy0x3

import numpy as np
from scipy import optimize
#以下符号与标准形对应
z = np.array([4,-1]) #z = 4x-y
A = np.array([[-1,1],
              [-1,-1]]) # 约束条件系数矩阵
b = np.array([5,0]) 
x = (None,3) #x<=3
y = (None,None)
res = optimize.linprog(z,A,b,bounds=(x,y))
res
     con: array([], dtype=float64)
     fun: -12.499999999587356
 message: 'Optimization terminated successfully.'
     nit: 4
   slack: array([1.52723167e-10, 2.05568895e-11])
  status: 0
 success: True
       x: array([-2.5,  2.5])

例题2

转化为标准型:
{ − 2 x 1 + 5 x 2 − x 3 ≤ − 10 x 1 + 3 x 2 + x 3 ≤ 12 x 1 + x 2 + x 3 = 7 x 1 , x 2 , x 3 ≥ 0 \begin{cases}-2x_1+5x_2-x_3\le-10\\x_1+3x_2+x_3\le 12\\x_1+x_2+x_3=7\\x_1,x_2,x_3\ge 0\end{cases} 2x1+5x2x310x1+3x2+x312x1+x2+x3=7x1,x2,x30

import numpy as np
from scipy import optimize

z = np.array([2,3,-5]) #要求最大值,只要在最后调用函数时乘一个-1就行,系数不用改
A = np.array([[-2,5,-1],[1,3,1]])
b = np.array([-10,12])
Aeq = np.array([[1,1,1]]) #注意是二维数组
beq = np.array([7])
x1 = (0,None)
x2 = (0,None)
x3 = (0,None)
res = optimize.linprog(-z,A,b,Aeq,beq,(x1,x2,x3))
res
     con: array([1.80712245e-09])
     fun: -14.571428565645084
 message: 'Optimization terminated successfully.'
     nit: 5
   slack: array([-2.24599006e-10,  3.85714286e+00])
  status: 0
 success: True
       x: array([6.42857143e+00, 5.71428571e-01, 2.35900788e-10])

pulp库可选学,此不附,可参见参考博客

总结步骤:

  • 列出标准型方程
  • 调包(doge)
  • 根据方程列出价值向量、约束条件的系数矩阵、常数向量(注意是小于等于条件下的),等于条件分开列,以及决策变量的范围
  • 调用函数,依次输入价值向量、系数矩阵、常数向量、等式条件的系数矩阵、常数向量、决策向量

来个综合题


习题来源:《数学建模算法与程序》司守奎

分析题目,可知决策向量为每个货舱内各个货物的质量,可视为三行四列的矩阵

### 使用 Python cvxpy 进行数学建模和规划求解 #### 导入必要的库 为了使用 `cvxpy` 进行数学建模,首先需要导入所需的库。这通常包括 `cvxpy` 自身以及用于数值计算的 `numpy`。 ```python import cvxpy as cp import numpy as np ``` #### 定义决策变量 定义模型中的未知量即为决策变量。这些变量可以根据具体问题设置连续型或离散型(整数)。例如: ```python c = np.loadtxt('data4_10.txt') x = cp.Variable((4, 5), integer=True) # 创建一个大小为 (4, 5),且取值范围限定为整数类型的矩阵作为决策变量[^3] ``` 这里创建了一个名为 `x` 的四维向量,其元素均为布尔类型(通过上下界限制实现),并指定了该变量应满足特定约束条件下的整数属性。 #### 构造目标函数 接下来要构建的是优化的目标表达式。对于最小化本的问题来说,可以通过如下方式来设定目标函数: ```python obj = cp.Minimize(cp.sum(cp.multiply(c, x))) # 将本系数与对应的决策变量相乘再累加起来形总费用,并将其设为目标最小化的对象 ``` 这段代码实现了将给定的本数组 `c` 中每一个位置上的权重同相应位置处的决策变量 `x` 值做乘法运算之后的结果汇总到一起构最终待极小化的目标值。 #### 添加约束条件 除了明确指出希望达到什么样的最优点之外,还需要规定一些额外的要求使得解决方案更加贴近实际情况。比如在这个例子当中就加入了几个典型的不等式形式的边界控制措施: ```python cons = [ 0 <= x, x <= 1, cp.sum(x, axis=0) == 1, cp.sum(x, axis=1) <= 2 ] # 设置一系列关于决策变量 x 的线性不等式/方程组作为附加限制条款 ``` 上述列表包含了四个不同方面的规则:确保所有分配比例介于零至一之间;每一列仅有一个供应商被选中供应货物;每种商品最多由两个不同的仓库提供服务。 #### 解决方案实例化及求解过程 最后一步就是把之前准备好的各个组件组合在一起组完整的凸优化问题结构体,并调用内置的方法去寻找符合条件的最佳配置方案。 ```python prob = cp.Problem(obj, cons) prob.solve(solver='GLPK_MI') # 实例化一个问题实体并将前面建立的对象传递进去完初始化工作后执行具体的寻优操作 print('最优解为:\n', x.value) print('最优值为:', prob.value) ``` 此部分先建立了包含有既定目标函数和一组关联紧密的约束关系在内的整体框架,随后借助选定的具体算法引擎来进行实际计算得出结论。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值