Содействие - исключение из 3-го закона Ньютона.

Амальгама

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Амальгама » Лукоморье 2.0 » Другая тень


Другая тень

Сообщений 391 страница 420 из 1000

391

https://otvet.imgsmail.ru/download/2437851_13f243eb40a75dba497cf4b632b32a85_800.gif

+1

392

#p108438,DoctorLector написал(а):

Эфир, хлороформ или хлорэтил какой-нибудь, это лучше у Загара уточнить, потому что у него семеро он химик.

Спирт. Водный раствор. Под хорошую закусь. Вместо всех этих глупостей.

+1

393

А чего ты сразу с козырей заходишь?

0

394

#p108587,Zagar написал(а):

Спирт. Водный раствор. Под хорошую закусь. Вместо всех этих глупостей.

Вот. Это наш метод...

0

395

" Я тут порисую... немножко..."
(с) Лукомор  http://www.kolobok.us/smiles/light_skin/blush.gif
Мы остановились на том моменте, когда я распутал для небольшого учебного примера
все явные петли, и из 17 маршрутов осталось 11 уникальных.

Далее я ввел и проиллюстрировал совершенно новое понятие: "скрытая петля",
и показал, как такие петли детектируются и распутываются.

Сейчас я выложу кликабельные превьюшки результатов детектирования скрытых петель для всех 11 маршрутов,
отсортированных в порядке возрастания длины маршрута.
Черным цветом показан сам маршрут,
Зеленые тонкие линии - соединяют пункты маршрута через один, там где они не пересекают отрезки маршрута.
Красные тонкие линии, соединяют пункты маршрута через один, и пересекают участки маршрута, выделенные жирными красными линиями.
Это пересечение показывает наличие    скрытой петли на этом участке.
Вот все 11 маршрутов:
http://s9.uploads.ru/t/Zdl40.jpg
http://sh.uploads.ru/t/63azr.jpg
http://s9.uploads.ru/t/6SvT2.jpg
http://sd.uploads.ru/t/8umdA.jpg
http://s8.uploads.ru/t/BGZLh.jpg
http://sg.uploads.ru/t/Y3ezy.jpg
http://sh.uploads.ru/t/qHjDR.jpg
http://sh.uploads.ru/t/gfyIM.jpg
http://s9.uploads.ru/t/XZ45s.jpg
http://s7.uploads.ru/t/sZ1FM.jpg
http://sg.uploads.ru/t/9yERd.jpg
Получилось, что скрытые петли имеют 3, 7, 10 и 11 маршруты.

Отредактировано Лукомор (2019-08-17 08:06:37)

0

396

Я  распутал скрытые петли на четырех маршрутах и получил следующие результаты:
На рисунках - черные линии это участки маршрута, оставшиеся без изменений,
красные - исключенные участки маршрута,
зеленые - вновь проложенные участки маршрута вместо исключенных.
Внизу каждого рисунка, для сравнения, старая и новая длина маршрута.
http://s3.uploads.ru/t/yEzNV.jpg
http://s5.uploads.ru/t/kTl5W.jpg
http://s5.uploads.ru/t/ohcrU.jpg
http://s3.uploads.ru/t/7XPOm.jpg
У нас осталось 10 уникальных маршрутов, поскольку седьмой маршрут
после распутывания скрытых петель совпал со вторым полностью.
Вот они все:
http://sd.uploads.ru/zXR7s.jpg

Отредактировано Лукомор (2019-08-17 08:16:06)

0

397

Осталось наложить одно на другое и посмотреть, каким районам и улицам какие маршруты соответствуют.

http://turmaps.net/modules/mapukr/Ukraina(Zapad)/Odessa/map.jpg

0

398

#p108647,DoctorLector написал(а):

Осталось наложить одно на другое и посмотреть, каким районам и улицам какие маршруты соответствуют.

Можно по поверхности моря наложить, круизный маршрут для яхты...  http://www.kolobok.us/smiles/standart/smile3.gif

Отредактировано Лукомор (2019-08-17 08:24:34)

0

399

Это не так интересно, как составить схему маршруток.

0

400

Главный результат:

- После распутывания скрытых петель
найден кратчайший маршрут (453,182 км),
http://s3.uploads.ru/Ujdsm.jpg

который на 2,237 км короче предыдущего кратчайшего маршрута,
полученного в результате распутывания явных петель (455,413),
http://s5.uploads.ru/8IgYF.jpg

