Решение задачи коммивояжера при помощи надстройки ms Excel «Поиск решения»
Для примера рассмотрим ту же сеть городов, что и в предыдущем пункте.
Запускаем среду MS Excel. Для выполнения дальнейшего расчета необходимо подключить надстройку «Поиск решения». Для этого в левом верхнем углу нажимаем значок с логотипом Microsoft и внизу появившегося окна нажимаем закладку «Параметры Excel». В появившемся окне нажимаем закладку «Надстройки» и выбираем надстройку «Поиск решения».
Разместим исходные данные на рабочем листе (рис.2.1-2.3). Заменим символы ---- и ∞ числом 10000, что не повлияет на результат решения.
Рис.2.1. Размещение исходных данных на рабочем листе – фрагмент 1
Рис.2.2. Размещение исходных данных на рабочем листе – фрагмент 2
Рис.2.3. Размещение исходных данных на рабочем листе – фрагмент 3
Далее вводим ограничения.
- В ячейку C31 заносим формулу для целевой функции, представляющей собой сумму произведений элементов матрицы переменных и матрицы расстояний, т.е. длину полученного маршрута: =СУММПРОИЗВ(B4:K13;B20:K29). Открываем окно «Поиск решения», указываем ячейку $C$31 в качестве целевой и устанавливаем эту целевую ячейку равной минимуму. Закрываем окно «Поиск решения».
- Сумма значений элементов каждого столбца матрицы переменных должна быть равна 1. Для этого в ячейку B14 записываем формулу =СУММ(B4:B13) и распространяем ее на диапазон B14:K14. Открываем окно «Поиск решения» и в окошке «ограничения» записываем ограничение $B$14:$K$14=1. Закрываем окно «Поиск решения».
- Аналогично сумма элементов каждой строки матрицы переменных должна быть равна 1. Поэтому в ячейку L4 записываем формулу =СУММ(L4:K4) и распространяем ее на диапазон L4:L13. В окно «Поиск решения» добавляем ограничение $L$4:$L$13=1.
- В ячейку С35 записываем формулу =$C$16-C16+10*C5 и распространяем ее на диапазон С35:K35. В ячейку C36 заносим формулу =$D$16-C16+10*C6 и распространяем ее на диапазон C36:K36. В ячейку C37 заносим =$E$16-C16+10*C7 и распространяем на диапазон C37:K37. В ячейку C38 заносим =$F$16-C16+10*C8 и распространяем на диапазон С38:K38. В ячейку C39 заносим =$G$16-C16+10*C9 и распространяем ее на диапазон C39:K39.В ячейку C40 заносим =$H$16-C16+10*C10 и распространяем ее на диапазон C40:K40. В ячейку С41 заносим =$I$16-C16+10*C11 и распространяем ее на диапазон C41:K41. В ячейку C42 заносим =$J$16-C16+10*C12 и распространяем ее на диапазон C42:K42. В ячейку C43 заносим =$K$16-C16+10*C13 и распространяем ее на диапазон C43:K43. В окне «Поиск решения» добавляем ограничение $C$35:$K$43<=9.
Записанные в ячейки С35-С43 формулы и связанное с ними ограничение обеспечивают то, что искомый путь будет представлять собой единственный цикл, не распадающийся на отдельные циклы с количеством дуг меньше n, где n-общее число вершин исходного графа.
- Еще одно ограничение устанавливает то, что подбираемые элементы матрицы переменных принимают только два значения: 0 и 1. Для этого в окне «Поиск решения» записываем $B$4:$K$13=двоичное.
4.4. В окне «Поиск решения» указываем также ячейки, изменяя которые будем искать минимальный маршрут. Такими ячейками будут $B$4:$K$13: $B$16:$K$16.
4.5. В окне «Поиск решения» устанавливаем параметры поиска решения:
максимальное время – например, 120 секунд;
предельное число итераций – например, 10000;
относительная погрешность – например, 0,0001;
допустимое отклонение 1%;
сходимость – 0,001.
Устанавливаем галочки на окошках «линейную модель», «неотрицательные значения», оценки – линейная, разности – прямые, метод поиска – Ньютона.
4.6. После всего этого нажимаем «ОК», «выполнить». После окончания процесса поиска решения появятся результаты поиска. Ставим отметку «Сохранить найденное решение» и нажимаем «ОК». Записываем найденное решение, которое зафиксируется в матрице переменных. Искомый маршрут формируется следующим образом: начальным пунктом считаем город 0 (столбец 0), в этом столбце находим единственную единицу и соответствующая ей строка буде номером следующего города в маршруте, в данном случае этим городом будет город 4, точно также в столбце 4 находим номер следующего города – город 7 и т.д. В данном случае искомым маршрутом будет маршрут 0-4-7-9-6-8-5-2-3-1-0. Этот маршрут совпадает с маршрутом, найденным методом Литтла (возможно, что направление движения будет противоположно). Длина полученного маршрута будет равна значению целевой функции, т.е. числу в ячейке С31, в данном случае, это значение 34,78, что также совпадает с результатом расчета по методу Литтла. Таким образом, оба метода дают одинаковые результаты. Ограничение расчета с применением среды MS Excel заключается в том, что расчет производится методом полного перебора, а это приводит к невозможности проведения расчета для большого числа городов, в данном случае, максимальное число городов составляет 12, и для большего числа городов расчет методом полного перебора невозможен.
