scipy.optimize.linprog函数参数最全详解
scipy.optimize.linprog函数
1、线性规划概念
定义:在线性等式和不等式约束下,最小化线性目标函数。
m
i
n
x
c
T
x
s
.
t
.
A
u
b
x
≤
b
u
b
,
A
e
q
x
=
b
e
q
,
l
≤
x
≤
u
\underset{x}{min}\ c^{T}x\\ s.t. \ A_{ub}x \le b_{ub},\\ A_{eq}x = b_{eq},\\ l \le x \le u
xmin cTxs.t. Aubx≤bub,Aeqx=beq,l≤x≤u
其中 x 是决策变量的向量;c、bub、beq、l、u是向量;和
A
u
b
A_{ub}
Aub、
A
e
q
A_{eq}
Aeq是矩阵。
2、输入格式
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)
3、参数设置:
-
c:线性目标函数的系数
- 数据类型:一维数组
-
A_ub(可选参数):不等式约束矩阵, A u b A_{ub} Aub的每一行指定 x x x上的线性不等式约束的系数
- 数据类型:二维数组
-
b_ub(可选参数):不等式约束向量,每个元素代表 A u b x A_{ub}x Aubx的上限
- 数据类型:一维数组
-
A_eq(可选参数):等式约束矩阵, A e q A_eq Aeq的每一行指定 x x x上的线性等式约束的系数
- 数据类型:二维数组
-
b_eq(可选参数):等式约束向量, A e q x A_{eq}x Aeqx的每个元素必须等于 b e q b_{eq} beq的对应元素
- 数据类型:一维数组
-
bounds(可选参数):定义决策变量 x x x的最小值和最大值
- 数据类型:
(min, max)
序列对 - None:使用None表示没有界限,默认情况下,界限为(0,None)(所有决策变量均为非负数)
- 如果提供一个元组
(min, max)
,则最小值和最大值将用作所有决策变量的界限。
- 数据类型:
-
method(可选参数):算法,
{‘interior-point’, ‘revised simplex’, ‘simplex’}
以上三种算法可选- 数据类型:输入如上三种字符串
-
callback(可选参数):调用回调函数,我的理解是等待被调用的参数 ,如果提供了回调函数,则算法的每次迭代将至少调用一次。回调函数必须接受单个
scipy.optimize.OptimizeResult
由以下字段组成:- x:当前解向量
- 数据类型:一维数组
- fun:目标函数的当前值(
c
T
x
c^Tx
cTx)
- 数据类型:浮点数
- success:当算法成功完成时为
True
- 数据类型:布尔值
- slack:不等式约束的松弛值(名义上为正值) b u b − A u b x b_{ub}-A_{ub}x bub−Aubx
- 数据类型:一维数组
- con:等式约束的残差(名义上为零) b e q − A e q x b_{eq}-A_{eq}x beq−Aeqx
- 数据类型:一维数组
- phase:正在执行算法的阶段
- 数据类型:整数
-
status:表示算法退出状态的整数
-
数据类型:整数
-
0
: 优化按名义进行1
: 达到了迭代限制2
: 问题似乎不可行3
: 问题似乎是不收敛4
: 遇到数值困难
-
-
nit:当前的迭代次数
- 数据类型:整数
-
message:算法状态的字符串描述符
- 数据类型:字符串
- x:当前解向量
-
options(可选参数):求解器选项字典,所有方法都接受以下选项:
-
数据类型:字典
-
maxiter
:整数,要执行的最大迭代次数disp
:布尔值,设置为True
以打印收敛消息,默认值:False
autoscale
:布尔值,设置为True
以自动执行平衡,如果约束中的数值分开几个数量级,请考虑使用此选项,默认值:False
presolve
:布尔值,设置为False
可禁用自动预解析,默认值:True
rr
:布尔值,设置为False
可禁用自动移除冗余,默认值:True
-
-
x0(可选参数):猜测决策变量的值,将通过优化算法进行优化。当前仅由’ revised simplex’ 方法使用此参数,并且仅当 x0 表示基本可行的解决方案时才可以使用此参数。
- 数据类型:一维数组
4、输出格式:
-
x:在满足约束的情况下将目标函数最小化的决策变量的值
- 数据类型:一维数组
-
fun:目标函数的最佳值( c T x c^Tx cTx)
- 数据类型:浮点数
-
slack:不等式约束的松弛值(名义上为正值) b u b − A u b x b_{ub}-A_{ub}x bub−Aubx
- 数据类型:一维数组
-
con:等式约束的残差(名义上为零) b e q − A e q x b_{eq}-A_{eq}x beq−Aeqx
- 数据类型:一维数组
-
success:当算法成功找到最佳解决方案时为
True
- 数据类型:布尔值
-
status:表示算法退出状态的整数
-
数据类型:整数
-
0
: 优化成功终止1
: 达到了迭代限制2
: 问题似乎不可行3
: 问题似乎是不收敛4
: 遇到数值困难
-
-
nit:在所有阶段中执行的迭代总数
- 数据类型:整数
-
message:算法退出状态的字符串描述符
- 数据类型:字符串