Как сложить по «я так, что (я, J) в определенном наборе» в AMPL - PullRequest
0 голосов
/ 04 июня 2019

В AMPL я работаю над проблемой, очень похожей на проблему окраски узлов, но здесь я пытаюсь назначить временные интервалы для экзаменов, чтобы не было двух экзаменов, которые совместно используют студентов.У меня есть набор экзаменов, набор студентов и набор зачисленных пар (i, j), чтобы экзамен я сдавал студенту j.

Я пытался решить эту проблему, используя мою модель для задачи окраски узлов.Это сработало, но мне пришлось вручную указать новый набор пар на экзаменах x экзамены, которые делятся студентами.Я хотел бы модель, где я не должен был бы делать это и мог бы вместо этого просто использовать набор Enrolled.

Таким образом, одним из моих ограничений становится:

subject to different_timeslots {t in TimeSlots, j in Students}:
    sum {i in Exams : (i,j) in Enrolled} x[i,t]<= y[t];

Я использую решатель CPLEX и не получаю никаких сообщений об ошибках;на самом деле значение целевой функции является правильным.Тем не менее, несколько экзаменов, в которых участвуют студенты, запланированы в одном и том же временном интервале.Я попытался возиться с логическими ограничениями вместо этого (если ... потом), но безрезультатно.

...