и который, в свою очередь, на 2,085 км короче кратчайшего  маршрута,
полученного методом "ближайшего соседа" (457, 504 км).
http://sh.uploads.ru/UsmgB.jpg

Другой важный результат:

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

Далее я расскажу о совершенно оригинальном методе решения задачи коммивояжера,
который я изобрел недавно, и который для данной учебной задачи позволил пробить
психологический барьер длины маршрута в 450 км.

Отредактировано Лукомор (2019-08-17 16:43:16)

0

401

#p108649,DoctorLector написал(а):

Это не так интересно, как составить схему маршруток.

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

0

402

#p108655,Лукомор написал(а):

Если составить полную схему

Это ключевые слова. Я слишком много раз сталкивался с ситуацией, когда самая расчудесная эвристика проигрывает полному перебору. Увы.

+1

403

#p108661,DoctorLector написал(а):

с ситуацией, когда самая расчудесная эвристика проигрывает полному перебору. Увы.

Это естественно.
Полный перебор дает абсолютно лучший результат, но, зачастую, за не приемлимое время.
А эвристика, она сильно разная...
Я вот улучшил результат по конкретной предложенной задаче коммивояжера, а не могу сказать, что он абсолютно лучший.
А полный перебор - это 17!  >300000000000000 вариантов

0

404

#p108664,Лукомор написал(а):

это 17!

Пока не смертельно. Я вот что думаю: ведь этот перебор регулярно возвращается к уже рассмотренным деревьям и повторно их перебирает. То есть, алгоритм никак не использует огромные залежи ПАМЯТИ современных машин, а юзает исключительно быстродействие. Логика подсказывает, что нужно научиться сохранять перебранные огромные куски, опознавать их и обходить.
Было бы классно взглянуть на 17! именно с этой точки зрения, с точки зрения "повторов" и "похожих кусков", и научиться присваивать им некие сигнатуры.

0

405

#p108665,DoctorLector написал(а):

с точки зрения "повторов" и "похожих кусков",

С точки зрения повторов и похожих кусков, мне одно время сильно казалось,
что надо пробовать выделять куски, которые "уж точно войдут" в абсолютно кратчайший маршрут.

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

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

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

0

406

#p108669,Лукомор написал(а):

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

"Нутром чую" (с), что задачи порядка 17! сводятся к 12!-13!, а это совсем другая разница. На порядки - очень мало в случае факториалов.

0

407

#p108671,DoctorLector написал(а):

задачи порядка 17! сводятся к 12!-13!, а это совсем другая разница

Если вычислить 4 участка маршрута, пусть и разрозненных, то действительно останется 13! > 6000000000.
Много? да!
Но это позволит откинуть 99, 999% из всех возможных вариантов.
Остается перебрать 0.001%.

Отредактировано Лукомор (2019-08-17 12:52:23)

0

408

#p108661,DoctorLector написал(а):

Я слишком много раз сталкивался с ситуацией, когда самая расчудесная эвристика проигрывает полному перебору. Увы.

при игре на гитаре - так постоянно.

0

409

#p108665,DoctorLector написал(а):

алгоритм никак не использует огромные залежи ПАМЯТИ современных машин, а юзает исключительно быстродействие

Тут есть вторая беда NP задач - объем памяти может превысить кол-ва атомов вселенной.

0

410

#p108795,Шарпер написал(а):

Тут есть вторая беда NP задач - объем памяти может превысить кол-ва атомов вселенной.

У NP задач две беды: дураки и дороги ограниченные объем памяти и скорость вычислений...

Отредактировано Лукомор (2019-08-20 03:20:27)

+1

411

"Я тут порисую... немножко..."
(с) Лукомор  http://www.kolobok.us/smiles/light_skin/blush.gif
Я сейчас готов рассказать о первом из двух изобретенных мной методов решения задачи коммивояжера.
Он появился, как это часто бывает, неожиданно, при рассмотрении совершенно иных вопросов.

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

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

К сожалению, самые известные из них : №1 и №2
работают с  количеством пунктов не более 14 и 15 соответственно.
Мне же нужно было решить задачу для 17 пунктов.

Я стал размышлять, как из 17 пунктов сделать 14, но так,
чтобы полученное для 14 пунктов решение можно было бы развернуть в решение для 17 пунктов
без существенной потери результата.

