这里写目录标题

  • 关于方程组的标准形式
  • 参数
  • c
  • A_ub
  • b_ub
  • A_eq
  • b_eq
  • bounds
  • method
  • callback
  • options
  • maxiter
  • disp
  • presolve
  • 返回值
  • res
  • x
  • fun
  • *slack
  • *con
  • success
  • status
  • nit
  • message
  • 演示程序


scipy.optimize.linprog(c, A_ub=None, b_ub=None, A_eq=None, 
		b_eq=None, bounds=None, method='highs', callback=None,
		 options=None, x0=None, integrality=None)

最小化受到等式和不等式制约的目标函数

关于方程组的标准形式

官方文档的说法是这样的,给出了两种形式

  1. 形式1
  2. Python linprog标准型 python linprog函数_方程组

  3. 形式2
  4. Python linprog标准型 python linprog函数_scipy_02

我们看到,
首先,决策变量x应该使得目标函数最小化
其次,b_up代表的不等式约束向量应该在小于等于号的右边
根据官方给出的方程组形式我们可以将实际中遇到的方程组先转化为标准形式,然后利用该函数求解

参数

接下来我们结合一个实际例子来说明各个参数的意义
假设有一个线性规划问题如下
Python linprog标准型 python linprog函数_机器学习_03

将其转化为scipy中的标准形式
Python linprog标准型 python linprog函数_算法_04

该问题的解请看下面的演示程序

c

1-D array
线性目标函数的系数

Python linprog标准型 python linprog函数_scipy_05

A_ub

2-D array, optional
不等式约束矩阵

Python linprog标准型 python linprog函数_机器学习_06

b_ub

1-D array, optional
不等式约束向量

Python linprog标准型 python linprog函数_Python linprog标准型_07

A_eq

2-D array, optional
等式约数矩阵

Python linprog标准型 python linprog函数_Python linprog标准型_08

b_eq

1-D array, optional
等式约数向量

Python linprog标准型 python linprog函数_机器学习_09

bounds

sequence, optional
决策变量x的最大最小值
其中的每个元素都表示一个决策变量x中的最小值和最大值(min,max)

Python linprog标准型 python linprog函数_Python linprog标准型_10
元组中有三个元素,分别表示Python linprog标准型 python linprog函数_Python linprog标准型_11

method

str, optional
优化算法

支持‘highs’ (default), ‘highs-ds’, ‘highs-ipm’, ‘interior-point’ (legacy), ‘revised simplex’ (legacy), and ‘simplex’ (legacy)等多种算法,其中lagacy将在scipy 1.11.0版本中被移除

callback

callable, optional
调用回调函数

options

dict, optional
优化器选项字典

maxiter

int
算法执行的最大迭代次数

disp

bool,default=False
是否打印收敛消息

presolve

bool
是否自动预解析

返回值

res

OptimizeResult
决策结果类,包含下面变量

Python linprog标准型 python linprog函数_Python linprog标准型_12

上图为笔者使用该函数得到的返回值,仅做参考

x

1-D array
使目标函数达到最佳值的决策变量的值.

fun

float
目标函数最佳值

*slack

1-D array
不等式约束的松弛值

*con

1-D array
等式残差约束

success

bool
算法成功找到最佳解决方案时返回True

status

int
表示算法退出状态的整数

0

成功完成优化

1

达到迭代限制

2

问题不可解

3

问题不收敛

4

数值问题

nit

int
在所有阶段中执行的迭代总数

message

str
算法退出状态的字符串描述符

演示程序

from scipy.optimize import linprog

c=[-1,2,3]
A=[[-2,1,1],[3,-1,-2]]
b=[[9],[-4]]
aeq=[[4,-2,-1]]
beq=[-6]
bounds=((-10, None), (0, None), (None, None))
res=linprog(c=c, A_ub=A, b_ub=b, A_eq=aeq, b_eq=beq, bounds=bounds,)

运行结果

Python linprog标准型 python linprog函数_Python linprog标准型_13