Как вы используете переменные в выражениях, прежде чем они имеют значения в gurobi?
Я пытаюсь решить проблему Максимина, в которой я пытаюсь максимально использовать минимальное количество врачей, которым назначаются встречи различной продолжительности.
Appt_Durration = np.array([5,15,20,30,40,45,60,75,90,105,120,150,180])
Pat_Demand = np.array([20,12,7,2,6,3,5,1,0,0,1,0,0])
Они определяются пользователем перед проблемой.
Tot_Duration = sum(Appt_Durration * Pat_Demand)
Provider_Demand = int(round(Tot_Duration/Shift))
Здесь я умножаю спрос на каждую квартиру. введите по его продолжительности, чтобы найти общую продолжительность спроса для всех приложений. и разделите это на смену (240 минут), чтобы определить количество поставщиков, которые мне нужны (округлено).
from gurobipy import *
O = Model()
P = O.addVars(Provider_Demand,13,vtype = GRB.INTEGER, name = "P")
Здесь я создаю 13*(количество необходимых провайдеров) переменных. В этой конкретной проблеме было определено, что для этой задачи потребовалось 6 провайдеров, поэтому 6*13 (переменные принимают форму P[i,j]), и они представляют, сколько назначений типа j будет назначено провайдеру i.
Первая проблема, так или иначе, включает мои переменные 6 * 13 в использование, прежде чем они принимают фактическое числовое значение. Использование для поставщика будет рассчитываться путем умножения продолжительности каждой встречи на назначенное количество встреч для этого конкретного типа встречи
Ex.
[(Duration0)(Р [0,0])+(длительность1)(Р [0,1])+... (duration12)(Р [0,12])]/ Сдвиг
и это должно быть рассчитано для каждого поставщика
Кроме того, я не понимаю, каким должен быть мой следующий шаг с точки зрения ограничений. Есть две категории ограничений, которые необходимо учитывать.
- Ограничение потребности пациента: в основном сумма всех назначенных встреч типа j должна равняться потребности пациента для этого типа встреч. По сути, должно быть 13 из этого типа ограничения (по одному для каждого типа назначения).
- Ограничения Максимина: я видел максиминные обходные пути, когда вы создаете переменную Z, которая будет представлять минимальное использование. Создавая ограничения, которые напоминают:
Z <= Использование провайдера 1
Z <= Использование провайдера 2 и т. Д.
Там может быть более простой метод, но любая помощь приветствуется