Ваш код содержит в качестве аргумента plp.LpConstraint
следующее:
e=m(a[i,j] * x_vars[i,j] for i in set_I)
m
определяется как int, но вызывается как функция. Вместо этого оно должно быть:
e=plp.lpSum(a[i,j] * x_vars[i,j] for i in set_I)
Это является причиной ошибки, и кажется, что это просто опечатка в вашем руководстве. Другая опечатка в том же выражении состоит в том, что plp.plp.LpConstraintLE
должно быть просто plp.LpConstraintLE
.
После того, как вы исправите эти две ошибки, вы должны быть разблокированы, и продолжение с opt_model.solve()
решит модель.
Для решения этой проблемы в целлюлозной среде вы можете найти следующий код, более удобный для чтения, например, с использованием таких замечательных функций, как LpVariable.dicts
. Что-то, что мне всегда нравилось в pulp, это то, что код создания модели на самом деле довольно читабелен.
import pulp
### Create n, m, set_I, set_J, c, a, l, u, and b as before
# Model
opt_mod = pulp.LpProblem(name="Binary_model", sense=pulp.LpMinimize)
# Variables from a dictionary
x_vars = pulp.LpVariable.dicts("x", c.keys(), cat=pulp.LpBinary)
# Constraints
for j in set_J:
opt_mod += pulp.lpSum(a[i,j] * x_vars[i,j] for i in set_I) <= b[j]
# Objective
opt_mod += pulp.lpSum(c[i,j] * x_vars[i,j] for i,j in c)
# Solve
opt_mod.solve()
# Which variables are set?
print([x for x in x_vars if x_vars[x].varValue > 0.999])