使用Python scipy linprog 线性规划求最大值或最小值(使用Python学习数学建模笔记)
- 函数格式
- scipy.optimize.linprog(c, A_ub=None, b_ub=None, A_eq=None, b_eq=None, bounds=None, method='simplex', callback=None, options=None)
- 今天阅读数据建模第一章线性规划问题,问题描述如下:

- 通过介绍我们知道了线性规划,就是目标函数及约束条件均为线性函数。

- 通过画图我们可知,X1,X2的最优解为2,6,目标值为26。
- 我们如何时候这个scipy的公式来计算这个值呢:
>>> c = [-1, 4]
>>> A = [[-3, 1], [1, 2]]
>>> b = [6, 4]
>>> x0_bounds = (None, None)
>>> x1_bounds = (-3, None)
>>> from scipy.optimize import linprog
>>> res = linprog(c, A_ub=A, b_ub=b, bounds=(x0_bounds, x1_bounds),
... options={"disp": True})
>>> print(res)
Optimization terminated successfully.
Current function value: -11.428571
Iterations: 2
status: 0
success: True
fun: -11.428571428571429
x: array([-1.14285714, 2.57142857])
message: 'Optimization terminated successfully.'
nit: 2
- 上面是官方给出的案例,我们很难看出来这个怎么求解最大值,不过英语好的也可以把。
- 言归正传,我们先结合官网是思路得出最小值的解。
In [1]:c = np.array([4,3])
In [1]:a = np.array([[2,1],[1,1]])
In [1]:In [1]:b = np.array([10,8])
In [1]:optimize.linprog(c,a,b,bounds=((0,None),(0,7)))
Out[1]:
fun: -0.0
message: 'Optimization terminated successfully.'
nit: 0
slack: array([ 10., 8., 7.])
status: 0
success: True
x: array([ 0., 0.])
- 按照正常的计算 我们得出了最小值为0,且x的两个值为 0 , 0。对于上面的的公式有必要说明的是,bounds是针对x的最大最小一次给一个值,从题目可知,x1的取值范围为大于0,最小值就为0,最大值没有约束,被其他的条件所约束就可以了 ,没有明确,所以是写的 (0,None),而相对x2来说,他最小值为0,最大值被C约束,为7。所以范围为(0,7),当有三个求解的时候,依次增加,不可省略。
- 接下来我们说这个最大值怎么求,其实只要对C取反我们就可以求除最大值的负数,对结果在取反回来就可以了
In [1]:optimize.linprog(-c,a,b,bounds=((0,None),(0,7)))
Out[1]:
fun: -26.0
message: 'Optimization terminated successfully.'
nit: 2
slack: array([ 0., 0., 1.])
status: 0
success: True
x: array([ 2., 6.])
- 是不是很简单,得到的-26取反回来就是我们的最大值求解了,(2,6)就是我们的X1,X2取值了。其实有时候那个条件为>,>=的时候我们要写成<,<=的模式,一样对参数和结果取反就行了。
- 我这里在补充一个求三个解的实例:


- 我们的最优解为 14.57
使用Python scipy linprog 线性规划求最大值或最小值(使用Python学习数学建模笔记)的更多相关文章
- 使用python scipy.optimize linprog和lingo线性规划求解最大值,最小值(运筹学学习笔记)
1.线性规划模型: 2.使用python scipy.optimize linprog求解模型最优解: 在这里我们用到scipy中的linprog进行求解,linprog的用法见https://doc ...
- POJ 3264 Balanced Lineup【线段树区间查询求最大值和最小值】
Balanced Lineup Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 53703 Accepted: 25237 ...
- 【BigData】Java基础_定义工具类,对ArrayList排序并且求最大值、最小值、平均值
需求描述 编写一个工具类,对ArrayList实现以下功能: ① 排序 ② 求最大值 ③ 求最小值 ④ 求平均值 需求实现 实现代码 package cn.test.logan.day04; impo ...
- C语言:用指针求最大值和最小值
用指针求数组最大值和最小值(10分) 题目内容: 用指针求含有十个元素的数组最大值和最小值 主函数参考 int main() { int a[10],i,maxnum,minnum; for(i=0; ...
- python 版 mldivide matlab 反除(左除)《数学建模算法与程序》Python笔记
今天在阅读数学建模的时候看到了差分那章 其中有一个用matlab求线性的代码,这里我贴出来 这里我送上 Python代码 In [39]: import numpy as np ...: from s ...
- JS数组求最大值和最小值
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- js 数组里求最大值和最小值
// 数组里相邻两个数做比较 取满足条件的那个(以此类推) var arr = [1,3,4,5,6,7]; function Max(array){ var max = array[0]; for( ...
- JS 数组求 最大值、最小值、平均值以及求和方法
function arrMaxNum2(arr) { return Math.max.apply(null, arr); } function arrMinNum2(arr) { return Mat ...
- python应用-一组数的最大值,最小值,平均数
def foo(n): c=[] for _ in range (n): var=randint(60,100) c.append(var) print(c) total=0 max = c[0] m ...
随机推荐
- javascript字符转直接量和转义字符
直接量: 你可以用单引号或者双引号来表示字符串的直接量.但是js的字符串必须是Unicode 字符序列. 转义字符: 主要用在字符串中,包涵控制字符,以及当前操作系统余元所不允许直接输入的字符. 转义 ...
- python走起之第十二话
1. ORM介绍 orm英文全称object relational mapping,就是对象映射关系程序,简单来说我们类似python这种面向对象的程序来说一切皆对象,但是我们使用的数据库却都是关系型 ...
- Swift根据日期字符串返回日期是星期几
最近在做的一个IOS项目中需要根据日期得出日期代表的是星期几,日期以字符串的形式获得,于是该方法可以简单描述如下: /* * 根据日期格式字符串返回日期代表星期几 * 参数:dateTime,字符串类 ...
- hdu 5676 ztr loves lucky numbers
题目链接:hdu 5676 一开始看题还以为和数位dp相关的,后来才发现是搜索题,我手算了下,所有的super lucky number(也就是只含数字4, 7且4, 7的数量相等的数)加起来也不过几 ...
- typeof,GetType
typeof: 是运算符,获得某一类型的 System.Type 对象. Int32 t = new Int32(); Type t = typeof(int); GetType: 是方法,获取当前实 ...
- [Java] SoapUI使用Java获取各时间日期方法
import java.util.*; import java.text.SimpleDateFormat; // current date String dateNew = today() // t ...
- vscode 与 python 的约会
安装python 官网(https://www.python.org/downloads/)下载, 安装. (简单略过). 运行python代码 运行python代码的常见方式有三种: 运行pytho ...
- ATC空管系统的实时控制软件系统分析
什么是ATC空管系统? 空中交通管制的目的是对航空器的空中活动进行有效的管理,维护空中交通秩序,保障空中交通畅通,保证飞行安全和提高飞行效率,防止航空器相撞,防止机场及其附近空域的航空器同障碍物相撞. ...
- 整合TabBarController与NavigationController
一.项目结构 一开始创建一个空的项目
- lua特性纪要
[局部变量] lua的局部变量通过local进行显示声明, 其作用域仅限于声明它的块block.这里的block分为三种类型: 1.控制结构的执行体 2.函数的执行体 3.chunk 比较容易引起混淆 ...