python变量赋值索引错误:列表索引超出了纸浆范围

问题描述 投票:0回答:1

嗨,我不明白这个错误是如何产生的。我在左侧具有相同数量的约束,在右侧列表中具有相同数量的元素。也许我错过了一个小标志或我的逻辑错了。请帮我理解。

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

再次感谢您的澄清。

python-3.x list variables indexing pulp
1个回答
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)
© www.soinside.com 2019 - 2024. All rights reserved.