Индекс присваивания переменной Python Ошибка: список индекса вне диапазона с целлюлозой - PullRequest
0 голосов
/ 01 сентября 2018

Привет, я не понимаю, как генерируется эта ошибка. У меня такое же количество ограничений на левой стороне и такое же количество элементов в списке на правой стороне. возможно я пропускаю маленький знак или моя логика неверна. пожалуйста, помогите мне понять.

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

Еще раз спасибо за некоторые разъяснения.

1 Ответ

0 голосов
/ 01 сентября 2018

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)
...