These forums have been archived and are now read-only.

The new forums are live and can be found at https://forums.eveonline.com/

Идеи и предложения

 
  • Topic is locked indefinitely.
123Next page
 

Поиск решения для оптимизации маршрутов более 10 пунктов...

First post
Author
BT-Volodya
TOPMO3A
#1 - 2013-09-15 14:20:06 UTC  |  Edited by: BT-Volodya
Здравствуйте!

В настоящий момент, пока я пишу этот пост, производится расчёт оптимального маршрута по 20 точкам внутри одного региона - наверно мне придется завершить процесс в менеджере задач.

Я не верю, что эту процедуру невозможно оптимизировать и сделать её работу быстрее, ну хотя бы в 100 раз.

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

Вообще-то, карта EVE глючит и зависает, при том что сама игра ещё продолжает работать - работы по оптимизации не мало...

Представляю первый вариант решения задачи, всё оказалось очень просто:
EVE-AutoPilot.RAR

Рабочий скрипт, работает бысро, без ошибок - "...\X3TC\scripts\*.xml", или "...\X3AP\addon\scripts\*.xml".
http://www.elite-games.ru/conference/viewtopic.php?p=2985962#2985962

Редактор скриптов X3:R/TC/AP:
X3TC - External Script Editor
Новые скриптовые команды. Справочник от 16.01.2009.
Человек это - "Космическая пчёлка"...
JIeoH Mocc
brotherhood of desman
#2 - 2013-09-15 14:30:15 UTC  |  Edited by: CCP Vesna Prishla
Нарушение правил общения не форуме — CCP Vesna Prishla
BT-Volodya
TOPMO3A
#3 - 2013-09-15 16:07:48 UTC  |  Edited by: BT-Volodya
JIeoH Mocc wrote:
Это где таких програмистов выпускают, которые не знакомы с Travelling Salesman Problem ...


Видимо профессиональным тролям всегда приходится подбирать все варианты поочереди, для достижения одного самого оптимального решения. Lol Если каждую систему снабдить специальными сгенерированными константами, то поиск оптимального маршрута можно ускорить в разы, избегая многих заведомо неудачных вариантов. Если у программы нет ни какого интелекта, то она будет считать все варианты по порядку - необходимо создать интеллектуальную систему оптимизации маршрутов, с применением различных ориентров и подсказок. Каких именно ориентиров и подсказок, предстоит выяснить в этой теме...
Человек это - "Космическая пчёлка"...
Elegbara
White Wolf Enterprises
#4 - 2013-09-15 16:42:08 UTC
Считаю данную тему очень нужной. Сам неоднократно сталкивался с упомянутой проблемой и крайне заинтересован в ее решении.

В смысле пытался реализовывать свой вариант решения traveling salesman-а (не для евы), получилось плохо. Если действительно есть методы оптимизации - давайте.

Open your eyes. And awaken.

BT-Volodya
TOPMO3A
#5 - 2013-09-15 22:06:41 UTC  |  Edited by: BT-Volodya
Elegbara wrote:
Считаю данную тему очень нужной. Сам неоднократно сталкивался с упомянутой проблемой и крайне заинтересован в ее решении.

В смысле пытался реализовывать свой вариант решения traveling salesman-а (не для евы), получилось плохо. Если действительно есть методы оптимизации - давайте.
Например:

В каждой системе массив с подсказками. Например список ближайших систем.

Регион "Verge Vendor*", созвездие "Kiartanne*", система "Jufvitte*".
0: Ячейка массива с информацией о системе.
1..X: Ячейки массива с укзателем на массив соседней системы.

Знак : - обозначает начало константы/переменной, или массива.
Знак ^ - обозначает константу/переменную указатель на объект.

Jufvitte*: (0:(0:("Jufvitte*"), 1:(Kiartanne^), 2:(Verge_Vendor^), 3:(+0.5), ...), 1:(Ouelletta^), 2:(Ansalle^), 3:(Scheenins^), 4:(Amygnon^))
Ouelletta*: (0:(0:("Ouelletta*"), 1:(Woenckee^), 2:(Verge_Vendor^), 3:(+0.4), ...), 1:(Jufvitte^), 2:(Melmaniel^), 3:(Loes^))
Ansalle*: (0:(0:("Ansalle*"), 1:(Kiartanne^), 2:(Verge_Vendor^), 3:(+0.6), ...), 1:(Jufvitte^), 2:(Gisleres^))
Scheenins*: (0:(0:("Scheenins*"), 1:(Kiartanne^), 2:(Verge_Vendor^), 3:(+0.5), ...), 1:(Vay^), 2:(Jufvitte^))
Amygnon*: (0:(0:("Amygnon*"), 1:(Kiartanne^), 2:(Verge_Vendor^), 3:(+0.6), ...), 1:(Jufvitte^))

