【问题标题】:Gurobi error: TypeError: int() argument must be a string, a bytes-like object or a number, not 'gurobipy.QuadExprGurobi 错误:TypeError:int() 参数必须是字符串、类似字节的对象或数字,而不是 'gurobipy.QuadExpr
【发布时间】:2019-09-20 19:04:37
【问题描述】:

我需要使用 Gurobi 实现以下公式进行优化:See here for formula

这是使用 Gurobi Python API 的代码:

from gurobipy import *

m=Model()
# Create variables
alphak = m.addVars(S, B, b, a, vtype=GRB.BINARY,name="alphak")

# Set objective
obj1=quicksum(quicksum(quicksum(int((quicksum(alphak[s,B0,f,t]*alphak[s,k,f,t] for k in B0)/len(B0)) for t in range(a)) for f in range(b)) for s in S)

m.setObjective(obj1, GRB.MAXIMIZE)

# Optimize model
m.optimize()

问题出现在对 quicksum 的 int() 应用中。这是错误:

TypeError: int() argument must be a string, a bytes-like object or a number, not 'gurobipy.QuadExpr

分工也一样。

谁能帮我解决这个问题?

谢谢,

【问题讨论】:

    标签: python-3.x optimization gurobi quadratic-programming


    【解决方案1】:

    Gurobi 不理解 int()、ceiling() 或 floor() 函数。但是,您可以很容易地对此进行建模。

    假设我们要建模y = floor(x)。然后你可以写:

     y <= x
     y >= x - 0.999999
     y integer
    

    【讨论】:

    • 如您所见, int() 位于公式的中间。我重用了循环而不是 quicksums 并应用了你的命题,但它不起作用,错误'gurobiby.QuadExpr' object is not iterable...任何提示!
    • int() is in the middle of formula。显而易见的方法是添加一些辅助变量和方程。
    猜你喜欢
    • 2019-09-16
    • 2016-12-06
    • 1970-01-01
    • 1970-01-01
    • 2017-11-14
    • 2021-12-04
    • 2020-08-22
    • 2021-10-29
    • 1970-01-01
    相关资源
    最近更新 更多