如何更改 abs() 或 sqrt()?

Posted

技术标签:

【中文标题】如何更改 abs() 或 sqrt()?【英文标题】:How to change abs() or 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 哦,是的,当然,愚蠢的我哈哈。我猜 比数学更能引起我的注意 yRp有哪些类型? 【参考方案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' 我做不到。我很高兴改变答案

以上是关于如何更改 abs() 或 sqrt()?的主要内容,如果未能解决你的问题,请参考以下文章

java中API怎么调用啊?

matlab中如何计算二重积分

如何获取矩阵二范数 opencv

matlab函数

R语言数学函数:abs绝对值sqrt平方根ceiling向上近似整数floor向下近似整数trunc去除小数部分round近似到指定小数位signif近似到有效数字三角函数指数对数

我如何使我的函数返回双精度而不更改Metric类型?