如何在Python中增加scipy.optimize.linprog函数的迭代次数?

6

我正在尝试检查训练数据是否是线性可分的。为此,我使用以下代码。

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]
        del A
        b = -1*np.ones(len(A1),np.int64)
        c = np.zeros(11,np.int64)
        del dicA
        res = linprog(c, A_ub=A1, b_ub=b, bounds=(-float('inf'), float('inf')),options={"disp": True})
        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: 1000
  status: 1
 success: False
       x: nan
reached finally

那么,迭代次数达到限制是否意味着数据不是线性可分的?如果不是,那么我该如何增加限制。
1个回答

6

我认为你可以在选项中添加maxiter。

options = {"disp": True, "maxiter": 5000}
res = linprog(c, A_ub=A1, b_ub=b, bounds=(None, None), options=options)

根据文档,您可以在bounds中使用None来指定给定方向上没有限制。

"maxiter": 5000 对我来说不起作用,当我将5000增加到50000时,它正常工作了。 - Hamed Baziyad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接