Линейная программа:Добавление линейного ограничения в CPLEX питона API
Decision Variables:
x[]
Maximize: Sum(i to n) (fare[i] * x[i])
subject to:
x[i] <= demand[i]
Я пытаюсь добавить линейное ограничение в 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'
Можете ли вы написать линейную программу, которую вы пытаетесь решить? –
@serge_k: добавлена линейная проблема. Он пытается максимизировать доход (номер тарифа *) с учетом ограничений. – Hansraj
У вас есть странный тип ограничений при добавлении переменных: первые элементы в 'lb' и' ub' являются 'float', а остальные' int'. Являются ли 'x [1]' и 'x [2]' предполагаемыми целыми типами? В этом случае вам нужно указать типы, поскольку по умолчанию переменные инициализируются как непрерывные. –