Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Задача коммивояжера - Мир MS Excel

Старая форма входа
  • Страница 1 из 3
  • 1
  • 2
  • 3
  • »
Модератор форума: _Boroda_, китин  
Мир MS Excel » Вопросы и решения » Готовые решения » Задача коммивояжера (Excel)
Задача коммивояжера
MCH Дата: Среда, 23.07.2014, 21:37 | Сообщение № 1
Группа: Админы
Ранг: Старожил
Сообщений: 2003
Репутация: 751 ±
Замечаний: ±

Задача коммивояжера (англ. Travelling salesman problem, сокращённо TSP) — одна из самых известных задач комбинаторной оптимизации, заключающаяся в отыскании самого выгодного маршрута, проходящего через указанные города хотя бы по одному разу с последующим возвратом в исходный город.
Тем кто с ней не знаком, можете почитать в Wikipedia
Можно решать различными алгоритмами.

Попытки решения на этом форуме публиковались здесь:
http://www.excelworld.ru/forum/10-10953-1
http://www.excelworld.ru/forum/2-11826-1

Реализовал пока два варианта решения:
1. Графическим (геометрическим) методом https://yadi.sk/d/Gg1Qbv26XCnkR
В основе решения геометрия - наносим координаты городов на плоскость, строим выпуклый многоугольник проходящий через указанные точки, так, чтобы все точки были внутри данного многоугольника. Затем пытаемся включить в данный многоугольник новые точки с наименьшими "затратами". Присутствует эвристика, поэтому маршрут не обязательно получается оптимальным, но близок к нему. Для исключения из маршрутов образование "петель", проходим перебором близко стоящие точки полученного маршрута, пытаясь улучшить решение.
К достоинствам можно отнести довольно высокую скорость нахождения пути для большого количества точек. При этом маршрут получается близким к оптимальному.
К недостаткам - нет гарантии, что маршрут оптимальный, необходимость задавать координаты точек и вычислять расстояния между точками геометрическим образом, а не использовать матрицу расстояний между точками (которая не обязательно должна быть симметричной)

2. Полным перебором (см. вложение) - можно применять не более чем для 12 городов (придется перебирать 11! вариантов маршрутов, это примерно 40 млн вариантов).
Увеличение количество городов более 12 приводит к существенному увеличению времени расчетов и уже не оправдано.

Если получится, то в планах решить задачу коммивояжера методом Литтла (как частный случай метода ветвей и границ). Материала по описанию данного метода нашел много, но как то все в голове пока не укладывается.
К сообщению приложен файл: Travelling_sale.xls (95.5 Kb)
 
Ответить
СообщениеЗадача коммивояжера (англ. Travelling salesman problem, сокращённо TSP) — одна из самых известных задач комбинаторной оптимизации, заключающаяся в отыскании самого выгодного маршрута, проходящего через указанные города хотя бы по одному разу с последующим возвратом в исходный город.
Тем кто с ней не знаком, можете почитать в Wikipedia
Можно решать различными алгоритмами.

Попытки решения на этом форуме публиковались здесь:
http://www.excelworld.ru/forum/10-10953-1
http://www.excelworld.ru/forum/2-11826-1

Реализовал пока два варианта решения:
1. Графическим (геометрическим) методом https://yadi.sk/d/Gg1Qbv26XCnkR
В основе решения геометрия - наносим координаты городов на плоскость, строим выпуклый многоугольник проходящий через указанные точки, так, чтобы все точки были внутри данного многоугольника. Затем пытаемся включить в данный многоугольник новые точки с наименьшими "затратами". Присутствует эвристика, поэтому маршрут не обязательно получается оптимальным, но близок к нему. Для исключения из маршрутов образование "петель", проходим перебором близко стоящие точки полученного маршрута, пытаясь улучшить решение.
К достоинствам можно отнести довольно высокую скорость нахождения пути для большого количества точек. При этом маршрут получается близким к оптимальному.
К недостаткам - нет гарантии, что маршрут оптимальный, необходимость задавать координаты точек и вычислять расстояния между точками геометрическим образом, а не использовать матрицу расстояний между точками (которая не обязательно должна быть симметричной)

2. Полным перебором (см. вложение) - можно применять не более чем для 12 городов (придется перебирать 11! вариантов маршрутов, это примерно 40 млн вариантов).
Увеличение количество городов более 12 приводит к существенному увеличению времени расчетов и уже не оправдано.

Если получится, то в планах решить задачу коммивояжера методом Литтла (как частный случай метода ветвей и границ). Материала по описанию данного метода нашел много, но как то все в голове пока не укладывается.

Автор - MCH
Дата добавления - 23.07.2014 в 21:37
MCH Дата: Понедельник, 01.09.2014, 15:21 | Сообщение № 2
Группа: Админы
Ранг: Старожил
Сообщений: 2003
Репутация: 751 ±
Замечаний: ±

Решение перебором обновил, избавился от генерации массива перестановок, генерирую их циклом, с помощью алгоритма Нарайаны.
Это позволило избавиться от выделения памяти для хранения массива с перестановками, а также ускорить решение более чем в два раза.
К сообщению приложен файл: Travelling_sale.rar (25.1 Kb)


Сообщение отредактировал MCH - Понедельник, 01.09.2014, 15:21
 
Ответить
СообщениеРешение перебором обновил, избавился от генерации массива перестановок, генерирую их циклом, с помощью алгоритма Нарайаны.
Это позволило избавиться от выделения памяти для хранения массива с перестановками, а также ускорить решение более чем в два раза.

Автор - MCH
Дата добавления - 01.09.2014 в 15:21
Desmont Дата: Среда, 03.09.2014, 10:52 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 3
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Посмотрел вложение, это какая-то легкая наркомания, автор как ты это вообще придумал?)
Решал такое на *корпоративном тесте способностей персонала* в одной из компаний с годовой выручкой 1млрд+$, тут даже близко никто так не оптимизировал :)
 
Ответить
СообщениеПосмотрел вложение, это какая-то легкая наркомания, автор как ты это вообще придумал?)
Решал такое на *корпоративном тесте способностей персонала* в одной из компаний с годовой выручкой 1млрд+$, тут даже близко никто так не оптимизировал :)

Автор - Desmont
Дата добавления - 03.09.2014 в 10:52
MCH Дата: Четверг, 25.09.2014, 00:15 | Сообщение № 4
Группа: Админы
Ранг: Старожил
Сообщений: 2003
Репутация: 751 ±
Замечаний: ±

Дополнил решение задачи коммивояжера методом динамического программирования.
Можно использовать до 20 городов. Решение находится относительно быстро.
К сообщению приложен файл: 5637276.rar (35.1 Kb)


Сообщение отредактировал MCH - Четверг, 25.09.2014, 23:03
 
Ответить
СообщениеДополнил решение задачи коммивояжера методом динамического программирования.
Можно использовать до 20 городов. Решение находится относительно быстро.

Автор - MCH
Дата добавления - 25.09.2014 в 00:15
SLAVICK Дата: Четверг, 02.10.2014, 16:22 | Сообщение № 5
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
Я просчитал для 24 городов :) - заменил MOD и типы на double.
Просчет занял 25 мин. Много времени ушло на создание массивов. Комп "завис" на несколько минут. (ОС 64 бит)

А вот для 25 не хватило памяти :( :
для 24 создается 2 Массива: 16 777 215 x 24.
а для 25 нужны массивы : 33 554 431 х 25.

Может можно без них - с временными массивами? Или это невозможно?


Иногда все проще чем кажется с первого взгляда.
 
Ответить
СообщениеЯ просчитал для 24 городов :) - заменил MOD и типы на double.
Просчет занял 25 мин. Много времени ушло на создание массивов. Комп "завис" на несколько минут. (ОС 64 бит)

А вот для 25 не хватило памяти :( :
для 24 создается 2 Массива: 16 777 215 x 24.
а для 25 нужны массивы : 33 554 431 х 25.

Может можно без них - с временными массивами? Или это невозможно?

Автор - SLAVICK
Дата добавления - 02.10.2014 в 16:22
MCH Дата: Четверг, 02.10.2014, 16:55 | Сообщение № 6
Группа: Админы
Ранг: Старожил
Сообщений: 2003
Репутация: 751 ±
Замечаний: ±

Если маршруты целочисленные, то для экономии памяти можно объявлять первый массив как Long.
Второй массив можно объявить как Byte, все равно там хранятся числа не более 255 (не более 25).
От второго массива, наверное, можно избавиться и восстанавливать маршрут расчетным путем.
 
Ответить
СообщениеЕсли маршруты целочисленные, то для экономии памяти можно объявлять первый массив как Long.
Второй массив можно объявить как Byte, все равно там хранятся числа не более 255 (не более 25).
От второго массива, наверное, можно избавиться и восстанавливать маршрут расчетным путем.

Автор - MCH
Дата добавления - 02.10.2014 в 16:55
SLAVICK Дата: Четверг, 02.10.2014, 17:59 | Сообщение № 7
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
Поменял просчиталось для 24 за 15 мин.
И памяти хватает для 25 :) .

А может вместо расчета восстановленного маршрута сделать массив, чтобы не считать?


Иногда все проще чем кажется с первого взгляда.
 
Ответить
СообщениеПоменял просчиталось для 24 за 15 мин.
И памяти хватает для 25 :) .

А может вместо расчета восстановленного маршрута сделать массив, чтобы не считать?

Автор - SLAVICK
Дата добавления - 02.10.2014 в 17:59
MCH Дата: Четверг, 02.10.2014, 18:33 | Сообщение № 8
Группа: Админы
Ранг: Старожил
Сообщений: 2003
Репутация: 751 ±
Замечаний: ±

А может вместо расчета восстановленного маршрута сделать массив, чтобы не считать?

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


Сообщение отредактировал MCH - Четверг, 02.10.2014, 19:00
 
Ответить
Сообщение
А может вместо расчета восстановленного маршрута сделать массив, чтобы не считать?

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

Автор - MCH
Дата добавления - 02.10.2014 в 18:33
SLAVICK Дата: Понедельник, 06.10.2014, 10:38 | Сообщение № 9
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
Пока я не совсем разобрался с алгоритмом. Времени сейчас не хватает :(
Я думал создать одномерный массив 1...n(количество точек) и перезаписывать в него данные по маршруту.
Если это возможно. Я наверное не учел что
второй массив, который запоминает оптимального предка для каждого состояния

пойду разбирать механизм дальше :)
А может ссылку дадите на мат часть?
Расчетным путем это формулами? как раньше в версии "brute"?. Может так и лучше.
Выполнение немного замедлится, но можно просчитать больше.


Иногда все проще чем кажется с первого взгляда.

Сообщение отредактировал SLAVICK - Понедельник, 06.10.2014, 13:18
 
Ответить
СообщениеПока я не совсем разобрался с алгоритмом. Времени сейчас не хватает :(
Я думал создать одномерный массив 1...n(количество точек) и перезаписывать в него данные по маршруту.
Если это возможно. Я наверное не учел что
второй массив, который запоминает оптимального предка для каждого состояния

пойду разбирать механизм дальше :)
А может ссылку дадите на мат часть?
Расчетным путем это формулами? как раньше в версии "brute"?. Может так и лучше.
Выполнение немного замедлится, но можно просчитать больше.

Автор - SLAVICK
Дата добавления - 06.10.2014 в 10:38
MCH Дата: Понедельник, 06.10.2014, 14:22 | Сообщение № 10
Группа: Админы
Ранг: Старожил
Сообщений: 2003
Репутация: 751 ±
Замечаний: ±

А может ссылку дадите на мат часть?

Описание алгоритма брал здесь: http://cybern.ru/zadacha-kommivoyazhyora.html

Расчетным путем это формулами? как раньше в версии "brute"?.

Не совсем так. По завершению алгоритма мы вычисляем длину оптимальнго маршрута и знаем из какго последнего состояния в него попали, но при этом не знаем последовательность точек.
Для того, чтобы определить всю цепочку нужно будет поочередно перепроверять каждый элемент и определять предка. В процессе вычисления предки запоминаются. Поэтому последовательно восстанавливается простым циклом. Если не запоминать предков, то с вычислением могут быть трудности, которые упираютя в стандарт вычислений с плавающей точкой (например, если a=0.1, b=a+4, c=b-4 то при этом a<>c)
 
