[英]Linear programming using scipy.optimize.linprog returns suboptimal solution
[英]scipy.optimize.linprog not able to find solution
我正在嘗試檢查數據是否線性可分離。 我正在為此目的使用此鏈接中提到的方程式。 我在python中使用Scipy包的linprg函數。 數組的大小如下:
A = [12137810,11]
A1 = [12137,11]
b = 12137
c = 11
這是我正在使用的代碼:
try:
import os
import random
import traceback
import numpy as np
import scipy.io as sio
from scipy.optimize import linprog
os.system('cls')
dicA = sio.loadmat('A.mat')
A = dicA.get('A')
lengthA = int(len(A)/1000)
aRange = range(0,lengthA)
selectedIndexes = random.sample(aRange,lengthA)
A1 = A[selectedIndexes]
print('a = [',len(A),',',len(A[0]),']')
print('a1 = [',len(A1),',',len(A1[0]),']')
del A
b = -1*np.ones(len(A1),np.int64)
c = np.zeros(11,np.int64)
print('c = ',len(c))
print('b =',len(b))
del dicA
res = linprog(c, A_ub=A1, b_ub=b, bounds=(None,None),options={"disp": True,"maxiter": 25000})
print(res)
except:
print('exception')
tb = traceback.format_exc()
print(tb)
finally:
print('reached finally')
這是我得到的輸出:
Iteration limit reached.
fun: -0.0 message: 'Iteration limit reached.'
nit: 25000 status: 1 success: False
x: nan reached finally
因此,即使經過2500次迭代,它也無法找到解決方案,也沒有說解決方案不存在,那么,這是否意味着解決方案不存在? 還是應該增加迭代限制,如果有,那么增加多少?
如果您信任求解器(=實現質量),請增加迭代限制,直到出現其他退出狀態為止。
一個好的實現總是會在有限的時間內結束,這意味着: 退出狀態將以某種迭代大小發生變化 。 將會有解決方案或某些證書,說明無限制或不可行。
編輯:以上結果僅限於單純形方法的實現(質量實現)! 內點方法的行為各不相同,並且通常沒有底層理論來可靠地提供這些證書(該理論通常假定問題是可行的),但使用同質自對偶嵌入的證書除外 ( O(√nL -迭代均質和自對偶線性規划算法( )。
一般而言,眾所周知,單純形算法通常會使用很多迭代(至少與Interior-point方法相比;我無法判斷您的示例)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.