繁体   English   中英

scipy.optimize.linprog无法找到解决方案

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM