目录

  • 线性规划模型形式
  • 线性规划问题的Python求解
    • 1. scipy.optimize.linprog
    • 2. cvxopt.solvers
    • 3. cvxpy

线性规划模型形式

线性规划模型的一般形式为
max ⁡ ( min ⁡ ) z = ∑ j = 1 n c j x j ; ( 1 ) s.t.  { ∑ j = 1 n a i j x j ≤ ( ≥ , = ) b i , i = 1 , 2 , ⋯ , m , x j ≥ 0 , j = 1 , 2 , ⋯ , n . ( 2 ) \begin{gathered} \max (\min ) z=\sum_{j=1}^{n} c_{j} x_{j} ; \quad (1) \\ \text { s.t. } \begin{cases} \sum_{j=1}^{n} a_{i j} x_{j} \leq(\geq,=) b_{i}, i=1,2, \cdots, m, \\ x_{j} \geq 0, \quad j=1,2, \cdots, n . \end{cases} \quad (2) \end{gathered} max(min)z=j=1∑n​cj​xj​;(1) s.t. {∑j=1n​aij​xj​≤(≥,=)bi​,i=1,2,⋯,m,xj​≥0,j=1,2,⋯,n.​(2)​

或矩阵形式
max ⁡ ( min ⁡ ) z = c T x ; ( 1 ) s.t.  { A x ≤ ( ≥ , = ) b , x ≥ 0. ( 2 ) \begin{gathered} &\max (\min ) z=c^{T} x; \quad (1) \\ &\text { s.t. }\left\{\begin{array}{l} A x \leq(\geq,=) b, \\ x \geq 0. \end{array}\right. \quad (2) \end{gathered} ​max(min)z=cTx;(1) s.t. {Ax≤(≥,=)b,x≥0.​(2)​

其中,式 (1) 称为目标函数,式 (2) 称为约束条件。

线性规划问题的Python求解

1. scipy.optimize.linprog

标准型式:
min ⁡ z = c T x s.t.  { A ⋅ x ≤ b A e q ⋅ x = b e q L b ≤ x ≤ U b \begin{gathered} \min \quad z=c^{T} x \\ \text { s.t. }\left\{\begin{array}{l} A \cdot x \leq b \\ A e q \cdot x=b e q \\ L b \leq x \leq U b \end{array}\right. \end{gathered} minz=cTx s.t. ⎩⎨⎧​A⋅x≤bAeq⋅x=beqLb≤x≤Ub​​

调用方式:

from scipy.optimize import linprog
res=linprog(c, A=None, b=None, Aeq=None, beq=None, bounds=None, method='simplex')

c, A, b, Aeq, beq 分别为上述标准型式中的目标向量, 不等号约束, 与等号约束.
bounds 是决策向量的下界和上界所组成的 n n n 个元素的元组. 如 − ∞ < x 1 < + ∞ - \infty < {x_1} < + \infty −∞<x1​<+∞, − 3 ⩽ x 2 < + ∞ - 3 \leqslant {x_2} < + \infty −3⩽x2​<+∞, 则 bounds=((None,None),(-3,None))

# Lb, Ub 转化为 bounds
bounds=tuple(zip(Lb, Ub))

默认每个决策变量下界为 0 0 0, 上界为 + ∞ + \infty +∞

返回值:

print(res.fun) #最优值 (目标函数最小值)
print(res.x ) #最优解

2. cvxopt.solvers

标准型:
min ⁡ z = c T x s.t.  { A ⋅ x ≤ b A e q ⋅ x = b e q \begin{gathered} &\min \quad z=c^{T} x \\ &\text { s.t. }\left\{\begin{array}{l} A \cdot x \leq b \\ A e q \cdot x=b e q \end{array}\right. \end{gathered} ​minz=cTx s.t. {A⋅x≤bAeq⋅x=beq​​

调用方式:

import numpy as np
from cvxopt import matrix, solvers
sol=solvers.lp(c,A,b,Aeq,beq)
#c,A,b,Aeq,beq 为 cvxopt.matrix 矩阵
'''
可用 cvxopt.matrix(array,dims) 把array按照dims重新排成矩阵省略dims:   如果array为np.array, 则为其原本形式; 如果array为list, 则认为 list 中用逗号分隔开的为一"列"
'''

返回值:

print(sol['x']) #最优解
print(sol['primal objective']) #最优值

:

  • 在程序中虽然没有直接使用 NumPy 库中的函数,也要加载
  • 数据如果全部为整型数据,也必须写成浮点型数据

3. cvxpy

调用方式:

import cvxpy as cp
import numpy as np
import pandas as pd
x=cp.Variable(shape=(), name=None, var_id=None, **kwargs)
#shape: 表示形状, 可以使用元组表示矩阵
#name: 变量名字, 可以使用字符串
#例如 x=cp.Variable((m,n)) # m*n 的矩阵
#或 x=cp.Variable(shape=(3,3), name='cov', symmetric=True)
'''数域
boolean 布尔型, integer 整数型
x=cp.Variable(shape=(1),boolean=True)
y=cp.Variable(shape=(1),integer=True)
neg 负数, nonneg 非负
x=cp.Variable(shape=(1),nonneg=True)
pos 正数, nonpos 非正
x=cp.Variable(shape=(1),nonpos=True)
complex 复数, imag 虚数
'''
obj=cp.Minimize(f)  #构造目标函数
#可选 cp.Minimize, cp.Maximize
'''
cvxpy 的函数
使用 * 进行矩阵标量和向量标量乘法。
使用 @ 进行矩阵-矩阵和矩阵-向量乘法。
使用 cp.multiply 进行元素乘法
'''
con=[]  #构造约束条件的列表
prob=cp.Problem(obj,con)  #构造模型
prob.solve(solver='GLPK_MI',verbose=True) #求解模型, verbose=True 表明显示具体求解信息
#显示已安装的求解器: cp.installed_solvers()

返回值:

print(prob.value) # 最优值
print(x.value) # 最优解

示例:
min ⁡ ∑ i = 1 m ∑ j = 1 n c i j x i j , s.t.  { ∑ j = 1 n x i j ≤ b ⃗ , i = 1 , 2 , ⋯ , m , ∑ i = 1 m x i j = b e q ⃗ , j = 1 , 2 , ⋯ , n , L b ≤ X ≤ U b , X = ( x i j ) , i = 1 , 2 , ⋯ , m ; j = 1 , 2 , ⋯ , n . \begin{gathered} &\min \quad \sum_{i=1}^{m} \sum_{j=1}^{n} c_{i j} x_{i j}, \\ &\text { s.t. }\left\{\begin{array}{l} \displaystyle{\sum_{j=1}^{n} x_{i j} \leq \vec{b}, \quad i=1,2, \cdots, m,} \\ \displaystyle{\sum_{i=1}^{m} x_{i j}= \vec{beq}, \quad j=1,2, \cdots, n,} \\ \displaystyle{\mathbf{Lb} \leq \mathbf{X} \leq \mathbf{Ub}, \quad \mathbf{X}=(x_{ij}), i=1,2, \cdots, m ; j=1,2, \cdots, n .} \end{array}\right. \end{gathered} ​mini=1∑m​j=1∑n​cij​xij​, s.t. ⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧​j=1∑n​xij​≤b ,i=1,2,⋯,m,i=1∑m​xij​=beq ​,j=1,2,⋯,n,Lb≤X≤Ub,X=(xij​),i=1,2,⋯,m;j=1,2,⋯,n.​​

import cvxpy as cp
import numpy as np
import pandas as pd
x=cp.Variable((m,n)) #构造m*n维变量
obj=cp.Minimize(cp.sum(cp.multiply(c,x)))  #构造目标函数
con=[cp.sum(x,axis=1,keepdims=True)<=b,cp.sum(x,axis=0,keepdims=True)==beq,Lb<=x<=Ub]  #构造约束条件
prob=cp.Problem(obj,con)  #构造模型
prob.solve(solver='GLPK_MI',verbose=True) #求解模型
print(prob.value) # 最优值
print(x.value) # 最优解

数学建模:线性规划及 Python 求解相关推荐

  1. Python数学建模—线性规划

    我是猿童学,本文是根据司守奎老师<数学建模算法与程序>的书本内容编写,使用其书中案例,书中的编程语言是MATLAB.Lingo,我将使用Python来解决问题.接下来的一个月我将学习使用P ...

  2. 数学建模——线性规划模型详解Python代码

    数学建模--线性规划模型详解Python代码 标准形式为: min z=2X1+3X2+x s.t x1+4x2+2x3>=8 3x1+2x2>=6 x1,x2,x3>=0 上述线性 ...

  3. 数学建模——灰色预测模型Python代码

    数学建模--灰色预测模型Python代码 """ Spyder Editor This is a temporary script file. ""& ...

  4. 【数学建模】2003年全国大学生数学建模竞赛B题求解

    目录 [数学建模]2003年全国大学生数学建模竞赛B题求解 [数学建模]2003年全国大学生数学建模竞赛B题求解 model: title CUMCM-2003B-01; sets: cai / 1. ...

  5. 蹦极模型matlab仿真,科学网—蹦极的数学建模及其龙格-库塔法求解方法 - 赵也非的博文...

    论文: 蹦极的数学建模及其龙格-库塔法求解方法 在"华东师范大学首届研究生数学建模竞赛"中,获得二等奖. 发表日期: 2007年5月 摘要: 本文通过参照题中给出的数据,对蹦极者在 ...

  6. python数学建模--线性规划问题案例及求解

    目录 数学问题:线性规划问题 程序设计 结果分析 实际应用1:加工厂的生产计划 设置未知数 建立数学模型 程序设计 结果分析 实际应用2:油料加工厂的采购和加工计划 设置未知数 建立数学模型 程序设计 ...

  7. 数学建模可以用python吗_Python中常用的数学建模Scipy

    Python中常用的数学建模Scipy 发布时间:2020-09-10 16:56:48 来源:亿速云 阅读:116 本篇文章为大家展示了Python中常用的数学建模Scipy,代码简明扼要并且容易理 ...

  8. 数学建模 线性规划报告_2019年高中数学新教材正式发布!变化明细首次曝光!...

    数学教研 & 解题研究 & 资源共享 诚邀老师您加入教师群 请在"公众号对话框"回复 入群 2017年12月,教育部组织修订并颁布了<普通高中课程方案和语文等 ...

  9. 集货运输优化:数学建模步骤,Python实现蚁群算法(解决最短路径问题), 蚁群算法解决旅行商问题(最优路径问题),节约里程算法

    目录 数学建模步骤 Python实现蚁群算法(解决最短路径问题) 蚁群算法解决旅行商问题(最优路径问题) 节约里程算法

最新文章

  1. Visual C++ 时尚编程百例005(菜单)
  2. Object-C中的字符串对象1-不可变字符串
  3. 他解决了物理学千年争端,成就肩比牛顿、爱因斯坦,但却鲜有人知......
  4. matlab 连接数组,matlab数组操作知识点总结
  5. magento 优化 php.ini,PHP.ini配置文件(中文) | Magento UI
  6. python3的xpath_python3爬虫之xpath
  7. javaWEB知识总结——Ajax和Json
  8. truecrypt使用教程_如何使用TrueCrypt保护您的闪存驱动器数据
  9. C++ 二进制读入和Minist图片展示
  10. 朝花夕拾-不务正业的大学生做了什么比赛?
  11. 开源推荐:可用于生产的java聚合支付系统
  12. 如何评价近几年顶会的超分,去噪,去模糊等图像复原文章?
  13. 笔记本怎样外接显示器 笔记本外接显示器方法【详解】
  14. android8.1 修改默认时区为中国
  15. 射频百科:双工器是什么?双工器工作原理
  16. 【Python】天气预报(发送网易邮件,微信公众测试号,企业微信),周末用时一天,两万字代码,纯肝货(完整项目)一一CSDN21天学习挑战赛
  17. WPF 控件【U】UserControl(一) UserControl、ContentControl、Page的区别,及它们的使用方法
  18. 经典幽默的计算机名言
  19. 解决vs2017无法安装问题
  20. Rstudio常用操作

热门文章

  1. 【码云周刊第 10 期】放码过来,四个男人的带头冲锋!!(内附 PPT 下载链接)...
  2. 海康摄像头opencv实时回调
  3. MES智能工厂信息化系统
  4. 宽带信号的DOA估计学习笔记(四):空间分辨率
  5. 远程医疗中使用AR眼镜,内窥镜,视频远程诊疗方案
  6. 天数怎么换算成月_excel表中,怎么把日期数转换成月份数呢?
  7. 哈希表Hash与JAVA集合类Map及其方法put()、getOrDefault()、keySet()、get()
  8. 基于Protobuf的通讯库--Poppy简介
  9. 微信小程序获取用户信息-头像、昵称......
  10. 数据结构-二叉树-详解