Советы по конвертации GMPL в OPL - PullRequest
0 голосов
/ 25 августа 2018

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

Затем я начал использовать CPLEX Interactive Solver для получения более быстрых результатов при решении файла .lp. Но затем, ища более динамичный язык и IDE, которые позволили бы мне легко связать мою модель с внешними файлами, а также настроить внешний выходной файл, я решил переместить весь свой код в пакет оптимизации ILOG CPLEX, используя OPL.

Как только я решил, возникли некоторые проблемы.

Первым шагом, который я предпринял, была попытка переместить небольшой экземпляр моей модели в OPL. Этот экземпляр основан на наборах и подмножествах. Например, мне нужно объявить группу «примитивных» наборов, которые позже будут смешаны в подмножества. Итак, допустим, я хочу ввести всех учителей, предметы и наборы курсов, поэтому это будет выглядеть примерно так:

set TEACHER : = x,y,z;
set SUBJECTS : = a,b,c;
set COURSES : = i,j,k;

И после этого я могу создать подмножество, которое будет связывать учителя с каждым из предметов и курсов, которые эти учителя будут проходить в течение семестра:

set TEACHER_SUBJECTS_COURSES within {TEACHER, SUBJECTS, COURSES};
set TEACHER_SUBJECTS_COURSES := (x,a,i) (y,b,c,) (z,c,k);

Как только я объявил все, что мне нужно, я могу объявить переменную, которая будет 1, если для решения выбран определенный экземпляр индексов, и 0 в противном случае:

var x{t in TEACHER, d in DAY, (l,s) in LECTURE_SHIFT, (t,s,c)in TEACHER_SUBJECTS_CLASS}, binary;

Тогда каждое требуемое ограничение может быть закодировано в соответствии с той же идеей. Этот способ построения модели полезен, потому что он не учитывает каждую возможную комбинацию индексов, он работает только со всеми возможными экземплярами, которые могут фактически случиться в моем учреждении. Идея состоит в том, что каждая переменная, содержащая учителя «x», будет учитывать только те предметы и курсы, которые связаны с учителем «x».

У меня вопрос: как я могу создать такого рода «связь» между двумя наборами или как создать подмножество (или поднабор), у которого есть два примитивных набора в качестве источника в CPLEX OPL?

1 Ответ

0 голосов
/ 26 августа 2018

Создайте кортеж для представления комбинации Учитель, Предмет и Курс. Затем создайте наборы этих кортежей для допустимых комбинаций.

...