我正在尝试检查数据是否可线性分离。我正在使用此link中提到的等式来实现此目的。我在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次迭代,也无法找到解决方案,也没有说解决方案不存在。那么,这是否意味着解决方案不存在?或者我应该增加迭代限制,如果是,那么增加多少?
答案 0 :(得分:2)
如果您信任求解器(=实现质量),请增加迭代限制,直到出现其他退出状态。
良好的实现总是在有限的时间内结束,这意味着:退出状态将在某个迭代大小时发生变化。无限或不可行的解决方案或证书。
编辑:以上结果仅限于单纯形法(质量实施)的实施! Interior-point methods表现不同,并且没有一般的基础理论来强有力地提供这些证书(理论一般认为问题是可行的),例外是使用同构自双嵌入的那些({{3} })。
一般来说,Simplex算法通常会使用相当多的迭代(至少与内点方法相比;我不会判断你的例子)。