Первое, что мне пришло на ум:
Взять пункты, которые являются ближайшими друг для друга, и заменить их одним,
который будет находиться ровно посредине отрезка, их соединяющего.
Выбрав три пары таких пунктов, и заменив эти три пары на три таких "срединных",
лучше сказать "медианных", пункта, я получу задачу для 14 пунктов.
Решив которую на онлайн-калькуляторе я затем смогу, наверное, заменить каждый "медианный" пункт на пару исходных пунктов.
Полученный результат, поскольку каждый из пары пунктов является для другого ближайшим,
вроде бы не должен отличаться от того, как если бы онлайн-калькулятор решал задачу для 17 пунктов.,

Сказано - сделано!

Условие задачи не повторяю, я ее уже многократно здесь рассматривал.
Сначала я выбрал из матрицы расстояний для каждого из 17 пунктов ближайший к нему пункт.
Результат свел в табличку:

http://s7.uploads.ru/XCPko.png

Затем я отсортировал полученные результаты по возрастанию расстояния до ближайшего пункта:

http://s7.uploads.ru/svCAo.png
У меня получилось четыре пары таких пунктов, для которых одновременно пункт В является ближайшим к пункту А,
и пункт А является ближайшим к пункту В.
Для остальных пунктов характерно то, что пункт В является ближайшим к пункту А, но для пункта В существует пункт С, который находится ближе, чем пункт А.

Все эти отношения "ближайшести" я нанес на схему :

http://sd.uploads.ru/t/DzUl0.png

Зеленые "обоюдоострые" стрелки соединяют получившиеся пары "взаимно-ближайших" соседей.
Красные стрелки показывают на соседа ближайшего к данному.
Пункт №14 будет ближайшим для пункта №0, пункт №12 - ближайшим для пункта №14, а пункты №12 и №8 -ближайшими друг для друга.
И так далее.

Иными словами, изображенное на схеме можно описать так:

17 коммивояжеров одновременно стартовали из 17 городов.
Направление своего движения они выбрали по методу ближайшего соседа.
Оно показано стрелкой.
На схеме изображено то, что получилось,
когда каждый коммивояжер прошел первый участок своего маршрута
и оказался в городе, ближайшем к своему начальному.

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

http://s3.uploads.ru/t/AUo2L.png

Теперь у меня получился план с 13-ю пунктами вместо 17-ти, план, которым ни один онлайн-калькулятор не подавится.
Можно было протестировать на этих новых условиях задачи все онлайн-калькуляторы
и все методы решения задачи коммивояжера, какие только найдутся в сети,

Но...

Я внимательно рассмотрел получившийся результат и...
забыл обо всех этих калькуляторах, методах, всей этой чуши, щлабуде и дребедени...

Я решил узнать, куда я приду, если буду повторять придуманные мной правила снова и снова,
В пределе, если повторять объединение взаимно ближайших точек неоднократно, все пункты стянутся в один.
А потом можно будет  развернуть из одной точки обратно в 17, повторяя все действия в строго обратном порядке.
И у нас получится исходная схема но уже с кратчайшим маршрутом на ней.

Отредактировано Лукомор (2019-09-12 23:17:38)

0

412

Я назвал свой метод: "Метод объединения пунктов".

И пошла работа...

Я снова нашел кратчайшие расстояния от каждого из 13 пунктов, с учетом уже вновь полученных.

http://sd.uploads.ru/t/ezLJX.png

У меня вновь получилось три взаимно-кратчайших маршрута.
Таким образом, общее количество пунктов уменьшилось уже до 10.

http://sh.uploads.ru/t/M3eJU.png

На этом этапе мне пришлось преодолеть пару чисто технических трудностей.

Один вопрос был: как объединять пункты - последовательно, по одному, или все сразу, которые проявились на соответствующем этапе.
Дело в том, что изначально я выбирал пару, у которой было самое меньшее расстояние между соседями.
Объединял эту пару в один пункт.
Затем пересчитывал  ближайшие расстояния для 16 пунктов.
Снова выбирал ближайшую пару.
Пересчитывал для 15 пунктов.
На каждом этапе я уменьшал общее количество пунктов на один.
Это дало очень посредственный результат по длине получившегося кратчайшего маршрута, во-первых, и было более затратно по количеству производимых вычислений во вторых.
Приходилось раз за разом рассчитывать  матрицу расстояний от каждого пункта до каждого.
Поэтому я попробовал считать по другому.
Если на первом этапе получилось четыре пары взаимно-близких соседей, то я их сразу попарно объединяю, уменьшая число пунктов с 17 до 13.
Количество вычислений сократилось в 4 раза, а получившийся в результате кратчайший маршрут приятно удивил.

