ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

数学建模-简单基础与scipy.linprog包的使用

2022-01-19 17:02:53  阅读:240  来源: 互联网

标签:linprog cc6 建模 scipy None array numpy


如何建立数据模型

数学规划(1)简单基础与scipy.linprog包的使用

Eg1:运输问题

设A1,A2调运到三个粮站B1,B2,B3的大米分别为\(x_{1},x_{2},x_{3},x_{4},x_{5},x_{6}\)单位为吨。
\(minf = 12x_{1}+24x_{2}+8x_{3}+30x_{4}+12x_{5}+24x_{6}\)
于是就有

\[s.t.\left\{ \begin{aligned} x_{1}+x_{2}+x_{3}\leqslant4\\ x_{4}+x_{5}+x_{6}\leqslant8\\ x_{1}+x_{4}\geqslant2\\ x_{2}+x_{5}\geqslant4\\ x_{3}+x_{6}\geqslant5\\ x_{1},x_{2},x_{3},x_{4},x_{5},x_{6}\geqslant0 \end{aligned} \right. \]

进而可以得出python代码如下
       import numpy 
       from scipy.optimize import linprog
       # 不使用科学计数法
       numpy.set_printoptions(suppress=True)
       targetCoefficient = numpy.array([12,24,8,30,12,24])
       # cc represents ConstraintCoefficient
       cc1 = numpy.array([1,1,1,0,0,0])
       cc2 = numpy.array([0,0,0,1,1,1])
       cc3 = numpy.array([-1,0,0,-1,0,0])
       cc4 = numpy.array([0,-1,0,0,-1,0])
       cc5 = numpy.array([0,0,-1,0,0,-1])
       # 因为上下界默认是0-inf,所以这个无需管
       # cc6_1 = numpy.array([1,0,0,0,0,0])
       # cc6_2 = numpy.array([0,1,0,0,0,0])
       # cc6_3 = numpy.array([0,0,1,0,0,0])
       # cc6_4 = numpy.array([0,0,0,1,0,0])
       # cc6_5 = numpy.array([0,0,0,0,1,0])
       # cc6_6 = numpy.array([0,0,0,0,0,1])
       a = [cc1,cc2,cc3,cc4,cc5]
       b = [4,8,-2,-4,-5]
       res = linprog(targetCoefficient,A_ub = a,b_ub=b,method='revised simplex')
       print(res)
进一步运行得到结果:

数学规划要点总结

1.决策变量尽量设置为通量,下标多是可以接受的(方便寻找其含义,以上题为例记为\(x_{11}\),\(x_{21}\),就比\(x_{1}\),\(x_{4}\)更为清晰)
2、模型中尽量不要出现数字,用字母代替,方便模型的拓展以及编程,这样变量就可以简单分为决策变量和一直变量
3、决策变量是越多越好
4、规划的数学模型不允许出现分式,更不能将决策变量放在分母里。如果出现这种情况就要进行变换,将分母的决策变量外移
5、尽量将决策变量移至一边
6、建模时线性模型最好处理,出现非线性模型应该先尝试化为线性

scipy.linprog包的基本使用

官方网站:https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.linprog.html
使用介绍:仅能用在简单线性规划上,限制很大
scipy.optimize.linprog(c, A_ub=None, b_ub=None, A_eq=None, b_eq=None,
 bounds=None, method='interior-point', callback=None, options=None, x0=None)
# 参数意义详见下图

# method 的选项有:
# ‘highs-ds’ 
# ‘highs-ipm’
# ‘highs’
# ‘interior-point’ (default)
# ‘revised simplex’
# ‘simplex’ (legacy)
# 通常来说选用revise simplex作为精度即可
使用样例

标签:linprog,cc6,建模,scipy,None,array,numpy
来源: https://www.cnblogs.com/OceanCT/p/15823005.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有