Как избежать конфликтов планирования для проблемы расписания - PullRequest
1 голос
/ 28 марта 2019

Я пытаюсь создать график смен для каждого сотрудника с учетом доступности смены сотрудника.У меня определен кортеж, включающий время начала смены, время окончания смены, максимальное количество людей в смену.Входные данные также включают в себя список массивов для предпочтений смены сотрудника, например [[1 0 0 1 1], ...], который представляет, что сотрудник 1 доступен для смен 1, 4, 5, но не 2, 3. Обратите внимание, чтовремена смены не являются взаимоисключающими и могут перекрываться.

У меня есть переменная решения x [i, j], которая равна 1, если сотрудник i укомплектован для смены j, 0 в противном случае.После выполнения я ожидаю, что x [i, j] будет матрицей, указывающей для каждого сотрудника, на какую смену они назначены.У меня есть другие ограничения, включая сменность.Но я застрял на том, как создать ограничение, чтобы убедиться, что назначенные сдвиги не перекрываются.

У меня есть одна идея - сравнить x [i, j] и x [i, k], где j= / = k и посмотреть, проверяют ли они время начала i> время окончания j ИЛИ время начала j> время окончания i.Но я не уверен, как реализовать это в OPL.

1 Ответ

0 голосов
/ 28 марта 2019

Если я правильно понимаю, время начала и окончания каждой смены j являются известными константами.Позвольте мне назвать их start[j] и end[j].Таким образом, вы должны иметь возможность использовать их, чтобы указать, используя конструкцию forall, пары (j,k), чтобы сдвиги j и k не перекрывались.

Вы найдете примерыиспользуя forall в примерах, установленных с продуктом в подкаталогах [InstallDir]/opl/examples/opl.Более конкретно, модели, которые включают в себя конструкции, на которые вы можете смотреть: models/Staffing/staffing.mod, timetabling/timetabling.mod и teambuilding/teambuilding.mod.

...