С Новым годом! Форум программистов, компьютерный форум, киберфорум
Python
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
294 / 265 / 48
Регистрация: 09.04.2013
Сообщений: 1,038

Быстрый модуль для задачи коммивояжёра

21.11.2022, 12:41. Показов 612. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Суть проблемы - отсортировать список картинок (одинакового размера) так чтобы соседи были максимально похожи.
Сейчас у меня боттлнек (самое долгое по вычислениям) - это непосредственно сама сортировка.
Матрицу смежности сделал через sklearn.metrics.pairwise.manhattan_dista nces (на выходе матрица numpy.ndarray)
В качестве решалки Коммиваяжора пока взял python_tsp.heuristics, но данное решение меня не удовлетворяет по производительности, хоть оно и эврестическое.
Да, точное решение для меня не обязательно, "хорошее" приближенное тоже подойдет.
Какой модуль Питона посоветуете ?

Из альтернатив есть вариант просто выбирать картинки по одной, выбирая следующую как самую подходящую из оставшихся. Но хотелось бы не так топорно подходить к проблеме
Картинок порядка 500 тысяч 500х700, в идеале, конечно, хотелось бы их целиком (приблизительно) отсортировать, но пока рассматриваю вариант сортировки только внутри небольших отрезков.
Думал про всяких "хэши", но пока пришел к выводу что они не дают требуемого результата. "Хэши" для поиска "похожих" картинок не работают точно, мне нужно учитывать метрику расстояния между картинками, а хэш далек от нее. Пытался выдумывать свой хэш, но ничего хорошего не вышло.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.11.2022, 12:41
Ответы с готовыми решениями:

Быстрый модуль для рисования графиков
Может кто порекомендовать достаточно быстрый модуль для создания графиков. Графики представляют собой несколько линий, которые отражают...

Необходимо разработать модуль по генерации файлов с вариантами задач по математике
Необходимо разработать модуль по генерации файлов с вариантами задач по математике. Пользователю предлагается ввести необходимое количество...

Задача коммивояжера, TSP, задача на нахождение кратчайших путей
Здравствуйте, знаю что это наглость с моей стороны, но может кто то решал задачу коммивояжера и у него остался код. У меня просто даже идей...

8
Эксперт Python
 Аватар для Red white socks
4523 / 1899 / 336
Регистрация: 18.01.2021
Сообщений: 3,489
22.11.2022, 03:14
wingblack,
Цитата Сообщение от wingblack Посмотреть сообщение
Матрицу смежности сделал через sklearn.metrics.pairwise.manhattan_dista nces
500К х 500К? И что, правда посчиталось? Она же терабайт в памяти должна весить, я не ошибаюсь?
Эвристик много можно придумать, вопрос соотношения времени/качества.
Можете погуглить LKH for TSP. Возможно есть библиотеки.
0
294 / 265 / 48
Регистрация: 09.04.2013
Сообщений: 1,038
23.11.2022, 01:21  [ТС]
Цитата Сообщение от Red white socks Посмотреть сообщение
500К х 500К? И что, правда посчиталось?
Нет конечно, я пробовал делать "отрезками".
Цитата Сообщение от Red white socks Посмотреть сообщение
Она же терабайт в памяти должна весить, я не ошибаюсь?
1 терабайт при условии использования 32-битных чисел, да.

В самом начале работы над задачей требовалось делать относительно быстро, чтобы за относительно короткое время сформировать видео-архив. Для таких условий в худшем случае подходили отрезки по 100 картинок, но тогда сортировка почти не имеет смысла на таком малом отрезке.
После разных попыток пришел к выводу сначала сделать видео-архив (в отличном качестве сжатия), а потом уже написать программу которая будет не спеша сортировать индексы в таком архиве, с хранением в БД и возможностью перезапуска с продолжением.

На данный момент задача разбилась на несколько более мелких, самая крупная - 250 тысяч картинок (дальнейшее уменьшение пока не предвидится).


А вообще с этим архивом была мысль о возможности как-то использовать группировку картинок. Т.е. мысль - с одной стороны брать на сравнение случайные пары картинок, с другой стороны сравнивать между собой наиболее близких соседей одной картинки. Тогда и матрица смежности может быть разреженная, особенно если еще и удалить часть наиболее крупных весов.
А то действительно - если строить полную матрицу смежности это файлик ого-го какой большой будет

Хорошо, посмотрю LKH, реализация на C внушает доверие, только пока полностью не понял как ему данные подготовить.
0
Эксперт Python
 Аватар для Red white socks
4523 / 1899 / 336
Регистрация: 18.01.2021
Сообщений: 3,489
23.11.2022, 04:46
wingblack, а чем вам кластерный анализ не подходит?
0
294 / 265 / 48
Регистрация: 09.04.2013
Сообщений: 1,038
23.11.2022, 18:58  [ТС]
Цитата Сообщение от Red white socks Посмотреть сообщение
wingblack, а чем вам кластерный анализ не подходит?
Какие-то более конкретные предложения для данного случая ?
Обозрительно про кластеризацию знаю, но на практике не было необходимости использовать
0
Эксперт Python
 Аватар для Red white socks
