![]() |
|
|
![]()
|
|
| Graf Zeppelin |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 130 Регистрация: 28.3.2004 Репутация: нет Всего: 1 |
На практике столкнулся с такой проблемой: есть сверлильный станок для него существуе задание просверлить N дырок и вернутся в исходную позицию. Координаты дырок известны, нужно минимизировать пройденный путь.
ЗЫ Мне посоветовали читать книжки по теории графов --------------------
Jah, help me! |
|||
|
||||
| Alex101 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 891 Регистрация: 8.4.2002 Где: Москва Репутация: 1 Всего: 10 |
Если на плоскости, то это типичная задача коммивояжера.
Оптимизировать можно, отсекая лишние ветви, если уже на i-том шаге путь станка больше какого-то полученного. А вообще посмотри метод Литтла. Вроде как он позволяет решать задачу для N (кол-ва городов) в районе 30-50... -------------------- С уважением, А. Фролов. |
|||
|
||||
| Graf Zeppelin |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 130 Регистрация: 28.3.2004 Репутация: нет Всего: 1 |
Плиз дайте ссылку.
--------------------
Jah, help me! |
|||
|
||||
| Maverick |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1307 Регистрация: 22.9.2003 Где: Odessa, Ukraine Репутация: нет Всего: 10 |
||||
|
||||
| Lem03 |
|
|||
|
Unregistered |
Можно использовать генетический алгоритм. Поищи "Konstantin Boukreev" , он написал программу на эту тему и выложил исходник. Правда генетические алгоритмы довольно медленные.
|
|||
|
||||
| Graf Zeppelin |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 130 Регистрация: 28.3.2004 Репутация: нет Всего: 1 |
--------------------
Jah, help me! |
|||
|
||||
| Golod |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 8.5.2004 Репутация: нет Всего: нет |
Алгоритм решения задачи комивояжера: (алгоритм жадный, так что он может давать оптимальное решение, а может и не давать, но не жадного алгоритма нет т.к. задача NP-полна)
1)Начинаем строить цикл, включив в него ребро наименьшего веса; 2)Среди рёбер, инцедентных концам нашего ребра, находится ребро наименьшего веса(весом будет расстояние между дырками) и тоже включается в цикл; 3)Если построили цепь, то просматриваем рёбра, инцедентные концам цепи, и не образующие цикл с уже включёнными рёбрами, выбираем наименьшее и включаем; 4)Пункт 3 повторяем, пока не закончатся вершины, а потом соединяем последнюю и первую вершины. Вот и весь алгоритм. Его удобнее всего реализовать методом расстановки меток. |
|||
|
||||
| Crot |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 31.1.2004 Репутация: нет Всего: 3 |
А скажите, задача коммивояжёра определена для полного графа, или для любого?
|
|||
|
||||
| Guest |
|
|||
|
Unregistered |
Hello, ALL !
Если путь замкнутый, то видимо для любого. В случае с печ-ми платми, прирост производит-ти станка при замене пути, может достичь ~30 % (где вычитал не помню, давно это было) Реальный экономический эффект, без "большого" напряга :-) Когда-то я пробовал решать эту задачу по алгоритму, схожему с предложенным Golod-ом, но с некоторым отличием. Внедрить, увы не удалось, т к на тот момент все производства "дохли" ... :-( Попробуйте, может у вас что-то получится. Итак, алгоритм: 1) в составленной матрице из _расстояний_ между точками выбираем самую "дальнюю" точку (можно по макс расст или по сумме всех расст. Я брал 1-й вар ) 2) вкл в маршрут _две_ ближайшие точки 3) добавить в маршрут точку с наименьшей ценой, т е включение которой даёт _наименьшее_ приращение длинны маршрута. Включение этой точки производится перебором включением во все рёбра уже имеющегося маршрута. Есс-но выбирается вставка в то ребро, где приращение маршрута наименьше. 4) ... и так далее, пока не будут вставлены в маршрут все точки. Была и вторая часть, оптимизатор, но сейчас точно я его не помню :-( Если найду, кину. Эх, давно это было ... :-( Удачи ! |
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 33 Всего: 110 |
кстати, а сколько отверстий? (приблизительно)
-------------------- qqq |
|||
|
||||
| Graf Zeppelin |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 130 Регистрация: 28.3.2004 Репутация: нет Всего: 1 |
~100 в худшем случае p.s. уже потихоньку врубаюсь в книжку Кристофидеса "Графы. Алгоритмический подход" Это сообщение отредактировал(а) Graf Zeppelin - 14.5.2004, 11:25 --------------------
Jah, help me! |
|||
|
||||
| Гость_Eugene |
|
|||
|
Unregistered |
В догонку
Как вариант: п 2 можно изменить на включение 2-х или 3-х самых дальних точек, что-бы охватить сразу _весь_ периметр печатной платы. Этот вариант у меня тоже был. Экспериментируйте... Удачи ! |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: нет Всего: 538 |
Решение есть если граф Гамильтонов, задача определения являеся ли граф Гамильтоновым NP полная, но полный граф всегда Гамильтонов. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| achmed |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 150 Регистрация: 12.4.2004 Репутация: нет Всего: нет |
в догонку могу посоветовать книгу Мину, тоже по графам.
|
|||
|
||||
| HalkaR |
|
|||
![]() Пуфыстый назгул ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2132 Регистрация: 8.12.2002 Где: В Москве Репутация: нет Всего: 42 |
http://algolist.manual.ru
Вобщем там есть достаточно простые методы. Хотя там нет методов ветвей и границ. |
|||
|
||||
![]()
|
| Правила форума "Алгоритмы" | |
|
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Алгоритмы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |