Установка цели в Python с несколькими переменными - PullRequest
0 голосов
/ 25 марта 2019

Я пытаюсь использовать gurobi для решения задачи оптимизации назначения.

У меня есть массив 4x4 для хранения затрат, и я пытаюсь умножить его на решениепеременные, хранящиеся в виде 4x4 массива.

Я пробовал следующее:

model.setObjective(quicksum(cost[i,j] * x[i][j] for i in range(3) for j in range(3)), GRB.MINIMIZE)

Возвращает Ошибка ключа: 0

Также

model.setObjective(quicksum(cost[i,j] * x[i,j] for i in range(3) for j in range(3)), GRB.MINIMIZE)

Возвращает Переменная не в модели

Это мой массив затрат:

cost = np.array([[48.3, 5000, 66.0, 55.4], 
                 [50.2, 53.2, 58.9, 56.2], 
                 [47.5, 49.8, 5000, 53.0], 
                 [48.1, 51.8, 64.4, 54.7]])

И я настроилмои переменные, такие как:

x = model.addVars(4, 4, vtype=GRB.BINARY)

В идеале, я бы хотел, чтобы код возвращал, какие переменные мне следует использовать для назначения соответствующих двоичных переменных.то есть х [0,0] = 1;х [2,3] = 0

1 Ответ

1 голос
/ 25 марта 2019

Следующее (ваша вторая попытка) работает с последним выпуском Gurobi, если модель содержится в переменной с именем model, и вы добавили переменные x к этой же модели:

model.setObjective(quicksum(cost[i,j] * x[i,j] for i in range(4) for j in range(4)), GRB.MINIMIZE)

но вы должны использовать range(4) вместо range(3), если хотите подвести итог всех из них. Может быть, у вас есть несколько моделей и вы пытаетесь добавить цель к неправильной?

...