【问题标题】:Pyomo objective definition error: "SyntaxError: Generator expression must be parenthesized"Pyomo 目标定义错误:“SyntaxError:生成器表达式必须用括号括起来”
【发布时间】:2019-12-03 03:32:12
【问题描述】:

我是 Pyomo 的新手,当我尝试声明我的目标时遇到错误。如果可能,我更愿意使用 def 来表示目标,而不是 expr=

代码如下。

# Import pyomo
from pyomo.environ import *

N = ['Harlingen', 'Memphis', 'Ashland']
M = ['NYC', 'LA', 'Chicago', 'Houston']

d = {('Harlingen', 'NYC'): 1956, \
     ('Harlingen', 'LA'): 1606, \
     ('Harlingen', 'Chicago'): 1410, \
     ('Harlingen', 'Houston'): 330, \
     ('Memphis', 'NYC'): 1096, \
     ('Memphis', 'LA'): 1792, \
     ('Memphis', 'Chicago'): 531, \
     ('Memphis', 'Houston'): 567, \
     ('Ashland', 'NYC'): 485, \
     ('Ashland', 'LA'): 2322, \
     ('Ashland', 'Chicago'): 324, \
     ('Ashland', 'Houston'): 1236 }

P = 2

model = ConcreteModel("warehouse location problem")

model.N = Set(dimen=1, initialize=N)
model.M = Set(dimen=1, initialize=M)
model.d = Param(model.N, model.M, within=PositiveIntegers, initialize=d)
model.P = Param(initialize=P)
model.y = Var(model.N, within=PositiveIntegers)
model.x = Var(model.N, model.M, bounds=(0,1))

def obj_rule(model):
    return sum(model.d[n,m] * model.x[n,m] for n in model.N, m in model.M)
model.obj = Objective(rule=obj_rule)

我收到的错误是

  File "warehouseLocation.py", line 35
    return sum(model.d[n,m] * model.x[n,m] for n in model.N, m in model.M)
              ^
SyntaxError: Generator expression must be parenthesized

感谢所有帮助

【问题讨论】:

    标签: pyomo


    【解决方案1】:

    这样写你的目标函数

    def obj_rule(model):
        return sum(model.d[n,m]* model.x[n,m] for n in model.N for m in model.M)
    model.obj = Objective(rule=obj_rule)
    

    检查一下

    model.obj.pprint()
    

    【讨论】:

      猜你喜欢
      • 2018-12-18
      • 2018-07-27
      • 1970-01-01
      • 2019-02-13
      • 1970-01-01
      • 2022-01-07
      • 1970-01-01
      • 1970-01-01
      • 2021-11-24
      相关资源
      最近更新 更多