嗨,我不明白这个错误是如何产生的。我在左侧具有相同数量的约束,在右侧列表中具有相同数量的元素。也许我错过了一个小标志或我的逻辑错了。请帮我理解。
Machines = ["A", "B",]
Days= ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday",
"Saturday", "Sunday"]
desire_num={"A":5, "B":2,}
week1={"Monday":1, "Tuesday":1, "Wednesday":1, "Thursday":1,
"Friday":1, "Saturday":1, "Sunday":1}
status_list=['1', '1', '0', '1', '0', '1', '1', '0', '0', '1', '0',
'1', '0', '0']
avail = pulp.LpVariable.dicts("var", ((machine, day) for machine in
Machines for day in Days), cat="Binary")
##---problem is here. I have 14 variables on the left and 14 elements in the list on the right. The error says list index out of range.
status_list_iterator = 0
for machine, day in avail:
self.prob += avail[machine, day] ==
status_list[status_list_iterator]
status_list_iterator+=1
再次感谢您的澄清。
约束的rhs
应该至少包含一个数值(布尔值也可以)。您正在设置表单的约束:
self.prob += avail[machine, day] == '1'
#or
self.prob += avail[machine, day] == '0'
您可以将status_list中的元素更改为numeric values
或执行如下操作:
for (machine, day), status in zip(avail, status_list):
prob += avail[(machine, day)] == int(status), "c_{}_{}".format(machine, day)