Vlæd
О, а с каких пор про witness passing говорят "работает", а не "будет работать"?
Я вот с этим ковырялся - https://github.com/dotnet/fsharp/issues/9523 Ну и постепенно залез в witness generation.
Anonymous
А в Б
Ayrat
Не совсем. Алгоритм-то такой и останется, потому что другого нет (и едва ли мы придумаем). Партицировать можно следующим образом: каждая нода имеет полную копию графа (хуй с ним на память) и отвечает на вопрос: ДАЙ МНЕ КРАТЧАЙШЕЕ РАССТОЯНИЕ ОТ А В Б?
Я вижу это так (но я не эксперт) Есть очень приблизительный граф с тысячей точек. Он находит маршрут по ним и далее отдаёт каждый участок своему обработчику который уточнит маршрут на конкретном участке. Эти воркеры тоже могут работать не с полным графом а чуть более точным, но не 120к точек. И так далее, пусть будет 5 уровней "разрешения", где на каждом этапе мы считаем что-то быстро приблизительно, а потом досчитыаваем и уточняем детали параллельно
Anonymous
Ты знаком с фреймворками для агентского моделирования? Он в режиме симуляции разных условий решает логистическая задачу. И там все, что может параллелиться это делает.
Ayrat
Типа в начале мы берём граф городов. Далее уточняем по графу крупных дорог между городами. Далее по графу улочек и объездов локальных на частях участка
Doge
Помогайте, умные головы. Я в Уклоне в отделе RND, конкретно сейчас занимаюсь улучшением расчетов кратчайших путей от водителя до заказчика(ков) в режиме псевдореального времени (шаг планируется каждые 1 или, в худшем случае, 3 секунды). Дорожный граф того же Киева предполагает 120 тысяч вершин и это картографы еще жадничают, т.е. потенциально количество вершин может дойти и до 250 тысяч. Есть разновидность Дейкстры, основанной на геоэвристике, который сейчас НЕ будем обсуждать, он есть и считаем что он работает хорошо, он стремится к *линейному* времени, что очень хорошо, все рады, все довольны. Но 250 тысяч это все равно, даже для этого алгоритма, очень много. Поэтому есть этап пре-обработки дорожного графа, а именно - разделение вершин на первичные и вторичные, чтобы кратчайший путь считать только между парами первичных вершин. То есть, все то же самое, просто граф будет меньше. И вот это сейчас болит.
А может взять какой-нибудь вариант дейкстр под большие графы? (Конкретный вне контекста бессмысленно указывать, надо выбирать под ваши нужды, там куча трейдоффов)
Doge
Таких вариантов дейкстр под крупные графы очень дофига и все они есть в литературе
Ayrat
Вот мне тоже кажется что уже должно быть все прокушано умными головами
Doge
Плюс ещё важный вопрос как именно алгоритм реализован в коде, на таких объемах это имеет значение
Anonymous
Таких вариантов дейкстр под крупные графы очень дофига и все они есть в литературе
Забудь про Дейкстру на минутку, сейчас упомянутую мной разновидность Дейкстры апрувнули специально нанятые для этого математики, у меня даже нет власти это отменить на данном этапе. Но они хотят Дейкстру считать не на графе в 250к вершин, а сперва его «разрядить», разметив вершины на первичные и вторичные (по принципу радиуса). И вот ту. Про лема.
Anonymous
(Сейчас вот тут проблема).
Anonymous
То есть, в будущем ещё дохуя проблем.
Anonymous
Но я решаю сейчас конкретно эту.
Anonymous
Ну ок, а как именно вы вершины размечаете? Как, например, происходит нахождение вершин в радиусе от данной первичной?
Есть геоиндекс, который отвечает на вопрос дай мне все вершины, в таком-то радиусе, с учетом кривизны Земли. Он работает очень быстро и считается заранее, т.е. на момент разметки он уже есть и считай, что стоит O(1). Дальше вычисляется реальное, а не эвклидово (с учетом радиуса кривизны нашей чудесной планеты) расстояние от текущей (еще не размеченной) вершины до всех уже найденных (первая принудительно в крайней левой точке, например). Если текущая точка в радиусе уже известной первичной, она маркируется как принадлежащая ей; если в радиусе нескольких привичных, есть детерменированное правило, по которой выигрывает строго одна из первичных; если после расчета реального пути список ближайших первчиных пуст, она сама становится первичной. Примерно так.
Anonymous
Но это как раз можно пробовать по-разному.
Vasily
Disjoint set, шоле?
Anonymous
Disjoint set, шоле?
мая твая не понимать
Doge
Это не должно быть 700 вершин в час
Vladislav
мимокрокодил что внутри говнокод, отправляюсь дальше
Vasily
700 в час выглядит как то, что где-то хэшсет забыли
Vasily
А ищут по списку
Vasily
В это я могу поверить
Anonymous
Это работает не так быстро из-за расчета реального расстояния по графу. То есть, геоиндекс тебе возвращает { A, B, C, D }, но теперь тебе надо рассчитать реальное расстояние (текущая_врешина, A), (текущая_вершина, B)... на графе в 120к вершин и 300к ребер. Даже оптимизированный Дейкстра (которого математики подсунули), не выгребает быстрее чем 700 в час при загрузке CPU 70-80%
Anonymous
А обычный Дейкстра.. ну месяц считать будет минимум.
Anonymous
Но говнокода там дохуя, конечно, я ж не отрицаю
Anonymous
Просто он не даст такой выигрыш, чтобы с 700 в час на 20к в час.
Anonymous
А даже 20к в час это для Киева 120 / 20 = 6 часов на импортинг
Anonymous
Это дохуя
Anonymous
Надо прям реальное и все тут
Anonymous
Бизнес платит (с)
Vasily
А у вас веса ребер меняются?
Doge
Надо прям реальное и все тут
А почему не объяснили им, что они ебанаты и кусок метра им роли не сыграют?
Anonymous
А почему не объяснили им, что они ебанаты и кусок метра им роли не сыграют?
Они знают, им побоку, я не на тех должностях, меня туда не зовут
Anonymous
Я один из тех, кто рулит реализацией РНД технически
Vasily
Задача коммивояжера
Anonymous
т.е. на мне стэк, решения, пробить дорогу, а дальше уже другая команда будет делать
Vasily
Тебе прямо самое оптимальное?
Anonymous
Тебе прямо самое оптимальное?
Ну мне надо заимпортить размеченный граф максимум за два часа. Лучше за полчаса. У меня нет проблем с количеством машин и их качеством.
Anonymous
Надо понять какую мне взять технологию, чтобы легко и быстро распараллелить это дело
Anonymous
RND фриендли
Aleksander
для spark'а есть graphx, он умеет с большими графами работать
Aleksander
но он скорее для каких-то глобальных алгоритмов на графах - посчитать pagerank и т.п.
Vasily
А сколько циклов получается?
Doge
Просто он не даст такой выигрыш, чтобы с 700 в час на 20к в час.
Вполне может. Снимите профиль вначале чем что-то параллелить
Anonymous
Не, они все отсасывают, потому что не учитывают геопозицию вершины. А есть эвристика, разновидность А*, которая на каждой итерации берет в расчет не просто текущий минимум по весу ребер, но плюсует туда прямую линию до таргета. Т.е. это оптимизация, которая дает статестический эффект. Прямая линия считается тривиальным образом от геоточки до геоточки.
Anonymous
Но эффект очень хороший.
Anonymous
Собственно, там целая команда математиков в два чесловека сидит и вот это дело ковывряет.
Doge
Они знают, им побоку, я не на тех должностях, меня туда не зовут
И да, реальное расстояние можно по разному считать. Как точно считается?
Anonymous
И да, реальное расстояние можно по разному считать. Как точно считается?
В смысле? Как это по разному? Есть путь в графе, у каждого ребра свой вес, сумма весов есть стоимость пути.
Vasily
Лол
Vasily
Отсечка есть?
Vasily
По макс длине
Vasily
Типа не больше чем в два раза длиннее, чем прямая
Anonymous
Так это ты опять про кратчайший путь. Забей ты пока на это, сначала граф разметить надо.
Doge
В смысле? Как это по разному? Есть путь в графе, у каждого ребра свой вес, сумма весов есть стоимость пути.
Погоди тут про другое речь: ты написал, что вычисляется реальное расстояние с учётом кривизны для каждых из пар найденных индексом точек и что оно и тормозит
Vasily
Или что
Vasily
Или кластеризовать
Anonymous
Погоди тут про другое речь: ты написал, что вычисляется реальное расстояние с учётом кривизны для каждых из пар найденных индексом точек и что оно и тормозит
Да считай для простоты, что это обычное эвклидово расстояние без кривизны, похуй на геометрию, по сути это просто эврестика, т.е. функция, которая дает какой + к текущему весу с целью улучшить статистику. Как считается я точно не помню, там это один раз кто-то реализовал и забыл, это обычная математическая функция со всякими атанами и синусами, если память не изменяет.
Vasily
@vshapenko
Странный подход
Doge
Честный расчет расстояний с кривизной нифига не дешёвый
Anonymous
Странный подход
Почему? Это пре-обработка графа. Те же самые алгоритмы на выходе будут по расчету пути, просто не на 120к вершин, а на 30к вершин.
Anonymous
Честный расчет расстояний с кривизной нифига не дешёвый
Да, но на данном этапе по условиям задачи можно допустить, что эвристика О(1)
Anonymous
А Яндекс как делает, интересно?
Меня там не было, ты был?
Vasily
Нет
Vasily
Вот мне и интересно
Anonymous
Думаю, что так же
Doge
Опять-таки, что кажет профиль
Doge
Ну бессмысленно без профиля вообще говорить о перформансе
Vasily
А ежели Киев разбить на квадраты, что будет?