Целочисленная программа с целлюлозой: расширение временных ограничений - PullRequest
0 голосов
/ 02 мая 2018

У меня есть целочисленная программа, которая планирует «интервалы» времени для преподавателей и студентов, используя ограничение:

for req in reqs:
    sked_model += sum([x[slot] for slot in slots if ('0', 'art', req[2]) == (slot[4], slot[1], slot[3])]) == 1, ""

Мне нужно создать дополнительное ограничение, которое также планирует период, следующий сразу за тем же учителем и учеником. Другая информация:

«Слоты» представляют кортежи (время, курс, преподаватель, студент, класс). «Требования» также представляют кортежи (класс, курс, студент)

1 Ответ

0 голосов
/ 03 мая 2018

Я бы создал еще одну переменную 0,1, которая представляет решение о том, что два слота выделены ученику и учителю

т.е. для 2-го и 3-го слота для ученика и учителя t

x(2,3),s,t

Затем добавьте ограничения, отражающие это решение. * 1008 то есть *

x2,s,t >= x(2,3),s,t x3,s,t >= x(2,3),s,t

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

посмотрите на https://pdfs.semanticscholar.org/1848/cee0d33b41b765427909297d69b8956be5f2.pdf для некоторых других формулировок

...