簡體   English   中英

如何動態指定紙漿中的約束?

[英]How specify constraints in pulp dynamically?

我想檢查我的數據是否是線性可分離的。為此,我正在使用此鏈接中提到的方程式。 下面是我正在使用的代碼:

try:
        import os
        #import random
        import traceback
        import datetime
        #import numpy as np
        import scipy.io as sio
        import pulp
        os.system('cls')
        dicA  = sio.loadmat('A1.mat')
        A = dicA.get('A1')        
        var = pulp.LpVariable.dicts("var",range(11),pulp.LpContinuous)
        A = A[:,0:10]
        model = pulp.LpProblem("Data linearly seaparable", pulp.LpMinimize)
        model+= 0
        print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'))
        for i in range(len(A)):
            expr = pulp.LpAffineExpression()
            for j in range(len(A[i])):
                expr += var[j]*A[i][j]
            expr+= var[10] <= -1
            model+= expr
        print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'))
        model.solve()
        print(pulp.LpStatus[model.status])
        print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'))
except:
        print('exception')
        tb = traceback.format_exc()
        print(tb)
finally:
        print('reached finally')

這是我得到的輸出:

C:\Users\puneet\Anaconda3\lib\site-packages\pulp\pulp.py:1348: UserWarning: Overwriting previously set objective.
  warnings.warn("Overwriting previously set objective.")
2017-08-29 10:06:21
exception
Traceback (most recent call last):
  File "C:/Hackerearth Challenge/Machine Learning #3/LInearlySeaparblePulp.py", line 31, in <module>
    model.solve()
  File "C:\Users\puneet\Anaconda3\lib\site-packages\pulp\pulp.py", line 1664, in solve
    status = solver.actualSolve(self, **kwargs)

  File "C:\Users\puneet\Anaconda3\lib\site-packages\pulp\solvers.py", line 1362, in actualSolve
    return self.solve_CBC(lp, **kwargs)
  File "C:\Users\puneet\Anaconda3\lib\site-packages\pulp\solvers.py", line 1384, in solve_CBC
    tmpMps, rename = 1)
  File "C:\Users\puneet\Anaconda3\lib\site-packages\pulp\pulp.py", line 1484, in writeMPS
    f.write(" LO BND       %-8s  % .12e\n" % (n, v.lowBound))
TypeError: must be real number, not str

reached finally

我將添加0來指定鏈接中沒有提到的目標函數。 另外,由於A變量中大約有12000行,因此我試圖動態創建約束,但是這似乎存在一些問題,那么我做錯了什么呢?

    var = pulp.LpVariable.dicts("var",range(11),pulp.LpContinuous)

需要是

    var = pulp.LpVariable.dicts("var",range(11),cat=pulp.LpContinuous)

正如LpVariable.dicts fn看起來像這樣

def dicts(self, name, indexs, lowBound = None, upBound = None, cat = LpContinuous, indexStart = []):

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM