Как я могу добавить в Google ortools массив значений вместо нижней и верхней границы?

В документации и во всех примерах, которые я могу найти ... по крайней мере, с точки зрения расписания медсестер, каждый просто объявляет значения сдвига в пространстве поиска {1,4}, скажем, для сдвига 1,2,3,4 ....

solver = pywrapcp.Solver("schedule_shifts")

  num_nurses = 4
  num_shifts = 4     # Nurse assigned to shift 0 means not working that day.
  num_days = 7
  # [START]
  # Create shift variables.
  shifts = {}

  for j in range(num_nurses):
    for i in range(num_days):
      shifts[(j, i)] = solver.IntVar(0, num_shifts - 1, "shifts(%i,%i)" % (j, i))
  shifts_flat = [shifts[(j, i)] for j in range(num_nurses) for i in range(num_days)]

  # Create nurse variables.
  nurses = {}

  for j in range(num_shifts):
    for i in range(num_days):
      nurses[(j, i)] = solver.IntVar(0, num_nurses - 1, "shift%d day%d" % (j,i))

Я хочу избежать использования диапазона значений при вызове solver.IntVar(lowerbound, upperbound, ...)

Я хочу IntSolver([available values that you can choose], ...)

Я создал матрицу всех смен в виде столбцов, текущих с первого дня до последнего. Мои индексы строк не имеют значения, но в каждом столбце дня / смены у меня есть значения индексов медсестер в порядке убывания ранжированных тех, кто предложил самую высокую цену за эту смену. Я хочу создать ограничение, при котором, если я выбираю медсестру, я выбираю максимальную ставку, разрешенную с помощью других ограничений из столбца, однако я не знаю, как это сделать, учитывая ограниченную документацию, которую ortools имеет с python IntVar.


person RobRen    schedule 19.06.2018    source источник


Ответы (1)


Ты можешь попробовать

solver.IntVar ([значения ...], 'имя')

Он должен работать.

См. https://github.com/google/or-tools/blob/master/examples/python/einav_puzzle2.py

person Laurent Perron    schedule 21.06.2018
comment
Да, сначала создайте переменные со всеми возможными значениями. Тогда выбор лучшего решения является частью цели. - person Laurent Perron; 04.08.2018