Записи в списках могут быть структурированными, то есть не только идентификаторы систем, но и куча другой полезной информации. Структура массива может отличаться, в зависмости от применяемых приемов обработки, на вкус программиста (пока что для начала так). В результате мы имеем потенциальную "сетку" с неограниченной дальностью прыжков - дальность может быть бесконечной.
...
А-а-а, блин, весь этот теоретический трёп без конкретных данных ни чего не значит - нужно сначала список систем создать, что бы начать моделировать алгоритм. то что я тут ниже хотел выкинуть, это вооще полная фигня. Straight Не буду мозги пудрить, ни себе, ни людям, надо сперва составить базу данных в заданном формате, хотя бы одного региона (Verge_Vendor). Может быть у кого нибудь есть массивчик готовый? Blink
Человек это - "Космическая пчёлка"...
CVETOZAR
#6 - 2013-09-16 05:36:44 UTC
BT-Volodya wrote:
...Я программист, кто-то математик или может быть даже ...

Тебе, как программисту, должно быть знакомо понятие "дамп базы данных". Конструируем запрос - вуаля! Первая же ссылка! Внезапно.
JIeoH Mocc
brotherhood of desman
#7 - 2013-09-16 05:45:09 UTC  |  Edited by: ISD Rontea
Комментарий удален в соотвествии с нарушением 4 и 6 правил официального форума. ISD Rontea
BT-Volodya
TOPMO3A
#8 - 2013-09-16 06:48:28 UTC  |  Edited by: ISD Rontea
CVETOZAR wrote:
BT-Volodya wrote:
...Я программист, кто-то математик или может быть даже ...

Тебе, как программисту, должно быть знакомо понятие "дамп базы данных". Конструируем запрос - вуаля! Первая же ссылка! Внезапно.
Возможно это то, что надо - надо разбираться что это такое. На крайний случай мне придется состряпать такой массив старым дедовским методом. Idea Я хоть и программист, вот только давно не писал, к сожалению, но приемами и всякими языками владею не плохо. Так что не всё сразу - если что, в CCP я думаю найдётся хотя бы 1 доброволец, пока мым тут думаем над новой революционной идеей... Blink

Удалена цитата на неконструктивный комментарий. ISD Rontea
Человек это - "Космическая пчёлка"...
ISD Rontea
ISD STAR
ISD Alliance
#9 - 2013-09-16 07:14:15 UTC
Тема почищена от некоструктива, оффтопа и флуда. Напоминаю о соблюдении правил официального форума

ISD Rontea

ISD STAR Executive

Волонтёр группы по взаимодействию с игроками

Interstellar Services Department

Elegbara
White Wolf Enterprises
#10 - 2013-09-16 08:59:53 UTC
BT-Volodya wrote:
В каждой системе массив с подсказками. Например список ближайших систем.
Такой массив уже есть, что дальше?

Open your eyes. And awaken.

BT-Volodya
TOPMO3A
#11 - 2013-09-16 11:54:32 UTC  |  Edited by: BT-Volodya
Elegbara wrote:
BT-Volodya wrote:
В каждой системе массив с подсказками. Например список ближайших систем.
Такой массив уже есть, что дальше?
Он мне для колдовства очень нужен. Blink В голове не хватает оперативки, придётся делать классическим методом. Кстати, если бы получить массив всей галактики в формате представленном ниже, то можно было бы работать сразу по всей галактике.

Вот я сам только что состряпал массив региона - для вычислений пока нужны только 1, 2 и 3 столбцы, остальные пока предлагаю не трогать. Число "0" указывает на системы соседнего региона.