Ответить
Сообщение
А может ссылку дадите на мат часть?

Описание алгоритма брал здесь: http://cybern.ru/zadacha-kommivoyazhyora.html

Расчетным путем это формулами? как раньше в версии "brute"?.

Не совсем так. По завершению алгоритма мы вычисляем длину оптимальнго маршрута и знаем из какго последнего состояния в него попали, но при этом не знаем последовательность точек.
Для того, чтобы определить всю цепочку нужно будет поочередно перепроверять каждый элемент и определять предка. В процессе вычисления предки запоминаются. Поэтому последовательно восстанавливается простым циклом. Если не запоминать предков, то с вычислением могут быть трудности, которые упираютя в стандарт вычислений с плавающей точкой (например, если a=0.1, b=a+4, c=b-4 то при этом a<>c)

Автор - MCH
Дата добавления - 06.10.2014 в 14:22
SLAVICK Дата: Понедельник, 06.10.2014, 19:22 | Сообщение № 11
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
если a=0.1, b=a+4, c=b-4 то при этом a<>c

А если так?
a-c<=0.1
где 0.1 - нужная точность?

или изначально округлять до (например) сотых а, b, c
[vba]
Код
a = Round(0.1, 2)
b = Round(4 + a, 2)
c = Round(b - 4, 2)
a = c = True
[/vba]

А маршрут можно записать в одномерный массив вместе с мин. длиной(тогда когда и мин длину).?


Иногда все проще чем кажется с первого взгляда.

Сообщение отредактировал SLAVICK - Понедельник, 06.10.2014, 19:33
 
Ответить
Сообщение
если a=0.1, b=a+4, c=b-4 то при этом a<>c

А если так?
a-c<=0.1
где 0.1 - нужная точность?

или изначально округлять до (например) сотых а, b, c
[vba]
Код
a = Round(0.1, 2)
b = Round(4 + a, 2)
c = Round(b - 4, 2)
a = c = True
[/vba]

А маршрут можно записать в одномерный массив вместе с мин. длиной(тогда когда и мин длину).?

Автор - SLAVICK
Дата добавления - 06.10.2014 в 19:22
MCH Дата: Вторник, 02.01.2018, 13:38 | Сообщение № 12
Группа: Админы
Ранг: Старожил
Сообщений: 2003
Репутация: 751 ±
Замечаний: ±

Вариант решения Задачи Коммивояжера для 200 точек, заданных координатами x и y
Исходные данные для расчета взял отсюда: https://github.com/gumpu/TSP_Animation/blob/master/problem3.dat
При этом решение по этим данным выложенное автором кода составляет 30944.3: https://www.youtube.com/watch?v=q6fPk0--eHY
мне удалось найти решение 29842,5 (если запустить на более долгий пересчет, то решение можно немного улучшить)

UPD: улучшенное решение: 29493,1
Нашел оптимальное решение для данного набора точек - 29440,4 (29437 для целочисленных отрезков)
К сообщению приложен файл: TSP_200eng.xlsm (70.0 Kb) · TSP200best.xlsx (42.7 Kb)
 
Ответить
СообщениеВариант решения Задачи Коммивояжера для 200 точек, заданных координатами x и y
Исходные данные для расчета взял отсюда: https://github.com/gumpu/TSP_Animation/blob/master/problem3.dat
При этом решение по этим данным выложенное автором кода составляет 30944.3: https://www.youtube.com/watch?v=q6fPk0--eHY
мне удалось найти решение 29842,5 (если запустить на более долгий пересчет, то решение можно немного улучшить)

UPD: улучшенное решение: 29493,1
Нашел оптимальное решение для данного набора точек - 29440,4 (29437 для целочисленных отрезков)

Автор - MCH
Дата добавления - 02.01.2018 в 13:38
MCH Дата: Вторник, 09.01.2018, 17:57 | Сообщение № 13
Группа: Админы
Ранг: Старожил
Сообщений: 2003
Репутация: 751 ±
Замечаний: ±

Реализовал другой метод решения задачи коммивояжера динамическим программированием.
Описание метода взял здесь: https://revolution.allbest.ru/programming/00555478_0.html
Реализовал самостоятельно, так как понял (возможно не совсем оптимально, будет над чем подумать, чтобы оптимизировать).

Отличия от предыдущей реализации:
1. Использован тип Long, для хранения данных и уменьшения размера объявляемых массивов, что позволило немного увеличить максимальное число городов.
2. Перенес алгоритм на FreeBasic (из VBA переносится в FB достаточно легко), реализовал все это в виде dll, которую можно подключить к Excel файлу, передавать в dll модель и решить ее, скорость решения значительно увеличилась, 20 городов у меня решается менее чем за 1 секунду
3. Отдельно скомпилировал решатель в виде exe файла, данные (матрицу) можно заносить в текстовый файл "problem.dat", решение сохраняется также в текстовый файл

Во вложении пример с исходными данными на 200 точек из предыдущего поста решаемый dll (проверено в Excel 32bit)
а также exe файлы под win32 и win64
К сообщению приложен файл: Solution_Dll.rar (82.1 Kb) · Solution_EXE.rar (75.8 Kb)
 
Ответить
СообщениеРеализовал другой метод решения задачи коммивояжера динамическим программированием.
Описание метода взял здесь: https://revolution.allbest.ru/programming/00555478_0.html
Реализовал самостоятельно, так как понял (возможно не совсем оптимально, будет над чем подумать, чтобы оптимизировать).

Отличия от предыдущей реализации:
1. Использован тип Long, для хранения данных и уменьшения размера объявляемых массивов, что позволило немного увеличить максимальное число городов.
2. Перенес алгоритм на FreeBasic (из VBA переносится в FB достаточно легко), реализовал все это в виде dll, которую можно подключить к Excel файлу, передавать в dll модель и решить ее, скорость решения значительно увеличилась, 20 городов у меня решается менее чем за 1 секунду
3. Отдельно скомпилировал решатель в виде exe файла, данные (матрицу) можно заносить в текстовый файл "problem.dat", решение сохраняется также в текстовый файл

Во вложении пример с исходными данными на 200 точек из предыдущего поста решаемый dll (проверено в Excel 32bit)
а также exe файлы под win32 и win64

Автор - MCH
Дата добавления - 09.01.2018 в 17:57
MCH Дата: Среда, 10.01.2018, 23:01 | Сообщение № 14
Группа: Админы
Ранг: Старожил
Сообщений: 2003
Репутация: 751 ±
Замечаний: ±

Примеры решения задачи коммивояжера динамическим программированием:
1. Два варианта функции на VBA
2. Решение с помощью DLL
3. Решение внешней программой
К сообщению приложен файл: VBADLLEXE.rar (99.4 Kb)
 
Ответить
СообщениеПримеры решения задачи коммивояжера динамическим программированием:
1. Два варианта функции на VBA
2. Решение с помощью DLL
3. Решение внешней программой

Автор - MCH
Дата добавления - 10.01.2018 в 23:01
SLAVICK Дата: Четверг, 11.01.2018, 10:55 | Сообщение № 15
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
MCH, как всегда на высоте - понимаю, что мне есть еще чего учить.
Есть несколько пожеланий, как для готового решения:
- можно сделать проверку для подключения библиотек #if VBA7 then... - так будет работать у всех.
https://msdn.microsoft.com/ru-ru....4).aspx
И совсем не лишним(на мой взгляд) было бы добавить вывод в ячейку время выполнения кода, чтобы глаз радовался :).


Иногда все проще чем кажется с первого взгляда.
 
Ответить
СообщениеMCH, как всегда на высоте - понимаю, что мне есть еще чего учить.
Есть несколько пожеланий, как для готового решения:
- можно сделать проверку для подключения библиотек #if VBA7 then... - так будет работать у всех.
https://msdn.microsoft.com/ru-ru....4).aspx
И совсем не лишним(на мой взгляд) было бы добавить вывод в ячейку время выполнения кода, чтобы глаз радовался :).

Автор - SLAVICK
Дата добавления - 11.01.2018 в 10:55
SLAVICK Дата: Четверг, 11.01.2018, 16:14 | Сообщение № 16
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
Наверное так - должно работать у всех :)
К сообщению приложен файл: TSP_VBADLLEXE.xlsm (57.2 Kb)


