1 線性規(guī)劃概念
定義:在線性等式和不等式約束下,最小化線性目標(biāo)函數(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:線性目標(biāo)函數(shù)的系數(shù); 數(shù)據(jù)類型:一維數(shù)組
A_ub(可選參數(shù)):不等式約束矩陣, A_{ub} 的每一行指定 x 上的線性不等式約束的系數(shù);數(shù)據(jù)類型:二維數(shù)組
b_ub(可選參數(shù)):不等式約束向量,每個(gè)元素代表 A_{ub}x 的上限;數(shù)據(jù)類型:一維數(shù)組
A_eq(可選參數(shù)):等式約束矩陣, A_{eq}的每一行指定 x 上的線性等式約束的系數(shù);數(shù)據(jù)類型:二維數(shù)組
b_eq(可選參數(shù)):等式約束向量,A_{eq}x 的每個(gè)元素必須等于 b_{eq} 的對(duì)應(yīng)元素;數(shù)據(jù)類型:一維數(shù)組
bounds(可選參數(shù)):定義決策變量 x 的最小值和最大值;數(shù)據(jù)類型:(min, max)序列對(duì)
None:使用None表示沒(méi)有界限,默認(rèn)情況下,界限為(0,None)(所有決策變量均為非負(fù)數(shù))
如果提供一個(gè)元組(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ù)必須接受單個(gè) scipy.optimize.OptimizeResult由以下字段組成:
x:當(dāng)前解向量; 數(shù)據(jù)類型:一維數(shù)組
fun:目標(biāo)函數(shù)的當(dāng)前值(c^Tx); 數(shù)據(jù)類型:浮點(diǎn)數(shù)
success:當(dāng)算法成功完成時(shí)為 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)化按名義進(jìn)行
1 : 達(dá)到了迭代限制
2 : 問(wèn)題似乎不可行
3 : 問(wèn)題似乎是不收斂
4 : 遇到數(shù)值困難
nit:當(dāng)前的迭代次數(shù); 數(shù)據(jù)類型:整數(shù)
message:算法狀態(tài)的字符串描述符; 數(shù)據(jù)類型:字符串
options(可選參數(shù))——求解器選項(xiàng)字典,所有方法都接受以下選項(xiàng):
數(shù)據(jù)類型:字典
maxiter:整數(shù),要執(zhí)行的最大迭代次數(shù)
disp:布爾值,設(shè)置為T(mén)rue以打印收斂消息,默認(rèn)值:False
autoscale:布爾值,設(shè)置為T(mén)rue以自動(dòng)執(zhí)行平衡,如果約束中的數(shù)值分開(kāi)幾個(gè)數(shù)量級(jí),請(qǐng)考慮使用此選項(xiàng),默認(rèn)值:False
presolve:布爾值,設(shè)置為False可禁用自動(dòng)預(yù)解析,默認(rèn)值:True
rr:布爾值,設(shè)置為False可禁用自動(dòng)移除冗余,默認(rèn)值:True
x0(可選參數(shù)):猜測(cè)決策變量的值,將通過(guò)優(yōu)化算法進(jìn)行優(yōu)化。當(dāng)前僅由’ revised simplex’ 方法使用此參數(shù),并且僅當(dāng) x0 表示基本可行的解決方案時(shí)才可以使用此參數(shù)。 數(shù)據(jù)類型:一維數(shù)組
’‘’
4 輸出格式
‘’‘
x:在滿足約束的情況下將目標(biāo)函數(shù)最小化的決策變量的值;數(shù)據(jù)類型:一維數(shù)組
fun:目標(biāo)函數(shù)的最佳值(c^Tx);數(shù)據(jù)類型:浮點(diǎn)數(shù)
slack:不等式約束的松弛值(名義上為正值) b_{ub}-A_{ub}x;數(shù)據(jù)類型:一維數(shù)組
con:等式約束的殘差(名義上為零)b_{eq}-A_{eq}x;數(shù)據(jù)類型:一維數(shù)組
success:當(dāng)算法成功找到最佳解決方案時(shí)為 True;數(shù)據(jù)類型:布爾值
status:表示算法退出狀態(tài)的整數(shù);數(shù)據(jù)類型:整數(shù)
0 : 優(yōu)化成功終止
1 : 達(dá)到了迭代限制
2 : 問(wèn)題似乎不可行
3 : 問(wèn)題似乎是不收斂
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)) #默認(rèn)求解最小值,求解最大值使用-c并取結(jié)果相反數(shù)
print(res)
#結(jié)果:無(wú)解情況
con: array([], dtype=float64)
fun: -8782091626.64441
message: ‘The algorithm terminated successfully and determined that the problem is unbounded.’#算法成功終止,確定問(wèn)題是無(wú)界的
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文章
4612瀏覽量
92901 -
矩陣
+關(guān)注
關(guān)注
0文章
423瀏覽量
34548 -
數(shù)據(jù)類型
+關(guān)注
關(guān)注
0文章
236瀏覽量
13624
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論