VergeVendor.csv
1;4;+0.9;Adallier;Anwyns;Verge Vendor;Alentene
2;0,0,12;+0.6;Aidart;Anwyns;Verge Vendor;Stacmon,Avaux,Cistuvaert
3;42,4,43;+0.9;Alenia;Anwyns;Verge Vendor;Tourier,Alentene,Vaere
4;36,3,29,12,43,1;+0.9;Alentene;Anwyns;Verge Vendor;Scolluzer,Alenia,Merolles,Cistuvaert,Vaere,Adallier
5;0,9,39;+0.4;Amoderia;Aideron;Verge Vendor;Pemene,Arraron,Stou
6;24;+0.6;Amygnon;Kiartanne;Verge Vendor;Jufvitte
7;27,11;+0.8;Annelle;Ancbeu;Verge Vendor;Masalle,Chesiette
8;24,2;+0.6;Ansalle;Kiartanne;Verge Vendor;Jufvitte,Gisleres
9;0,5,10,39;+0.5;Arraron;Aideron;Verge Vendor;Attyn,Amoderia,Chantrousse,Stou
10;0,9,32,41;+0.6;Chantrousse;Aideron;Verge Vendor;Ourapheh,Arraron,Osmomonne,Tierijev
11;7,35;+0.6;Chesiette;Ancbeu;Verge Vendor;Annelle,Reblier
12;19,4,2;+1.0;Cistuvaert;Anwyns;Verge Vendor;Eletta,Alentene,Aidart
13;43;+0.9;Channace;Anwyns;Verge Vendor;Eletta
14;19;+0.9;Clacille;Obray;Verge Vendor;Eletta
15;38,27;+0.7;Claulenne;Ancbeu;Verge Vendor;Sortet,Masalle
16;26;+0.8;Clellinon;Obray;Verge Vendor;Luse
17;28;+0.2;Costolle;Woenckee;Verge Vendor;Melmaniel,Muetralle
18;26,34;+0.8;Ekuenbiron;Obray;Verge Vendor;Luse,Raneilles
19;12,26,44,14;+0.9;Eletta;Obray;Verge Vendor;Cistuvaert,Luse,Vay,Clacille
20;21,4;+0.9;Ellmay;Kiartanne;Verge Vendor;Gisleres,Theruesse
21;36,8,20;+0.8;Gisleres;Kiartanne;Verge Vendor;Scolluzer,Ansalle,Ellmay
22;30,34,23;+0.4;Hevrice;Obray;Verge Vendor;Muetralle,Raneilles,Jovainnon
23;0,22;+0.3;Jovainnon;Obray;Verge Vendor;Aeschee,Hevrice
24;33,8,37,6;+0.5;Jufvitte;Kiartanne;Verge Vendor;Ouelletta,Ansalle,Scheenins,Amygnon
25;0,33;+0.3;Loes;Woenckee;Verge Vendor;Agoze,Ouelletta
26;19,18,44,16;+0.9;Luse;Obray;Verge Vendor;Eletta,Ekuenbiron,Vay,Clellinon
27;15,7;+0.8;Masalle;Ancbeu;Verge Vendor;Claulenne,Annelle
28;31,33,17;+0.3;Melmaniel;Woenckee;Verge Vendor;Murethand,Ouelletta,Costolle
29;0,42,4;+0.9;Merolles;Anwyns;Verge Vendor;Tar,Tourier,Alentene
30;22,17;+0.2;Muetralle;Woenckee;Verge Vendor;Hevrice,Costolle
31;0,0,28;+0.3;Murethand;Woenckee;Verge Vendor;Mesybier,Indregulle,Melmaniel
32;36,10,41;+0.8;Osmomonne;Aideron;Verge Vendor;Scolluzer,Chantrousse,Tierijev
33;24,28,25;+0.4;Ouelletta;Woenckee;Verge Vendor;Jufvitte,Melmaniel,Loes
34;18,44,22;+0.6;Raneilles;Obray;Verge Vendor;Ekuenbiron,Vay,Hevrice
35;0,11;+0.4;Reblier;Ancbeu;Verge Vendor;6-CZ49,Chesiette
36;4,21,32,38;+0.5;Scolluzer;Ancbeu;Verge Vendor;Alentene,Gisleres,Osmomonne,Sortet
37;44,24;+0.8;Scheenins;Kiartanne;Verge Vendor;Vay,Jufvitte
38;36,15;+0.8;Sortet;Ancbeu;Verge Vendor;Scolluzer,Claulenne
39;5,34;+0.5;Stou;Aideron;Verge Vendor;Amoderia,Arraron
40;20;+0.9;Theruesse;Kiartanne;Verge Vendor;Ellmay
41;0,0,10,32;+0.8;Tierijev;Aideron;Verge Vendor;Tannolen,Derririntel,Chantrousse,Osmomonne
42;0,0,3,29,13;+0.9;Tourier;Anwyns;Verge Vendor;Yulai,Diaderi,Alenia,Merolles,Channace
43;3,4;+0.8;Vaere;Anwyns;Verge Vendor;Alenia,Alentene
44;37,19,26,34;+0.8;Vay;Obray;Verge Vendor;Scheenins,Eletta,Luse,Raneilles

