Как добавить массив значений в 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
,
1 ответ
Ты можешь попробовать
solver.IntVar([values ...], 'name')
Он должен работать.
См. https://github.com/google/or-tools/blob/master/examples/python/einav_puzzle2.py