我正在使用 Solverstudio(使用 Pulp 求解器),并且我试图从已找到的 3D 变量中获取 2D 输出(到电子表格中),以获取该变量的某些值。
我试过了:
for (m,c,t) in mct:
if Ymct[m][c][t].varValue>0:
Schedule[m,t]=[c]
但是由于某些 m,t 组合的值超过 1 c,因此它不起作用。我想列出 m,t 组合的所有 c 值。
请帮忙?
使用collections.defaultdict
as Schedule
,您可以通过以下方式简单地将c
s 添加到列表中:
from collections import defaultdict
schedule = defaultdict(list)
for (m,c,t) in mct:
if Ymct[m][c][t].varValue>0:
schedule[(m,t)].extend([c])
(顺便说一句,您应该根据PEP8正确命名变量。具体来说,under_store
用于变量名和函数名以及CapWords
类名)
更新:
要将a写入defaultdict
csv,可以考虑以下方法:import csv
from collections import defaultdict
schedule = defaultdict(list)
schedule[1, 1] = [2, 3, 4]
schedule[1, 2] = [3, 4, 5]
schedule[1, 3] = [4, 5, 6]
schedule[1, 4] = [5, 6, 7]
with open("data.csv", "wb") as f:
csv.writer(f).writerows([k, ] + v for k, v in schedule.iteritems())
或者,我想知道是否LpVariable.varValue
可以返回列表。如果是这样,以下更改应该有效:
#schedule=defaultdict(list)
schedule = LpVariable.dicts("schedule", (moderator, time))
# ... many lines ...
for (m,c,t) in mct:
if Ymct[m][c][t].varValue>0:
#schedule[(m,t)].extend([c])
schedule.setdefault(m, {}).setdefault(t, []).append(c)
# List entries in model output area
for (m,t) in mt:
if len(schedule[(m,t)])>0:
print (m,t), schedule[m][t]
#print (m,t), schedule[(m,t)]
# ... many lines ...
for (m,t) in mt:
timetable[m,t]=schedule[m][t].varValue
#timetable[m,t]=schedule[m,t].items()
您可以在此处阅读更改后的代码:http: //pastebin.com/UCVjqRwQ