【问题标题】:How to implement Math.pow() inside pyomo-ipopt optimization?如何在 pyomo-ipopt 优化中实现 Math.pow()?
【发布时间】:2019-06-23 15:33:21
【问题描述】:

我正在尝试为给定任务优化电机选择,即摆动双摆,似乎 ipopt 无法解决问题,因为它无法识别

我试图实现 math.pow() 但这样做

代码:

from math import pow

def _epsilon_max(M,n):
    return M.epsilon_max[n]* pow(M.ratio_motor[n],0.8) -1== 0   
m.epsilon_max_cons = Constraint(m.dofs,rule=_epsilon_max) 

输出:

TypeError: Pyomo NumericValue 类型的隐式转换 'ratio_motor[1]' 到浮点数被禁用。此错误通常是在定义表达式时使用 Pyomo 组件作为 Python 内置数学模块函数之一的参数的结果。使用 Pyomo 提供的数学函数避免此错误。

不使用已实现的pow 函数,它仅适用于整数

代码:

def _epsilon_max(M,n):
    return M.epsilon_max[n]*(M.ratio_motor[n])**0.8 -1== 0   
m.epsilon_max_cons = Constraint(m.dofs,rule=_epsilon_max)

输出:

Ipopt 3.12.11:评估约束 1011 时出错:无法评估 pow'(0,0.8).

【问题讨论】:

    标签: python-3.x pyomo ipopt


    【解决方案1】:

    问题是模型评估错误,而不是您不能有分数指数。您需要将 M.ratio_motor[n] 初始化为 0 以外的值。使用 Pyomo 实现的 pow 函数的第二个实现是正确的。

    【讨论】:

      猜你喜欢
      • 2018-03-01
      • 1970-01-01
      • 2020-04-09
      • 2019-09-09
      • 1970-01-01
      • 2018-01-30
      • 1970-01-01
      • 2017-02-17
      • 1970-01-01
      相关资源
      最近更新 更多