4523 / 1899 / 336
Регистрация: 18.01.2021
Сообщений: 3,489
23.11.2022, 19:10
Цитата Сообщение от wingblack Посмотреть сообщение
Какие-то более конкретные предложения для данного случая ?
Куда уж конкретнее? Если вам надо сгруппировать картинки по степени схожести, то это кластерный анализ. Возможно я не правильно понял стоящую перед вам задачу.
0
294 / 265 / 48
Регистрация: 09.04.2013
Сообщений: 1,038
23.11.2022, 20:27  [ТС]
Цитата Сообщение от Red white socks Посмотреть сообщение
Если вам надо сгруппировать картинки по степени схожести, то это кластерный анализ.
Основная задача - создать список картинок где два соседа хоть немного "похожи" друг на друга.

Группировка по схожести - как идея чтобы пришлось вычислять и хранить меньше ребер. Но без опыта в кластеризации я не могу сказать что кластеризация тут применима. Ну не вижу я это в алгоритме "вычислить расстояние от текущей картинки А ко всем картинкам В(i), где В - картинки находящиеся в некотором радиусе от картинок С(j), где C - картинки в некотором радиусе от А"
Ну и да, тот момент что список или матрицу смежности еще надо построить, причем операция произвольного порядка чтения - весьма дорогая (но это так, к слову).
0
Эксперт Python
 Аватар для Red white socks
4523 / 1899 / 336
Регистрация: 18.01.2021
Сообщений: 3,489
23.11.2022, 20:47
Цитата Сообщение от wingblack Посмотреть сообщение
Основная задача - создать список картинок где два соседа хоть немного "похожи" друг на друга
Ну это вообще поиск гамильтонова цикла в графе, у которого соединены вершины, расстояние между которыми не превосходит какого-то заданного порога. Если же граф получается несвязным, там возможны варианты, насколько можно раздвигать "схожесть".
Цитата Сообщение от wingblack Посмотреть сообщение
Ну не вижу я это в алгоритме "вычислить расстояние от текущей картинки А ко всем картинкам В(i), где В - картинки находящиеся в некотором радиусе от картинок С(j), где C - картинки в некотором радиусе от А"
Думал, более-менее серьезная тема, но в таком ключе не готов поддерживать беседу. Не видите - ок, я откланиваюсь. Удачи!
0
294 / 265 / 48
Регистрация: 09.04.2013
Сообщений: 1,038
23.11.2022, 23:16  [ТС]
Цитата Сообщение от Red white socks Посмотреть сообщение
Думал, более-менее серьезная тема, но в таком ключе не готов поддерживать беседу. Не видите - ок, я откланиваюсь. Удачи!
Не знаю о чем вы подумали, это просто часть мысли про ограничение количества ребер в графе для уменьшения сложности TSP.

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



Что же до кластерного анализа, то, в моем понимании, кластеризация используется когда стоит задача разделить точки на небольшое количество групп. А тут, получается, или таких групп нет вообще (по условию задачи), либо нужно считать что каждая точка образует вокруг себя отдельную группу "лучшие друзья" (если интерпретировать мои предыдущие неполные формулировки), т.е. количество групп огромно, и вообще не вписывается в типичные примеры задач по кластеризации (группировке) точек.
Причем изначально у нас нет полной картины, поскольку вычисление весов полносвязного графа не только несколько долгая процедура, но и под сами веса потребуется достаточно много памяти, которой компьютер не сможет оперировать единовременно, а каждый раз запрашивать веса через базу данных - очередные накладные расходы.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.11.2022, 23:16
Помогаю со студенческими работами здесь

Задача коммивояжера
Задача коммивояжера: Обойти все города определив кротчайший путь (Алгоритм Дейкстры) ∞ 7 0 1 4 6 ∞ 4 7 0 0 6 ∞ 0 6 2 5 0 ∞...

Задачи коммивояжера
Здравствуйте. Помогите, пожалуйста, составить программу на python для следующей задачи. Муравьиный алгоритм (или алгоритм муравьиной...

Задача коммивояжёра
доброго всего, товарищи питонисты! делаю проект для 9 класса. Нужно решить задачу коммивояжёра. сейчас столкнулся с тем, что нужно...

Отображение графика в решении задачи с модулем SciPy
Здравствуйте, необходимо решить систему дифференциальных уравнений и построить график с модулями numpy, matplotlib.pyplot, scipy. ...

Задача 3. «Связанные модули»
Задание: Создать модуль MathRand содержащий функцию: • RND(N1,N2) – создает псевдослучайнoe числo из диапазона . Создать программу с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru