За последнее время реализовал и протестировал алгоритм параллельного решения задачи коммивояжера.
Алгоритм построен на основе метода Литтла с улучшенными функциями определения нижней оценки набора решений и порядок выбора дуги. В ходе просмотра дерева решния по методу Литтла алгоритм ответвляет подзадачи и передает их параллельным решателям. Параллельные решатели и список подзадач для решения построены по схеме пула потоков. Решатели подзадач синхронизируются с общей информацией о рекордах главного решателя.
Таким образом достигается возможность параллельного просмотра подзадач и ускорения процесса решения.
Что дает параллельное решение задачи коммивояжера?
1. На компьютерах с реальной многопоточностью дерево решений просматривается быстрее.
2. В большинстве рассмотренных задач сокращается время просмотра дерева решений.
3. На некоторых задачах выявлен эффект взаимопомощи решателей, когда один решатель прекращает решение благодаря нахождению хорошего рекорда другим решателем.
Для тестирования использовались известные задачи. В качестве оценки решения использовались следующие показатели:
1. Затраченное на решение задачи время, как разница между моментом начала и завершения решения. Обозначение: T1, в секундах.
2. Затраченное на решение задачи время, как сумма проццерного времени, затраченное параллельными решателями. При использовании двух процессоров (ядер процессора) это время будет до двух раз больше предыдущего. Обозначение: T2, в секундах. Примечание: Уменьшение T2 с увеличением количества параллельных решателей говорит о наличии взаимопомощи решателей.
3. Количество просмотренных вершин в дереве просмотра решений. Обозначение: E.
4. Достигнутое решение (за отведенное на решение время, ограничение по первому времени). Обозначие: S.
5. Состояние пула задач: часто полон, часто свободен.
Далее по ссылке представлены результаты полученные на компьютере с двухъядровым процессором.
http://spreadsheets.google.com/pub?key=pQVK5kPuGy5Vzd5nEST5tXQ
Далее по ссылке представлены результаты полученные на компьютере с двумя двухъядровыми процессорами.
http://spreadsheets.google.com/pub?key=pQVK5kPuGy5XdUj52mzleZA