ОК, ваш маршрут выглядит следующим образом: начальный рабочий 1-рабочий 1-рабочий 2-рабочий 2-рабочий 3-рабочий-3 -...- задание 10-конец (дать или взять начальную и конечную точки, в зависимости ото том, как вы формулируете проблему.
В этом случае части вашего маршрута «worker n-job n» предопределены. Вам не нужно включать затраты «worker n-job n» вОптимизация маршрута, потому что в этих частях маршрута нет выбора (хотя вам, конечно, нужно помнить их для расчета общей стоимости).
Так что у вас есть настоящий TSP с 10-дюймовыми адресатами«(каждый представляет отдельного работника и назначенную ему работу), но с асимметричной матрицей затрат (поскольку стоимость поездки с работы i на работника j не равна стоимости поездки от работы j до работника i).
Если у вас уже есть реализация для основного TSP, ее легко адаптировать. Если нет, то вам нужно написать ее и внести это небольшое изменение в матрицу асимметричной стоимости. Я видел два разных подхода к этому вAMPL.
2-D матрица принятия решений с устранением подуровня
Переменная решения x {1..10,1..10} определяется как: x [i, j] = 1, еслимаршрут идет от работы i к работе j, и 0 в противном случае.Ограничения требуют, чтобы в каждой строке и столбце этой матрицы был ровно один 1.
Сложной частью этого подхода является предотвращение переходов (т. Е. Созданный «маршрут» на самом деле представляет собой два или более отдельных цикла вместо одного большого цикла),Похоже, ваша текущая попытка находится на данном этапе.
Одним из решений проблемы субтур является итеративный подход:
- Напишите реализацию, которая включает все требования, кроме предотвращения субтур.
- Решите с помощью этой реализации.
- Проверьте полученное решение на наличие подпочв.
- Если подпочв не найдено, верните решение и завершите.
- Если вынайти подпрограммы, добавить ограничение, которое предотвращает эту конкретную подпрограмму.(Определите дуги, участвующие в подтуре, и установите ограничение, которое подразумевает, что они не могут быть выбраны все.) Затем перейдите к # 2.
Для небольшого упражнения вы можете выполнитьликвидация подземных работ вручнуюДля более крупного упражнения, или если вашему лектору не нравится такой подход, вы можете создать .run, который автоматизирует его.См. Статью Боба Фурера от 31.07.2013 в этой теме для примера реализации.
Трехмерная матрица решений с измерением времени
При таком подходе выустановите переменную решения x {1..10,1..10,1..10}, где x [i, j, t] = 1, если маршрут идет от задания i к работнику j в момент времени t и 0 в противном случае.Тогда ваши ограничения требуют, чтобы маршрут проходил к и от каждой комбинации работы / работника ровно один раз, что если он переходит к работнику i в момент времени t, то он должен пройти от задания i во времяt + 1 (исключая первый / последний выпуски), что он делает ровно одну вещь в момент времени t и что конечная точка в момент времени 10 совпадает с начальной точкой в момент времени 1 (при условии, что вам нужен канал).
Это предотвращаетsubtours, поскольку он инициирует маршрут, который начинается в какой-то момент времени 1, возвращается в этот момент в момент времени 10 и не посещает другие точки более одного раза - это означает, что он должен пройти все из них ровно один раз.