Исправил ошибки в массиве...
Человек это - "Космическая пчёлка"...
Demonos 555
Lunam-Corp
#12 - 2013-09-16 12:44:49 UTC  |  Edited by: Demonos 555
У меня никогда проблем с расчётом маршрута не было. И 20 и 30 станций в маршруте были, расположенные в разных концах.

может ты галочку поставил "избегать систем, где были уничтожены капсулы?"

Кстати, никогда не интересовался, а расстояние между системами в ЕВЕ везде "одинаковое"? т.е. зависит только от скорости загрузки информации о системе?


p.s. Вообще, список в студию. Давай я тоже в том же порядке загоню и попробую оптимизировать в ЕВЕ, для чистоты эксперимента.


p.s.2 смотрите стандартную транспортную задачу, только из неё объемы перевозок выкиньте (вам только расчет оптимизации пути нужен, без учета объемов доставки товара) или задача коммивояжёра еще называется. И не забывайте, что у вас 2 этапа: 1 - определение минимального количества прыжков между конкретными точками (всеми точками и всех путей), 2 - выбор оптимального пути.
BT-Volodya
TOPMO3A
#13 - 2013-09-16 15:11:45 UTC
Demonos 555 wrote:
p.s. Вообще, список в студию. Давай я тоже в том же порядке загоню и попробую оптимизировать в ЕВЕ, для чистоты эксперимента.
Самые обычные настройки, и галочек стоит только на "черный список" и "0.5-1.0", но и это можно убрать - не принципиально, так как меня интересовал именно расчёт пути по региону VergeVendor, для планового скана секторов на аномалии. Задяча элементарна, но игра зависает и ни в какую не хочет считать путь.

Список прост уже есть, пожалуйста, выберай 12-44 сисем и вперёд, старт желательно в Jufvitte*, и только в хайсеке...
Человек это - "Космическая пчёлка"...
BT-Volodya
TOPMO3A
#14 - 2013-09-17 13:14:39 UTC  |  Edited by: BT-Volodya
Готов первый вариант алгоритма. Представил ввиде схемы на картинке и наглядного текстового описания алгоритма.
Писать самостоятельную программу смысла нет, так как вопрос оптимизации решается всего одной несложной процедурой...

EVE-AutoPilot.RAR
Человек это - "Космическая пчёлка"...
Elegbara
White Wolf Enterprises
#15 - 2013-09-17 20:44:19 UTC
Посмотрел "алгоритм". По-моему это обычный жадный алгоритм. Где оценка скорости работы (мне кажется, О(n!))?

Open your eyes. And awaken.

BT-Volodya
TOPMO3A
#16 - 2013-09-17 22:53:23 UTC  |  Edited by: BT-Volodya
Elegbara wrote:
Посмотрел "алгоритм". По-моему это обычный жадный алгоритм. Где оценка скорости работы (мне кажется, О(n!))?
Плохо смотрел, в настоящее время в EVE как раз такой алгоритм как ты намекаешь. У меня всё гораздо быстрее. Сделай массив на 20 точек маршрута, как показано в примере, и я тебе своими мозгами, без всяких программ максимум за 1 час (ну, возможно больше) составлю кротчайший маршрут. Прогамма это сделает за 1 секунду, и даже быстрее...

Давай сделай это, перешагни через догмы авторитетов. Idea

P.S.
20 -> n! = 2432902008176640000 комбинаций - а я согласен решить эту задачу своими мозгами в блокноте... Blink

Вот ещё пимер:
6 -> n! = 720 - у меня в процедуре с первой попытки предльный результат...
Человек это - "Космическая пчёлка"...
Elegbara
White Wolf Enterprises
#17 - 2013-09-18 08:43:47 UTC
Готов еще раз посмотреть, если будет выложено в более удобоваримом виде. Рарник где-то там - неудобно. Гугл-докс?

