定义:在线性等式和不等式约束下,最小化线性目标函数。
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是矩阵。
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)
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)
序列对(min, max)
,则最小值和最大值将用作所有决策变量的界限。method(可选参数):算法,{‘interior-point’, ‘revised simplex’, ‘simplex’}
以上三种算法可选
callback(可选参数):调用回调函数,我的理解是等待被调用的参数 ,如果提供了回调函数,则算法的每次迭代将至少调用一次。回调函数必须接受单个 scipy.optimize.OptimizeResult
由以下字段组成:
True
status:表示算法退出状态的整数
数据类型:整数
0
: 优化按名义进行
1
: 达到了迭代限制
2
: 问题似乎不可行
3
: 问题似乎是不收敛
4
: 遇到数值困难
nit:当前的迭代次数
message:算法状态的字符串描述符
options(可选参数):求解器选项字典,所有方法都接受以下选项:
数据类型:字典
maxiter
:整数,要执行的最大迭代次数
disp
:布尔值,设置为True
以打印收敛消息,默认值:False
autoscale
:布尔值,设置为True
以自动执行平衡,如果约束中的数值分开几个数量级,请考虑使用此选项,默认值:False
presolve
:布尔值,设置为False
可禁用自动预解析,默认值:True
rr
:布尔值,设置为False
可禁用自动移除冗余,默认值:True
x0(可选参数):猜测决策变量的值,将通过优化算法进行优化。当前仅由’ revised simplex’ 方法使用此参数,并且仅当 x0 表示基本可行的解决方案时才可以使用此参数。
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:算法退出状态的字符串描述符