Как вы используете переменные в выражениях, прежде чем они имеют значения в 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])]/ Сдвиг

и это должно быть рассчитано для каждого поставщика

Кроме того, я не понимаю, каким должен быть мой следующий шаг с точки зрения ограничений. Есть две категории ограничений, которые необходимо учитывать.

  1. Ограничение потребности пациента: в основном сумма всех назначенных встреч типа j должна равняться потребности пациента для этого типа встреч. По сути, должно быть 13 из этого типа ограничения (по одному для каждого типа назначения).
  2. Ограничения Максимина: я видел максиминные обходные пути, когда вы создаете переменную Z, которая будет представлять минимальное использование. Создавая ограничения, которые напоминают:

Z <= Использование провайдера 1

Z <= Использование провайдера 2 и т. Д.

Там может быть более простой метод, но любая помощь приветствуется

0 ответов

Другие вопросы по тегам