Иногда все проще чем кажется с первого взгляда.
 
Ответить
СообщениеНаверное так - должно работать у всех :)

Автор - SLAVICK
Дата добавления - 11.01.2018 в 16:14
MCH Дата: Четверг, 11.01.2018, 17:44 | Сообщение № 17
Группа: Админы
Ранг: Старожил
Сообщений: 2003
Репутация: 751 ±
Замечаний: ±

Спасибо, архив в 14м сообщении перезагрузил
 
Ответить
СообщениеСпасибо, архив в 14м сообщении перезагрузил

Автор - MCH
Дата добавления - 11.01.2018 в 17:44
MCH Дата: Вторник, 30.01.2018, 13:46 | Сообщение № 18
Группа: Админы
Ранг: Старожил
Сообщений: 2003
Репутация: 751 ±
Замечаний: ±

Если получится, то в планах решить задачу коммивояжера методом Литтла (как частный случай метода ветвей и границ).

Реализовал на VBA метод ветвей и границ (то как его понял). Код еще сырой и нуждается в оптимизации.
Для сравнения сделал в одном файле решение динамикой и МВиГ: https://yadi.sk/d/Reg-KIOE3RurPe

Ограничение для динамического программирования - 23-24 города, для МВиГ количество городов может быть и больше, но расчет может занять продолжительное время, также может не хватить памяти при рекурсивном вызове функций.
 
Ответить
Сообщение
Если получится, то в планах решить задачу коммивояжера методом Литтла (как частный случай метода ветвей и границ).

Реализовал на VBA метод ветвей и границ (то как его понял). Код еще сырой и нуждается в оптимизации.
Для сравнения сделал в одном файле решение динамикой и МВиГ: https://yadi.sk/d/Reg-KIOE3RurPe

Ограничение для динамического программирования - 23-24 города, для МВиГ количество городов может быть и больше, но расчет может занять продолжительное время, также может не хватить памяти при рекурсивном вызове функций.

Автор - MCH
Дата добавления - 30.01.2018 в 13:46
AK Дата: Воскресенье, 04.03.2018, 16:10 | Сообщение № 19
Группа: Пользователи
Ранг: Прохожий
Сообщений: 3
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
MCH, добрый день.
Вариант решения Задачи Коммивояжера для 200 точек

Я воспользовался вашим файлом для своего примера - 48 городов.
Почему то один из городов не посещается при построении маршрута и я не смог понять, где допустил ошибку.
Буду очень благодарен, если вы посмотрите.

Спасибо.
К сообщению приложен файл: TSP_200eng_48.xlsm (50.5 Kb)


Сообщение отредактировал AK - Воскресенье, 04.03.2018, 16:21
 
Ответить
СообщениеMCH, добрый день.
Вариант решения Задачи Коммивояжера для 200 точек

Я воспользовался вашим файлом для своего примера - 48 городов.
Почему то один из городов не посещается при построении маршрута и я не смог понять, где допустил ошибку.
Буду очень благодарен, если вы посмотрите.

Спасибо.

Автор - AK
Дата добавления - 04.03.2018 в 16:10
MCH Дата: Понедельник, 05.03.2018, 08:34 | Сообщение № 20
Группа: Админы
Ранг: Старожил
Сообщений: 2003
Репутация: 751 ±
Замечаний: ±

Почему то один из городов не посещается при построении маршрута

В коде была небольшая ошибка, исправлено во вложении, также алгоритм решения убран в dll для ускорения расчетов (будет работать только в Excel 32bit)
К сообщению приложен файл: mchTSP48.rar (89.8 Kb)
 
Ответить
Сообщение
Почему то один из городов не посещается при построении маршрута

В коде была небольшая ошибка, исправлено во вложении, также алгоритм решения убран в dll для ускорения расчетов (будет работать только в Excel 32bit)

Автор - MCH
Дата добавления - 05.03.2018 в 08:34
Мир MS Excel » Вопросы и решения » Готовые решения » Задача коммивояжера (Excel)
  • Страница 1 из 3
  • 1
  • 2
  • 3
  • »
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!