|
Решил сравнить библиотеки для работы с графами.
|
|||
---|---|---|---|
#18+
Составил список. GraphT JUNG Guava Apache Commons Graph GRPH По результатам - отпишусь. Для себя я просто поищу тривиальные штуки типа объекты в базе (tables, fields, indexes, triggers, contraints, views) и представлю их как вершины. А связи между ними - как ориентированные рёбра. И простейшие запросики типа кто зависит от таблички и тому подобное. Составлю табличку фичей. Типа там.... Реализован или нет коммивояжер или метод кратчайших путей. Если кто-то хочет что-то узнать по имплементированным алгоримам - пишите. Возможно я парарллельно посмотрю. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2018, 15:06 |
|
Решил сравнить библиотеки для работы с графами.
|
|||
---|---|---|---|
#18+
Упрощение, кластеризация графа. Пример из жизни. Есть 5-6 тысяч аэропортов (вершины графа), есть около 50-60 тыс. регулярных авиаперелетов (в один день) между этими аэропортами (ребра графа) Искать маршрут Нижне Вартовск - остров Лимпопо (с населением 100 чел и взлетной площадкой для самолетов наркоторговцев), больно накладно. Значительно проще провести кластеризацию графа, т.к. 99 % международных рейсов выполняет 100-130 наиболее крупных аэропортов (скажем первая сотня + еще пара десятков хабов типа Пулкова /который вообще где-то 200 по рейтингу/ или Новосибирск) Т.ч. проще найти Нижне-Вартовск - Ханты-Мансийск - [Москва] - Хельсинки - [Сингапур] - и дальше на кокурузниках до вожделенной травки ))) В общем, хотелось бы граф "кластеризировать" (в случае с аэропортами это банально проделали руками "на глазок" из 5 тыс. аэропортов оставив около 130-140 "хабов"). p.s. Вики уверет, что в одних США - 13 513 аэропортов. Но это какое-то вранье. "действующих" аэропортов + железнодорожных пересадок (c IATA кодами) по миру в районе 5-6 тыс. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2018, 15:42 |
|
Решил сравнить библиотеки для работы с графами.
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev, я понял вашу задачу на человеческом уровне. Но что-то мне подсказывает что для кластеризации нужен еще какой-то критерий. Типа этих 130 аэропортов. Тоесть взять граф где вершины - аэропорты. И выкинуть все незначимые. А по поводу рейсов.... я не знаю к чему их прикрутить. Но я посмотрю. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2018, 15:52 |
|
Решил сравнить библиотеки для работы с графами.
|
|||
---|---|---|---|
#18+
maytonНо что-то мне подсказывает что для кластеризации нужен еще какой-то критерий. Типа этих 130 аэропортов. Тоесть взять граф где вершины - аэропорты. И выкинуть все незначимые. А по поводу рейсов.... я не знаю к чему их прикрутить. Но я посмотрю. AFAIK в данном случае критерий: сократить граф до минимума, оставив максимум взаимосвязей Пусть при 6 тыс вершин у нас 60 тыс ребер Если сокрашаем граф до 400 аэропортов, то остается 38 тыс ребер Если до 200 аэропортов, то 35 тыс Если до 130 аэропортов, то 30 тыс. Если до 100 аэропортов, то 20 тыс. Исходя из этой статистики, "на глазок", считаем что 130 аэропортов выгодно по сравнению со 100 (+30% аэропортов +50% связей) А 400 совершенно излишне (+400% аэропортов +<100% связей по сравнению со 100; и +100% аэропортов +8% связей по сравнению с 200) Наиболее критичное требование - общая связность не должна понизится. Т.е. после упрощения, не должно быть аэропортов до которых вообще не долететь. На самом деле, кол-во до которого сокращать, было принято исходя из аппаратно-временно-денежных ограничений + примерно минимально достаточно для сохранения связности. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2018, 16:40 |
|
Решил сравнить библиотеки для работы с графами.
|
|||
---|---|---|---|
#18+
Леонид. Начал изучать JUNG. Уже устал. В принципе мои задачи джунг уже покрывает. Единственное. Я не нашел красивого DSL-подобного языка запросов наподобие того как я видел в Neo4j. По поводу алгоритмов кластеризации. Джунг поддерживает их 4 штуки. http://jung.sourceforge.net/doc/api/index.html BicomponentClusterer<V,E> - Finds all biconnected components (bicomponents) of an undirected graph. EdgeBetweennessClusterer<V,E> An algorithm for computing clusters (community structure) in graphs based on edge betweenness. VoltageClusterer<V,E> Clusters vertices of a Graph based on their ranks as calculated by VoltageScorer. WeakComponentClusterer<V,E> Finds all weak components in a graph as sets of vertex sets. К сожалению моего уровня владения теорией графов и техническими терминами не хватает чтобы решить - это оно или не оно. Я должен что-то почитать и подготовиться. +Есть некая терминологическая путаница. Где-то вершина это Node, где-то Vertex. +Гуглу при поиске надо дополнительно указывать что Graph - это не графика а математика. Вобщем фильтровать поиск т.к. находит много нерелевантного материала. По поводу других библиотек. Они достаточно однородны в работе с графами. Почти везде API - похожий. Код: java 1. 2. 3. 4. 5. 6.
В некоторых - я так и не понял как дёрнуть конструктор графа. Не везде он публичный. Где-то работают фабрики через пятое или десятое колено родственных связей. Вобщем надо копать. Apache Commons Graph - предположительно не поддерживает дженерики. Надо проверять. C GRPH - были проблемы с удалённым репозитарием. Он не был индексирован в центральном. Актуальная версия номер 2 отсутствовала и мне пришлось ходить в веб-порт его собственного централа чтоб подсмотреть какая щас актуальная последняя релизная. +Перспективной выглядит библиотека yWorks, у нее богатые возможности по визуализации (я пользуюсь ихним редактором yEd для рисования диаграмм) но есть подозрение что она платная. Еще не проверял. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2018, 23:23 |
|
Решил сравнить библиотеки для работы с графами.
|
|||
---|---|---|---|
#18+
У JGraphT не нашел кластеризации. Ну... по крайней мере среди сущностей такого ключевого слова не было. Зато были: клики, потоки, раскраска, циклы, изоморфизм, какой-то "скоринг", разделение, и пути. Дополнительно рекламируется тесная интеграция с графической библиотекой JGraphX. В учебном семпле приведена серализация двух графов в текстовое представление подозрительно похожее на GraphViz (это отдельный тул для визуализации). Можно это проверить. Будет удобно в качестве отладки. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.06.2018, 01:41 |
|
Решил сравнить библиотеки для работы с графами.
|
|||
---|---|---|---|
#18+
GRPH - настоящее ископаемое. В исходниках встречаются каменты датирующиеся 1998 годом. Это спустя 2 года (!) после создания первого релиза Java компиллятора. Пилят это французы из университета INRIA. Знатное местечко... хм. Это толстая либа. В ней упаковано порядка 1.5 тысячи исходных файлов по количеству штук. Я был в большой обиде что чортовы созатели упаковали сорцы не по феншую как положено в maven-src а свалили все в одну кучу. Из за этого мышко-клик по бинарнику не подсвечивает исходный код но если распаковать jar то сорцы вроде в наличии но надо перепаковать как-то получше. Сущности для кластеризации там встречаются но.. выглядят как абстрактные классы... вобщем надо разбираться. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.06.2018, 02:05 |
|
Решил сравнить библиотеки для работы с графами.
|
|||
---|---|---|---|
#18+
Guava common.graph (GCG) У нее - самая приятная и понятная структура. Мультиграф правда там выделен в отдельный базовый класс и называется Network. Бегло просмотрел бинарники. Алгоритмов не видно вообще. В недрах документации есть отсылки на Джунг и Граф-Т и есть хорошие новости на тему переноса части функционала JUNG под интерфесы Guava (common.graph). Я приведу фрагмент картинки с базовыми интерфейсами GCG которые мне показались наиболее значимыми. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.06.2018, 19:40 |
|
Решил сравнить библиотеки для работы с графами.
|
|||
---|---|---|---|
#18+
Apache commons-graph. Я уделил ей 10 минут. И больше смотреть не буду. Декларация интерфейсов соответствует примерно Java 1.4. Дженериков нет. Вобщем производит впечатление заброшенного проекта. Некоторые алгоритмы есть. По крайней мере DFS (поиск в глубину), Minimum Spanning Forest. Вобщем по ней уже готов вердикт. Не используйте! ... |
|||
:
Нравится:
Не нравится:
|
|||
28.06.2018, 20:33 |
|
Решил сравнить библиотеки для работы с графами.
|
|||
---|---|---|---|
#18+
maytonНе используйте!Если проект так и не выполз из песочницы за семь лет - ясен перец, что не надо его использовать. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2018, 00:03 |
|
Решил сравнить библиотеки для работы с графами.
|
|||
---|---|---|---|
#18+
Хм.. Гуава подбила меня на взлёте. Нужно проверять достижимость для вершин орграфа типа MutableNetwork<V,E> А у нее в утилитах есть только проверка Graph<V> Код: java 1.
Код: sql 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2018, 01:29 |
|
Решил сравнить библиотеки для работы с графами.
|
|||
---|---|---|---|
#18+
Добавлю еще сюда: Neo4j. Это блин целая DBMS. Но пускай будет Apache Jena. Тоже очень мощная штука. Фактически фреймворк для работы с RDF. Почти графы. Но цели - несколько иные. RDF4j. Те-же яйца. Похожа на Jena по своему назначению. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2019, 02:21 |
|
Решил сравнить библиотеки для работы с графами.
|
|||
---|---|---|---|
#18+
maytonСоставил список. GraphT JUNG Guava Apache Commons Graph GRPH По результатам - отпишусь. Для себя я просто поищу тривиальные штуки типа объекты в базе (tables, fields, indexes, triggers, contraints, views) и представлю их как вершины. А связи между ними - как ориентированные рёбра. И простейшие запросики типа кто зависит от таблички и тому подобное. Составлю табличку фичей. Типа там.... Реализован или нет коммивояжер или метод кратчайших путей. Если кто-то хочет что-то узнать по имплементированным алгоримам - пишите. Возможно я парарллельно посмотрю. Вы бы не могли отписаться под какие задачи Вы собираетесь использовать решения на графах. Часто обычный жадный алгоритм Дейкстры или А* вполне так срабатывает. https://www.geeksforgeeks.org/greedy-algorithms/#greedyAlgorithmsInGraphs ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2019, 06:39 |
|
Решил сравнить библиотеки для работы с графами.
|
|||
---|---|---|---|
#18+
Топик тематически связан с https://www.sql.ru/forum/1306465/sparql-rdf-tehnologii-semanticheskogo-poiska-aws-neptune ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2019, 09:31 |
|
Решил сравнить библиотеки для работы с графами.
|
|||
---|---|---|---|
#18+
maytonТопик тематически связан с https://www.sql.ru/forum/1306465/sparql-rdf-tehnologii-semanticheskogo-poiska-aws-neptune Все это больше похоже на то, что Вы пытаетесь прокачать какой-то скилс для резюме. На самом деле это не очень часто хорошо срабатывает. Вам надо постараться найти задачу которую подобного рода технологии решают. У меня есть занятная статья в блоге на несколько близкую тему - я ее написал исключительно из любви к искусству гляньте может понравится https://vyatkins.wordpress.com/2018/07/03/predix-asset-store-model-viewer/ ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2019, 10:50 |
|
Решил сравнить библиотеки для работы с графами.
|
|||
---|---|---|---|
#18+
Задача уже есть. И она в продуктиве. Но по я не могу называть здесь заказчика и прочие детали. Надеюсь понимаете. Вообще в топиках я стараюсь охватить несколько целей. Иногда - получается. Иногда нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2019, 10:56 |
|
Решил сравнить библиотеки для работы с графами.
|
|||
---|---|---|---|
#18+
Спасибо за статью. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2019, 13:40 |
|
Решил сравнить библиотеки для работы с графами.
|
|||
---|---|---|---|
#18+
Leonid KudryavtsevAFAIK в данном случае критерий: сократить граф до минимума, оставив максимум взаимосвязей Сортируете узлы по количеству связей и отрезаете всё, где связей меньше порога. Порог выбирается отдельным алгоритмом. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2019, 14:49 |
|
Решил сравнить библиотеки для работы с графами.
|
|||
---|---|---|---|
#18+
alex55555Leonid KudryavtsevAFAIK в данном случае критерий: сократить граф до минимума, оставив максимум взаимосвязей Сортируете узлы по количеству связей и отрезаете всё, где связей меньше порога. Порог выбирается отдельным алгоритмом.Нельзя так упрощать. Вы порежете мостовые рёбра и получите два несвязных графа. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2019, 15:53 |
|
Решил сравнить библиотеки для работы с графами.
|
|||
---|---|---|---|
#18+
maytonСпасибо за статью. Я провел свое исследование и написал код в пику нашим архитекторам которые изучали на тот момент gremlin https://tinkerpop.apache.org/gremlin.html К слову сказать для некоторых задач гремлин не так уж плох, но там была серьезная затыка на тот момент год назад решение не маштабировалось в нужном порядке. На самом деле смотря какой стек Вы хотите избрать гремлин в общем-то неплох в базовой идеи ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2019, 23:55 |
|
Решил сравнить библиотеки для работы с графами.
|
|||
---|---|---|---|
#18+
Ап. Привет друзья. Что изменилось? Какие новости по графам. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2020, 21:55 |
|
Решил сравнить библиотеки для работы с графами.
|
|||
---|---|---|---|
#18+
mayton Ап. Привет друзья. Что изменилось? Какие новости по графам. А какие новости должны быть? Тема стухла в 980 г.г. прошлого тысячелетия. :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2020, 08:19 |
|
Решил сравнить библиотеки для работы с графами.
|
|||
---|---|---|---|
#18+
Моя предыдущая тема - стухла. Амазонский Нептун не взлетел. Но уже не по нашей вине а просто кастомер отказался от проекта. А тему я поднял в продолжение https://www.sql.ru/forum/1282300-14/chetvergovyy-arhivarius когда понял что я стал реализовывать свою библиотечку для работы с графами. К моему вящему ужасу когда я ищу ответы на важные вопросы ... нахожу - свои же собственные топики с ответами на них. Вот такой вот парадокс. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2020, 09:05 |
|
Решил сравнить библиотеки для работы с графами.
|
|||
---|---|---|---|
#18+
mayton Моя предыдущая тема - стухла. Амазонский Нептун не взлетел. Но уже не по нашей вине а просто кастомер отказался от проекта. А тему я поднял в продолжение https://www.sql.ru/forum/1282300-14/chetvergovyy-arhivarius когда понял что я стал реализовывать свою библиотечку для работы с графами. К моему вящему ужасу когда я ищу ответы на важные вопросы ... нахожу - свои же собственные топики с ответами на них. Вот такой вот парадокс. С графами проблема в том, что рано или поздно все сводиться к комбинаторным задачам на графах, типа поиска путей (например задача Коммивояжера). Как выяснили в 980-х годах прошлого тысячелетия все они приводят к комбинаторному взрыву и эксподенциальному росту сложности задачи. При этом "точные" оптимизации дают линейное уменьшение сложности задачи. Я в 990-е г. прошлого тысячилетия работал по теме "Комбинаторные задачи на графах с нетривиальными группами автоморфизмов". В общем после анализа источников, понял, что дело тухлое. В 990-е года прошлого тысячилетия стали искать "не точные" решения, типа генетических алгоритмов, нечетких множеств. Щас вот взлетели нейронные сети. Т.е. для лабораторных задач графовые БД ещё как-то работают. На реальных проектах все решения стремятся к бесконечности. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2020, 06:43 |
|
Решил сравнить библиотеки для работы с графами.
|
|||
---|---|---|---|
#18+
Да мне пока не вычислять. Пока хочеться взглянуть глазами на граф в 50 000 вершин. Найти в нем глазами наиболее мощные вершины. Подвигать их мышкой. Может как-то вовращать весь граф. Расплющить его на плоскости. Еще хотелось-бы например красным цветом отметить наиболее весовые рёбра (weight > x) или как-то толстой линией их изобразить. А запросы пока у меня простые. Никаких тут коммивояжеров нету пока. Просто поиск топ 10 мощных вершин. Топ 10 весомых рёбер. Соединить их в подграф. Отфильтровать только это (как-бы такая клика). Увеличить на экране. Нет. Я не хочу сказать что мне нужна только визуализация. Я посмотрел видосы по gremlin/tinkerpop. Неплохо выглядит. Тоже пригодится. Но просто как способ выборки. Вобщем вот такое вот хочу. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2020, 12:14 |
|
|
start [/forum/topic.php?fid=59&fpage=12&tid=2120691]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
70ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
79ms |
get tp. blocked users: |
2ms |
others: | 297ms |
total: | 493ms |
0 / 0 |