簡體   English   中英

如何在CPLEX Python API中添加線性約束?

[英]How to add a linear constraint in CPLEX Python API?

線性程序:

Decision Variables:
x[]

Maximize:  Sum(i to n) (fare[i] * x[i])

subject to:
x[i] <= demand[i]

我正在嘗試使用Python在cplex中添加線性約束,但是我無法獲得正確的語法。

fare = [400.0, 700.0, 600.0]
dmd= [2, 4, 3]
itins = []
for count in range(3):
        i = Itinerary(count, 1, dmd[count], fare[count])
        itins.append(i)


# problem variables
X=[] * len(itins)

def setupproblem(c):

    c.objective.set_sense(c.objective.sense.maximize)
    num_x = range(len(itins))
    print (num_x)

    varnames = ["X"+str(j) for j in range(len(itins))]
    c.variables.add(names = varnames, lb=[0.0, 0, 0], ub=[10.0, 10, 10])
    x = [c.variables.add(obj=fare)  for i in num_x]

 i_iten = range(len(itins))

    c.linear_constraints.add(lin_expr  = [cplex.SparsePair(ind = i_iten,
                                                     val = X[i])
                                          for i in range(len(itins) -1 )],
                             senses = ["L"],
                             rhs   = capacity,
                             names = ["capacity_"+str(i)
                                      for i in i_iten])

我收到此錯誤:

raise CplexError(" %d: Invalid name -- '%s'\n" % tuple(self._mat))
cplex.exceptions.errors.CplexError:  1210: Invalid name -- 'X'

cplex.SparcePair您需要在val下指定非零元素,並在ind下指定相應的變量。 另外,在線性程序中,右側應為dmd

c.linear_constraints.add(lin_expr  = [cplex.SparsePair(ind = xname,
                                                 val = [1.0])
                                      for xname in varnames],
                         senses = ["L"],
                         rhs   = dmd,
                         names = ["capacity_"+str(i)
                                  for i in i_iten])

另外,我建議您在添加變量時指出目標函數:

c.variables.add(obj = fare, names = varnames, lb=[0.0, 0, 0], ub=[10.0, 10, 10])

c.linear_constraints.add(lin_expr=[cplex.SparsePair(ind=[xname], val=[1.0]) for xname in varn], senses=["L"] * len(varnames), rhs=dmd)

但是,在對變量添加約束之前,請記住,應將變量名稱添加到函數中。 我花了四個小時來回去找出問題所在。

這條線應該排在第一位。 c.variables.add(varnames)

謝謝serge_k的初步指導!

暫無
暫無

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

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