【问题标题】:How to change abs() or sqrt()?如何更改 abs() 或 sqrt()?
【发布时间】:2021-09-30 20:09:27
【问题描述】:

我想改变|y-R*p|

abs(y[i]-R*p[i])

我想

sqrt((y[i]-Rp[i])* (y[i]-R*p[i]))

我使用了model.addConstr

for i in P:
   model.addConstr(sqrt((y[i]-R*p[i])*(y[i]-R*p[i])) == E[i],name="absconstr" %i)
Type Error:must be real number, not gurobipy.QuadExpr

我使用了 model.addConstrAbs。

for i in P:
 model.addGenConstrAbs(E[i],y[i]-R*p[i],"absConstr")
AttributeError: 'gurobipy.LinExpr' object has no attribute '__cindex__'
for i in P:
  model.addGenConstrAbs(E,y[i]-R*p[i],"absConstr")
AttributeError: 'dict' object has no attribute '__cindex__'

我无法解决问题。 我该怎么办?

【问题讨论】:

  • 你知道,abs 表示绝对值,sqrt 表示平方根,对吧?
  • @Karina: abs(x) = sqrt(x*x) 实数 x。
  • 您能改写一下这个问题吗?我不明白。如果您有一个希望能够调用 abs() 的自定义类,请为其定义一个 __abs__ 方法:blog.finxter.com/python-__abs__
  • @Ry 哦,是的,当然,愚蠢的我哈哈。我猜{ } 比数学更能引起我的注意
  • y和Rp有哪些类型?

标签: python gurobi absolute-value


【解决方案1】:

阅读gurobipy documentation,你不妨试试:

model.addGenConstrAbs(x, y[i]-R*p[i], "absconstr")

【讨论】:

  • 我想换字典。我该怎么办?我在目标函数中使用它
  • 我从来没有使用过 gurobi,只是阅读文档来为您指明正确的方向。我想您需要将变量转换为 addGenConstrAbsfunction 中允许的类型。您可以使用list(d.values()) 将字典的值转换为列表吗?
  • model.addGenConstrAbs(E,y[i]-R*p[i],"absConstr") 'dict' 对象没有属性 'cindex'
  • 我做不到。我很高兴改变答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多