【发布时间】:2020-12-23 12:59:00
【问题描述】:
我正在使用 pyomo 库解决旅行商问题 (TSP),但出现错误。模型主要部分如下:
model.set_I = range(lendist, 1) # The set related to the distance matrix
model.set_J = range(nStops, 1) # nStop is the number of cities and set_J is the related set.
model.trips = Var(model.set_I, domain=NonNegativeReals, bounds=(0, 1)) # trips is the decision variable
def obj_expression(model): # Objective function
return sum(model.dist[i]*model.trips[i] for i in model.set_I)
model.OBJ = Objective(rule=obj_expression)
# Constraint 1:
def constraint_1(model):
return sum(model.trips[i] for i in model.set_I) == nStops
model.constraint_1 = Constraint(rule=constraint_1)
# Constraint 2:
def constraint_2(model, j):
return sum(model.trips[whichIdxs[i, j]] for i in model.set_I) == 2
model.constraint_2 = Constraint(model.set_J, rule=constraint_2)
产生的错误如下:
错误:从 data=None 构造组件“constraint_1”失败:
ValueError: Invalid constraint expression. The constraint expression resolved to a trivial Boolean (False) instead of a Pyomo object. Please modify your rule to return Constraint. Infeasible instead of False.
ValueError:无效的约束表达式。约束表达式解析为一个普通的布尔值 (False) 而不是 Pyomo 对象。请修改您的规则以返回约束。不可行而不是 False。
为约束约束_1 引发错误
约束 1 只有索引 i,并且总和超过它。因此,规则定义后没有索引。问题出在这里吗?事实上,类似的情况对目标函数也是有效的,但是这并没有错误。
【问题讨论】: