Ошибка Gurobi: TypeError: аргумент int () должен быть строкой, байтовидным объектом или числом, а не gurobipy.QuadExpr - PullRequest
0 голосов
/ 19 сентября 2019

У меня есть следующая формулировка, которую мне нужно реализовать с использованием Gurobi для оптимизации: См. Здесь формулу

А вот код, использующий API Gurobi Python:

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()

Проблема возникает при применении int () к быстрой сумме.Это ошибка:

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

То же самое в делении.

Кто-нибудь, кто мог бы помочь мне решить эту проблему?

Спасибо,

1 Ответ

0 голосов
/ 19 сентября 2019

Гуроби не понимает функции int (), floor () или floor ().Тем не менее, вы можете легко смоделировать это.

Скажем, мы хотим смоделировать y = floor(x).Тогда вы можете написать:

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