Второй вопрос, который мне удалось усовершенствовать, и добиться улучшения работы моего метода, заключался в следующем.
Допустим я объединив точки №5 и №6 получил точку D.
На следующем этапе точка D оказалась ближайшей к точке №4, и наоборот.
Где я должен выбрать среднюю точку?
Банальная логика и здравый смысл подсказывают, что посредине отрезка, соединяющего пункты D и №4.
Я так и считал, и результат меня откровенно не устроил.
Пришлось освежить в памяти священные положения статьи 64 "Наставления по стрелковому делу" ,
в части определения Средней Точки Попадания (СТП) при проведении пристрелки стрелкового оружия.  http://www.kolobok.us/smiles/standart/smile3.gif

http://s5.uploads.ru/t/JBUTS.png

Применительно к нашему случаю данная статья гласит, что между двумя исходными пунктами медианный пункт будет посредине между ними.
Пункт D - посредине между пунктами №5 и №6.
Медианный пункт G между пунктами №4, №5, и №6 (это пункты исходного плана) будет лежать на прямой, соединяющей пункты D и №4, на расстояниях, взятых в отношении 2:1 от этих пунктов, ближе к пункту D, поскольку D представляет два пункта.
Следующий медианный пункт H будет лежать на прямой, соединяющей пункты G и №13, на расстояниях, взятых в отношении 3:1 от этих пунктов, ближе к пункту G, поскольку G представляет три пункта, и так далее.

Применение метода определения  медианного пункта по методике нахождения СТП  также дало сокращение длины кратчайшего маршрута.

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

Отредактировано Лукомор (2019-08-20 07:05:03)

0

413

#p108974,Лукомор написал(а):

Я назвал свой метод: "Метод объединения пунктов".

Это не твой метод. Ещё при советской власти реализовали метод объединения пунктов анкеты для более точного и выпуклого описания ситуации. Например, врач-вредитель, пенсионер-агитатор, кулак-захребетник, хирург-заочник, крановщик-надомник или еврей-колхозник.

0

414

#p108976,DoctorLector написал(а):

еврей-колхозник.

По этому поводу, я когда в порту работал, на стройплощадке (там постоянно что-то строится/перестраивается)
забавный разговор вышел между строителями, не нашими, а подрядными.
Они там как раз чего-то балагурили на перекуре,затронули национальный вопрос.
Один - тракторист, сказал, что он - еврей, по национальности.
Его оппонент удивился:
"Как же так? Ты - еврей, и вдруг - тракторист. Не характерно!"
На что тот мгновенно парировал:" А я - извращенец!"   http://www.kolobok.us/smiles/light_skin/yahoo.gif

+2

415

#p108976,DoctorLector написал(а):

Например, врач-вредитель, пенсионер-агитатор, кулак-захребетник, хирург-заочник, крановщик-надомник или еврей-колхозник.

Доктор-лектор еще... До кучи...  http://www.kolobok.us/smiles/standart/smile3.gif

Отредактировано Лукомор (2019-08-20 07:31:36)

0

416

#p108976,DoctorLector написал(а):

Это не твой метод.

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

0

417

Я продолжаю сокращать количество пунктов на плане.
Снова пересчитываю матрицу расстояний, выбираю ближайшие, для десяти оставшихся пунктов, нахожу взаимно ближайшие:

http://s8.uploads.ru/t/3QnPv.png

На этот раз нашлась всего одна пара.
Число пунктов сократилось до девяти.

http://s8.uploads.ru/t/KweIR.png

Очередная итерация, четвертая, если не ошибаюсь:

http://s7.uploads.ru/t/LPwqA.png

Снова одна взаимно ближайшая пара.
Остается восемь пунктов:

http://s5.uploads.ru/t/UfChN.png

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

Так, дальше пока стоп.
В заготовках нет следующего рисунка.
Щас наваяю,  и продолжим.
Но сначала выпью утренний кофе...

Отредактировано Лукомор (2019-08-20 08:09:51)

0

418

Что-то на четвёртой итерации уже просто свастика.

0

419

#p108986,DoctorLector написал(а):

Что-то на четвёртой итерации уже просто свастика.

Не я такую задачу составил...

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

Отредактировано Лукомор (2019-08-20 08:19:23)

0

420

#p108987,Лукомор написал(а):

Не я такую задачу составил

Да ладно, не может быть. Неужели задачу коммивояжёра впервые поставил австрийский художник?

0


Вы здесь » Амальгама » Лукоморье 2.0 » Другая тень