1 線性規(guī)劃概念
定義:在線性等式和不等式約束下,最小化線性目標函數(shù)。


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 參數(shù)設(shè)置
‘’‘
c:線性目標函數(shù)的系數(shù); 數(shù)據(jù)類型:一維數(shù)組
A_ub(可選參數(shù)):不等式約束矩陣, A_{ub} 的每一行指定 x 上的線性不等式約束的系數(shù);數(shù)據(jù)類型:二維數(shù)組
b_ub(可選參數(shù)):不等式約束向量,每個元素代表 A_{ub}x 的上限;數(shù)據(jù)類型:一維數(shù)組
A_eq(可選參數(shù)):等式約束矩陣, A_{eq}的每一行指定 x 上的線性等式約束的系數(shù);數(shù)據(jù)類型:二維數(shù)組
b_eq(可選參數(shù)):等式約束向量,A_{eq}x 的每個元素必須等于 b_{eq} 的對應(yīng)元素;數(shù)據(jù)類型:一維數(shù)組
bounds(可選參數(shù)):定義決策變量 x 的最小值和最大值;數(shù)據(jù)類型:(min, max)序列對
None:使用None表示沒有界限,默認情況下,界限為(0,None)(所有決策變量均為非負數(shù))
如果提供一個元組(min, max),則最小值和最大值將用作所有決策變量的界限。
method(可選參數(shù)):算法,{‘interior-point’, ‘revised simplex’, ‘simplex’}以上三種算法可選;數(shù)據(jù)類型:輸入如上三種字符串
callback(可選參數(shù)):調(diào)用回調(diào)函數(shù),我的理解是等待被調(diào)用的參數(shù) ,如果提供了回調(diào)函數(shù),則算法的每次迭代將至少調(diào)用一次?;卣{(diào)函數(shù)必須接受單個 scipy.optimize.OptimizeResult由以下字段組成:
x:當前解向量; 數(shù)據(jù)類型:一維數(shù)組
fun:目標函數(shù)的當前值(c^Tx); 數(shù)據(jù)類型:浮點數(shù)
success:當算法成功完成時為 True;數(shù)據(jù)類型:布爾值
slack:不等式約束的松弛值(名義上為正值) b_{ub} ? A_{ub}x; 數(shù)據(jù)類型:一維數(shù)組
con:等式約束的殘差(名義上為零) b_{eq} ? A_{eq}x;數(shù)據(jù)類型:一維數(shù)組
phase:正在執(zhí)行算法的階段; 數(shù)據(jù)類型:整數(shù)
status:表示算法退出狀態(tài)的整數(shù); 數(shù)據(jù)類型:整數(shù)
0 : 優(yōu)化按名義進行
1 : 達到了迭代限制
2 : 問題似乎不可行
3 : 問題似乎是不收斂
4 : 遇到數(shù)值困難
nit:當前的迭代次數(shù); 數(shù)據(jù)類型:整數(shù)
message:算法狀態(tài)的字符串描述符; 數(shù)據(jù)類型:字符串
options(可選參數(shù))——求解器選項字典,所有方法都接受以下選項:
數(shù)據(jù)類型:字典
maxiter:整數(shù),要執(zhí)行的最大迭代次數(shù)
disp:布爾值,設(shè)置為True以打印收斂消息,默認值:False
autoscale:布爾值,設(shè)置為True以自動執(zhí)行平衡,如果約束中的數(shù)值分開幾個數(shù)量級,請考慮使用此選項,默認值:False
presolve:布爾值,設(shè)置為False可禁用自動預解析,默認值:True
rr:布爾值,設(shè)置為False可禁用自動移除冗余,默認值:True
x0(可選參數(shù)):猜測決策變量的值,將通過優(yōu)化算法進行優(yōu)化。當前僅由’ revised simplex’ 方法使用此參數(shù),并且僅當 x0 表示基本可行的解決方案時才可以使用此參數(shù)。 數(shù)據(jù)類型:一維數(shù)組
’‘’
4 輸出格式
‘’‘
x:在滿足約束的情況下將目標函數(shù)最小化的決策變量的值;數(shù)據(jù)類型:一維數(shù)組
fun:目標函數(shù)的最佳值(c^Tx);數(shù)據(jù)類型:浮點數(shù)
slack:不等式約束的松弛值(名義上為正值) b_{ub}-A_{ub}x;數(shù)據(jù)類型:一維數(shù)組
con:等式約束的殘差(名義上為零)b_{eq}-A_{eq}x;數(shù)據(jù)類型:一維數(shù)組
success:當算法成功找到最佳解決方案時為 True;數(shù)據(jù)類型:布爾值
status:表示算法退出狀態(tài)的整數(shù);數(shù)據(jù)類型:整數(shù)
0 : 優(yōu)化成功終止
1 : 達到了迭代限制
2 : 問題似乎不可行
3 : 問題似乎是不收斂
4 : 遇到數(shù)值困難
nit:在所有階段中執(zhí)行的迭代總數(shù);數(shù)據(jù)類型:整數(shù)
message:算法退出狀態(tài)的字符串描述符;數(shù)據(jù)類型:字符串 ’‘’
5 例子
import scipy
from scipy import optimize
import numpy
c = numpy.a(chǎn)rray([2,3]) #最值等式未知數(shù)系數(shù)矩陣
A_ub = numpy.a(chǎn)rray([[-1,1],[2,-2]]) #《=不等式左側(cè)未知數(shù)系數(shù)矩陣
B_ub = numpy.a(chǎn)rray([1,1]) #《=不等式右側(cè)常數(shù)矩陣
#A_eq = numpy.a(chǎn)rray() 等式左側(cè)未知數(shù)系數(shù)矩陣
#B_eq = numpy.a(chǎn)rray() 等式右側(cè)常數(shù)矩陣
x = (None,1) #未知數(shù)取值范圍
y = (None,None) #未知數(shù)取值范圍
res = scipy.optimize.linprog(c,A_ub,B_ub,bounds = (x,y)) #默認求解最小值,求解最大值使用-c并取結(jié)果相反數(shù)
print(res)
#結(jié)果:無解情況
con: array([], dtype=float64)
fun: -8782091626.64441
message: ‘The algorithm terminated successfully and determined that the problem is unbounded.’#算法成功終止,確定問題是無界的
nit: 3
slack: array([0.89897776, 1.20204449])
status: 3
success: False
x: array([-1.75641833e+09, -1.75641833e+09])
-
算法
+關(guān)注
關(guān)注
23文章
4702瀏覽量
94973 -
矩陣
+關(guān)注
關(guān)注
1文章
434瀏覽量
35098 -
數(shù)據(jù)類型
+關(guān)注
關(guān)注
0文章
237瀏覽量
13849
發(fā)布評論請先 登錄
Optimize 屬性范例 (VB)
線性規(guī)劃函數(shù) linprog exitflag -4
在 MaxCompute UDF 中運行 Scipy
在PyODPS DataFrame自定義函數(shù)中使用pandas、scipy和scikit-learn
SCipy and NUMPY的電子書免費下載
Linux內(nèi)核GPIO操作函數(shù)的詳解分析
scipy.optimize.linprog函數(shù)參數(shù)最全詳解

評論