1

我正在使用 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 值。

请帮忙?

4

1 回答 1

0

使用collections.defaultdictas Schedule,您可以通过以下方式简单地将cs 添加到列表中:

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写入defaultdictcsv,可以考虑以下方法: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

于 2012-10-06T20:20:01.583 回答