嵌套字典在带有Gurobi的python中获取关键错误/ defaultdict问题

这是我第一次使用Gurobi在python中实现优化模型,但遇到了建立决策变量的问题。

我首先尝试对defaultdict使用以下方法:

from gurobipy import *
from collections import defaultdict

def make_dict():
    return defaultdict(make_dict)

decvary = defaultdict(make_dict)

for k in K:
    for d in D:
        for i in V_L:
            for w in V_D:
                if (w != i):
                    for j in V:
                        if (w != j) and (i != j):
                            decvary[k][d][i][w][j] = m.addVar(lb=0,ub=1,obj=0,vtype=GRB.BINARY,name="y.%d.%d.%d.%d.%d" % (k,d,i,w,j))

但是稍后当我尝试在优化模型中添加约束时,变量decvary[k][d][i][w][j]的类型为<class 'collections.defaultdict'>,但实际上应为1或0(二进制)。

因此,我尝试了一种古老的愚蠢方法来构建嵌套字典:

for k in K:
    decvary[k]={}
    for d in D:
        decvary[k][d]={}
        for i in V_L:
            decvary[k][d][i]={}
            for w in V_D:
                if (w != i):
                    decvary[k][d][i][w]={}
                    for j in V:
                        if (w != j) and (i != j):
                            decvary[k][d][i][w][j] = m.addVar(lb=0,j))

但是这次,添加约束时出现KeyError,并且KeyError总是发生在最后一个键[j]

有人对发生的事情有任何想法吗?非常感谢!

dmayahot777 回答:嵌套字典在带有Gurobi的python中获取关键错误/ defaultdict问题

Gurobi的Python API具有一个非常容易创建字典的内置方法:模型的addVars方法。例如。你可以做

decvary = m.addVars(K,D,V_L,V_D,V,ub=1,vtype=GRB.BINARY,name="y")

或(也要尊重您的例外情况)

decvary = m.addVars(((k,d,i,w,j) for k in K for d in D for i in V_L for w in V_D for j in V if w!=i and w!=j and i!=j),name="y")

创建该字典。

本文链接:https://www.f2er.com/3110392.html

大家都在问