簡體   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