为什么我的 pyomo 代码中的 objective 对象具有未知类型 'generator'?
Why is the objective object in my pyomo code have an unknown type 'generator'?
我正在使用 Python 中的 pyomo 库创建一个具有无数约束的优化问题,但我在看似简单的 Objective 定义中继续出现错误,并且不明白为什么。
我正在创建一个抽象模型,其中 objective 正在最小化每小时 (i)
和每个资源 [=16] 的成本 (ab_mdl.c)
乘以功率 (ab_mdl.x)
=].这是下面写的 objective 函数:
def TOU_rule(ab_mdl):
return(summation(ab_mdl.c[i]*ab_mdl.x[j,i]) for i in ab_mdl.hours for j in ab_mdl.num_of_cars)
ab_mdl.cost_obj=Objective(rule=TOU_rule)
但是,当我 运行 完整代码时,我得到这个错误:
Cannot treat the value '.
at 0x21427670>' as a constant because it has unknown type 'generator'
我不明白代码到底有什么问题,特别是因为它相对简单 objective,并且我遵循了我在使用 Pyomo 时看到的类似示例的语法。有没有人知道我下一步应该做什么?
也许这是您问题中的错字,但如果不是,我看到您应该进行 3 项改进以使您的代码正常工作。
return(thing)
语句应该写成return thing
。那是因为 return
是一个分隔词,括号没有用处。
在同一行中,summation
不是正确的词,你必须使用sum
。
- 在调用构建您的 objective 时,不要忘记添加优化意义(
maximize
或 minimize
)。
那么,您的代码将是:
def TOU_rule(ab_mdl):
return sum(ab_mdl.c[i]*ab_mdl.x[j,i]) for i in ab_mdl.hours for j in ab_mdl.num_of_cars
ab_mdl.cost_obj=Objective(rule=TOU_rule, sense=minimize)
我正在使用 Python 中的 pyomo 库创建一个具有无数约束的优化问题,但我在看似简单的 Objective 定义中继续出现错误,并且不明白为什么。
我正在创建一个抽象模型,其中 objective 正在最小化每小时 (i)
和每个资源 [=16] 的成本 (ab_mdl.c)
乘以功率 (ab_mdl.x)
=].这是下面写的 objective 函数:
def TOU_rule(ab_mdl):
return(summation(ab_mdl.c[i]*ab_mdl.x[j,i]) for i in ab_mdl.hours for j in ab_mdl.num_of_cars)
ab_mdl.cost_obj=Objective(rule=TOU_rule)
但是,当我 运行 完整代码时,我得到这个错误:
Cannot treat the value '. at 0x21427670>' as a constant because it has unknown type 'generator'
我不明白代码到底有什么问题,特别是因为它相对简单 objective,并且我遵循了我在使用 Pyomo 时看到的类似示例的语法。有没有人知道我下一步应该做什么?
也许这是您问题中的错字,但如果不是,我看到您应该进行 3 项改进以使您的代码正常工作。
return(thing)
语句应该写成return thing
。那是因为return
是一个分隔词,括号没有用处。在同一行中,
summation
不是正确的词,你必须使用sum
。- 在调用构建您的 objective 时,不要忘记添加优化意义(
maximize
或minimize
)。
那么,您的代码将是:
def TOU_rule(ab_mdl):
return sum(ab_mdl.c[i]*ab_mdl.x[j,i]) for i in ab_mdl.hours for j in ab_mdl.num_of_cars
ab_mdl.cost_obj=Objective(rule=TOU_rule, sense=minimize)