Open your eyes. And awaken.

BT-Volodya
TOPMO3A
#18 - 2013-09-18 09:43:26 UTC  |  Edited by: BT-Volodya
Elegbara wrote:
Готов еще раз посмотреть, если будет выложено в более удобоваримом виде. Рарник где-то там - неудобно. Гугл-докс?
Вообще-то "Яндекс Диск", в архиве картинка *.png и текстовый файл *.txt в кодировке Win1251.

Куда выложить? Хотя я из принципа не стану регистрироваться на большинстве файлообменниках. ВКонтакте подойдёт?
Я не понимаю, что значит "в удобоваримом виде"? Тут задачка решается в текстовом режиме, максимум за 5-10 минут...

Elegbara wrote:
В смысле пытался реализовывать свой вариант решения traveling salesman-а (не для евы), получилось плохо.
Это наверно была X3:R/TC/AP ?
Человек это - "Космическая пчёлка"...
Elegbara
White Wolf Enterprises
#19 - 2013-09-18 15:03:45 UTC
BT-Volodya wrote:
Вообще-то "Яндекс Диск", в архиве картинка *.png и текстовый файл *.txt в кодировке Win1251.
Да-да. И к счастью для меня "Яндекс.Диск" умеет сам раскрывать рар-архив, а то я понятия не имею, чем такое открывать. И даже браузер понял кодировку.

BT-Volodya wrote:
Куда выложить? Хотя я из принципа не стану регистрироваться на большинстве файлообменниках. ВКонтакте подойдёт?
drive.google.com Что за ВКонтакте...
Ок, знаю, даже регистрировался.
BT-Volodya wrote:
Я не понимаю, что значит "в удобоваримом виде"? Тут задачка решается в текстовом режиме, максимум за 5-10 минут...
В виде программы. И считать количество итераций. И перебрать все возможные варианты входных данных, чтобы честно посчитать количество операций. Я может быть не смогу придумать контрпример, но возможно такой существует.

Если программу писать не хочется - давайте алгоритм, я напишу программу.

BT-Volodya wrote:
Elegbara wrote:
В смысле пытался реализовывать свой вариант решения traveling salesman-а (не для евы), получилось плохо.
Это наверно была X3:R/TC/AP ?
Нет, Divide&Conquer. Старая, давно.

Open your eyes. And awaken.

BT-Volodya
TOPMO3A
#20 - 2013-09-18 16:47:48 UTC  |  Edited by: BT-Volodya
Elegbara wrote:
В виде программы. И считать количество итераций. И перебрать все возможные варианты входных данных, чтобы честно посчитать количество операций. Я может быть не смогу придумать контрпример, но возможно такой существует.

Если программу писать не хочется - давайте алгоритм, я напишу программу.
Пойми меня правильно: Да я программист, да я знаю кучу языков, да я могу написать программу, но в данный момент только под MS-DOS (тупо нечем компилить), и это долго, потому что нужно вспоминать кучу нюансов, что бы начать такую программу с нуля. Я мог бы состряпать такое на CMDшнике, он бы справился с этой мелочевкой...

Алгоритм на пальцах разжеван в тексте, уж там-то всё элементарно. Сначала спрашиваем у всех пар-точек длину связей, в прыжках (на 6 точек их всего 21), затем сортируем полученные массивы как в колонке №3 (№1 и №2 для смысловой наглядности о содержимом массива №3). Далее просто начинаем стряпать маршрут из самых коротких прыжков, которые все в начале массива - делов, тьфу, на один цикл. Из 6 точек, за 6 ходов, сляпал кротчайший маршрут. Blink

Структуру маршрута задает первая пара-точек - как в примере, первым по списку оказался 0-1, вторым 0-6. Всё, достаточно 6 вариантов перебрать, и выбрать самый короткий, который скорей всего будет первым по очереди. Короче, потенциально самых коротких маршрутов не более 6, то есть не более числа заданных точек маршрута. 6 точек - 6 циклов. 20 точек - 20 циклов. (судоку и то сложнее) но самый оптималный чаще всего будет встречаться в самом начале процедуры, в первых циклах...
Человек это - "Космическая пчёлка"...
123Next page