首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pyomo输出错误

Pyomo输出错误
EN

Stack Overflow用户
提问于 2015-03-19 05:56:21
回答 1查看 1K关注 0票数 1

我正在使用pyomo包实现一个优化问题。我正在尝试pyomo在线文档中提供的一个示例问题。但是,当我试图解决它的时候,我得到了错误。

使用的python代码:

代码语言:javascript
复制
from __future__ import division
from pyomo.environ import *

model = AbstractModel()

model.Nodes = Set()
model.Arcs = Set(dimen=2)

model.Flow = Var(model.Arcs, domain=NonNegativeReals)
model.FlowCost = Param(model.Arcs)
model.Demand = Param(model.Nodes)
model.Supply = Param(model.Nodes)

def Obj_rule(model):
    return summation(model.FlowCost, model.Flow)

model.Obj = Objective(rule=Obj_rule, sense=minimize)


def FlowBalance_rule(model, node):
    return model.Supply[node] \
        + sum(model.Flow[i, node] for i in model.Nodes if (i,node) in model.Arcs) \
        - model.Demand[node] \
        - sum(model.Flow[node, j] for j in model.Nodes if (j,node) in model.Arcs) \
        == 0

model.FlowBalance = Constraint(model.Nodes, rule=FlowBalance_rule)

并且,数据文件是:

代码语言:javascript
复制
set Nodes := CityA CityB CityC ;
set Arcs :=
CityA CityB
CityA CityC
CityC CityB
;
param : FlowCost :=
CityA CityB 1.4
CityA CityC 2.7
CityC CityB 1.6
;
param Demand :=
CityA 0
CityB 1
CityC 1
;
param Supply :=
CityA 2
CityB 0
CityC 0
;

当我试图解决这个问题时,我得到了以下错误。

代码语言:javascript
复制
[    0.00] Setting up Pyomo environment
[    0.00] Applying Pyomo preprocessing actions
[    0.01] Creating model
ERROR: Rule failed when generating expression for constraint FlowBalance with index CityB:
        KeyError: "Error accessing indexed component: Index '('CityB', 'CityC')' is not valid for array component 'Flow'"
ERROR: Constructing component 'FlowBalance' from data=None failed:
        KeyError: "Error accessing indexed component: Index '('CityB', 'CityC')' is not valid for array component 'Flow'"
ERROR: Unexpected exception while running model test.py:
        Error accessing indexed component: Index '('CityB', 'CityC')' is not valid for array component 'Flow'
EN

回答 1

Stack Overflow用户

发布于 2015-05-13 19:54:26

您在FlowBalance_rule中有以下拼写错误

代码语言:javascript
复制
sum(model.Flow[node, j] for j in model.Nodes if (j,node) in model.Arcs)

其中索引model.Flow[node,j]和条件if (j,node) in model.Arcs导致错误。

我假设您想要颠倒条件元组的顺序,如下所示

代码语言:javascript
复制
def FlowBalance_rule(model, node):
    return model.Supply[node] \
        + sum(model.Flow[i, node] for i in model.Nodes if (i,node) in model.Arcs) \
        - model.Demand[node] \
        - sum(model.Flow[node, j] for j in model.Nodes if (node,j) in model.Arcs) \
        == 0
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29133456

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档