python pulp 与变量 dict 的值不匹配
python pulp not matching value of variable dict
这几天我一直在努力简化约束。还在学习python。请帮忙,提前谢谢你。
Employees=['Paul', 'Ben', 'Nasim', 'Ceci', 'Victoria',]
Days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday',
'Saturday', 'Sunday']
avail = pulp.LpVariable.dicts("on_off", ((employee, day) for
employee in Employees for day in Days), cat="Binary")
requests={"Paul": {"Monday":1, "Tuesday":1, "Wednesday":1,
"Thursday":1, "Friday":1, "Saturday":1, "Sunday":1},
"Ben": {"Monday":1, "Tuesday":1, "Wednesday":1, "Thursday":1,
"Friday":1, "Saturday":1, "Sunday":0},
"Nasim": {"Monday":1, "Tuesday":1, "Wednesday":1, "Thursday":1,
"Friday":1, "Saturday":1, "Sunday":1},
"Ceci": {"Monday":1, "Tuesday":1, "Wednesday":1, "Thursday":1,
"Friday":1,"Saturday":1, "Sunday":0},
"Victoria": {"Monday":1, "Tuesday":1, "Wednesday":0, "Thursday":0,
"Friday":0, "Saturday":0, "Sunday":0}}
for employee, day in avail:
prob += avail[employee, day] == [requests[i][j] for i in
requests for j in requests[i]]
举个例子,前几个约束:
"_C13: on_off_('Paul',_'Monday') = 28
_C14: on_off_('Paul',_'Tuesday') = 28
_C15: on_off_('Paul',_'Wednesday') = 28
_C16: on_off_('Paul',_'Thursday') = 28
_C17: on_off_('Paul',_'Friday') = 28
_C18: on_off_('Paul',_'Saturday') = 28"
(“28”恰好是我嵌套字典中所有 1 和 0 的总和。)
相反,我希望每个变量都匹配我的嵌套字典中的 1 和 0。
"_C13: on_off_('Paul',_'Monday') = 1
_C14: on_off_('Paul',_'Tuesday') = 1
_C15: on_off_('Paul',_'Wednesday') = 1
_C16: on_off_('Paul',_'Thursday') = 1
_C17: on_off_('Paul',_'Friday') = 1
_C18: on_off_('Paul',_'Saturday') = 1"
在 == 符号后,您需要字典中的值 1 或 0,因此您应该使用:
for employee, day in avail:
prob += avail[employee, day] == requests[employee][day]
对于请求[员工],您select该员工的字典
requests['Paul'] = {"Monday":1, "Tuesday":1, "Wednesday":1,
"Thursday":1, "Friday":1, "Saturday":1, "Sunday":1}
然后通过添加 [day] 你 select 字典中的那一天:
requests['Paul']['Monday'] = 1
这几天我一直在努力简化约束。还在学习python。请帮忙,提前谢谢你。
Employees=['Paul', 'Ben', 'Nasim', 'Ceci', 'Victoria',]
Days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday',
'Saturday', 'Sunday']
avail = pulp.LpVariable.dicts("on_off", ((employee, day) for
employee in Employees for day in Days), cat="Binary")
requests={"Paul": {"Monday":1, "Tuesday":1, "Wednesday":1,
"Thursday":1, "Friday":1, "Saturday":1, "Sunday":1},
"Ben": {"Monday":1, "Tuesday":1, "Wednesday":1, "Thursday":1,
"Friday":1, "Saturday":1, "Sunday":0},
"Nasim": {"Monday":1, "Tuesday":1, "Wednesday":1, "Thursday":1,
"Friday":1, "Saturday":1, "Sunday":1},
"Ceci": {"Monday":1, "Tuesday":1, "Wednesday":1, "Thursday":1,
"Friday":1,"Saturday":1, "Sunday":0},
"Victoria": {"Monday":1, "Tuesday":1, "Wednesday":0, "Thursday":0,
"Friday":0, "Saturday":0, "Sunday":0}}
for employee, day in avail:
prob += avail[employee, day] == [requests[i][j] for i in
requests for j in requests[i]]
举个例子,前几个约束:
"_C13: on_off_('Paul',_'Monday') = 28
_C14: on_off_('Paul',_'Tuesday') = 28
_C15: on_off_('Paul',_'Wednesday') = 28
_C16: on_off_('Paul',_'Thursday') = 28
_C17: on_off_('Paul',_'Friday') = 28
_C18: on_off_('Paul',_'Saturday') = 28"
(“28”恰好是我嵌套字典中所有 1 和 0 的总和。)
相反,我希望每个变量都匹配我的嵌套字典中的 1 和 0。
"_C13: on_off_('Paul',_'Monday') = 1
_C14: on_off_('Paul',_'Tuesday') = 1
_C15: on_off_('Paul',_'Wednesday') = 1
_C16: on_off_('Paul',_'Thursday') = 1
_C17: on_off_('Paul',_'Friday') = 1
_C18: on_off_('Paul',_'Saturday') = 1"
在 == 符号后,您需要字典中的值 1 或 0,因此您应该使用:
for employee, day in avail:
prob += avail[employee, day] == requests[employee][day]
对于请求[员工],您select该员工的字典
requests['Paul'] = {"Monday":1, "Tuesday":1, "Wednesday":1,
"Thursday":1, "Friday":1, "Saturday":1, "Sunday":1}
然后通过添加 [day] 你 select 字典中的那一天:
requests['Paul']['Monday'] = 1