小编Wil*_*son的帖子

Pyomo 无法在构造之前迭代抽象 Set

我在 Pyomo 中构建了一个抽象模型,效果很好。

但是,当我尝试使用字典来实例化抽象模型时,出现以下错误“错误:为目标值生成表达式时规则失败:RuntimeError:在构造(初始化)之前无法迭代抽象集'I' .”

具体来说,问题如下:

    from pyomo.environ import *

    model = AbstractModel()
    model.D = Set()      
    model.I = Set()                            
    model.w = Param(model.D)                   
    model.S_0 = Param(model.D) 
    model.x = Var(real_model.I, model.D) 

    def sum_cubic(m):
        return sum(w[j]*(m.x[i][j]-m.S_0[j])**3 for i in model.I for j in model.D)
    
    model.value = Objective(rule = sum_cubic, sense = maximize)
    model.pprint()
Run Code Online (Sandbox Code Playgroud)

上面的代码运行得很好。但是当我在它后面添加以下代码时会出现错误,其中名称和 S_0 是预定义的字典:

    data = {None:{
    'D':{None: names},
    'I':{None: list(range(1,4))},
    'w':[0.3,0.3,0.4],
    'S_0':S_0,
    }
    }
    real_model = model.create_instance(data) 
Run Code Online (Sandbox Code Playgroud)

错误:为目标值生成表达式时规则失败:RuntimeError:无法在构造(初始化)之前迭代抽象集“I”。错误:从数据构建组件“值”=无失败:运行时错误:无法在构造(初始化)之前迭代抽象集“I”。

有人可以帮我吗?谢谢。

createinstance pyomo

4
推荐指数
1
解决办法
178
查看次数

标签 统计

createinstance ×1

pyomo ×1