Поиск пути в играх. Алгоритм поиска пути A*

แชร์
ฝัง
  • เผยแพร่เมื่อ 22 พ.ย. 2024

ความคิดเห็น • 97

  • @dmitrywroclaw9165
    @dmitrywroclaw9165 3 ปีที่แล้ว +19

    Самое понятное и наглядное объяснение алгоритма. Спасибо большое!

  • @oleggopp4388
    @oleggopp4388 4 ปีที่แล้ว +23

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

    • @gamedevru3833
      @gamedevru3833  4 ปีที่แล้ว +1

      Скоро будут ещё видео по игрострою.
      Спасибо за подписку и удачи вам в ваших начинаниях)

  • @poltos7235
    @poltos7235 ปีที่แล้ว +3

    За хардбасс на фоне ставлю дополнительный лайк)

  • @АртурБерков-х8ч
    @АртурБерков-х8ч 4 ปีที่แล้ว +7

    Одновременно просто и гениально. Возьму на вооружение.

  • @antonbukhman5018
    @antonbukhman5018 14 วันที่ผ่านมา

    Wow, Friend! Thank you very much)) You explanation is excellent! After this video I became your subscriber...

  • @petergorelov6852
    @petergorelov6852 ปีที่แล้ว

    Великолепно. Когда читал про этот алгоритм в книге - вообще не понимал зачем нужен этот примитив. Но здесь хорошо показано насколько он изощрённый.

  • @ronallik
    @ronallik ปีที่แล้ว

    Спасибо за отличную подачу материала. Благодаря Вашему видео, наконец-то, понял и решил задачу. Спасибо.

  • @ЦиклЖизни
    @ЦиклЖизни 4 ปีที่แล้ว +8

    Ого! Я раньше пытался эту задачу через графы решить. Наверное неделю Мучался, но так ничего и не понял, а тут всё так элементарно решено, аж стыдно стало, что сам к такому решению не смог дойти.

    • @gamedevru3833
      @gamedevru3833  4 ปีที่แล้ว +2

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

    • @jtcnjtc
      @jtcnjtc 4 ปีที่แล้ว +2

      дык это все равно задача на графах

    • @modjaid3907
      @modjaid3907 4 ปีที่แล้ว +4

      пытался решить задачу на графах до сих пор не зная, что такое графы, мддааа

  • @isgris5153
    @isgris5153 ปีที่แล้ว +2

    Я: Просто смотрю видео для изучения алгоритма🗿 Также хардбасс на фоне:🕺🕺🕺🕺

  • @worldofonline7316
    @worldofonline7316 ปีที่แล้ว

    Самое понятное и наглядное объяснение! Супер!

  • @mar_kha
    @mar_kha 2 ปีที่แล้ว

    Пишу вкр на тему "Подбор подходящего маршрута...", и искала материал по алгоритмам поиска
    Интересный и наглядный разбор - спасибо! 👍

  • @Desotterro
    @Desotterro 4 ปีที่แล้ว +34

    Про 3ехмерный поиск пути было бы очень интересно

    • @АзатМингалеев-в1к
      @АзатМингалеев-в1к 3 ปีที่แล้ว +8

      А разве трёхмерная сетка принципиально отличается? Просто берем соседние индексы для i, j и k.

  • @ВасилийГригорьев-з9х
    @ВасилийГригорьев-з9х 4 หลายเดือนก่อน

    Вау. Впечатлен подачей и объяснением алгоритма

  • @soundsbeard
    @soundsbeard 4 ปีที่แล้ว +5

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

    • @gamedevru3833
      @gamedevru3833  4 ปีที่แล้ว +1

      Спасибо за отзыв. В следующих видео ответственнее подойду к выбору музыкального сопровождения.

    • @ivanenzhaev2373
      @ivanenzhaev2373 4 ปีที่แล้ว +1

      @@gamedevru3833 вкусы могут быть разные, всем ну угодишь. Лично мне нравится, когда в видео нет музыки, тогда я могу включить, что мне нравится. В процессе написания этого сообщения я слушал данное видео с музыкой: th-cam.com/video/m1uLQ7arzKs/w-d-xo.html

  • @goshator
    @goshator ปีที่แล้ว

    Спасибо, помог до конца понять алгоритм перед экзаменом!)

  • @romansharpe1131
    @romansharpe1131 4 ปีที่แล้ว +4

    Спасибо, очень доступно разъяснено

  • @renonmay
    @renonmay 4 ปีที่แล้ว +4

    ххахаха лучшее объяснение что я видел и с хардбассом на фоне!
    как же я люблю свой народ

  • @Денис-р5в4з
    @Денис-р5в4з 2 ปีที่แล้ว

    Спасибо. Почти понятно, осталось реализовать руками)

  • @VonBreuss
    @VonBreuss 3 ปีที่แล้ว +1

    Спасибо!) Божественно разжевал всё!)

  • @romanyefimenko5812
    @romanyefimenko5812 4 ปีที่แล้ว +1

    Спасибо большое)) На некоторых деталях правда малый акцент, пришлось пару раз посмотреть чтобы осознать логику

  • @kuk3637
    @kuk3637 4 ปีที่แล้ว

    Интересен разбор конкретно точек с телепортацией.

  • @MihailOnuchin
    @MihailOnuchin 2 ปีที่แล้ว

    Спасибо! Очень наглядно.

  • @flugenkehhannen
    @flugenkehhannen 4 หลายเดือนก่อน

    Дай бог тебе здоровья

  • @Андрей-в7и6ь
    @Андрей-в7и6ь 3 ปีที่แล้ว +2

    Крутая тема, интересная! Спасибо за видео! Очень мало хороших видосов на русском.

  • @S1yGus
    @S1yGus 3 ปีที่แล้ว

    Очень понятное и наглядное объяснение. Спасибо!

  • @Книголюб-х4ь
    @Книголюб-х4ь 3 ปีที่แล้ว

    Отличный разбор, спасибо большое.

  • @Андрей-в7и6ь
    @Андрей-в7и6ь 3 ปีที่แล้ว

    Ты гений! Спасибо за подробное чёткое разъяснение!

  • @BobSmith-qg9wn
    @BobSmith-qg9wn ปีที่แล้ว +1

    Самое простое и наглядное объяснение

  • @friendsgaming4822
    @friendsgaming4822 3 ปีที่แล้ว

    Великолепное видео)
    Очень жду разбор трёхмерный поиск пути
    Спасибо за старания!

  • @tim-mal8735
    @tim-mal8735 3 ปีที่แล้ว

    Большое спасибо!!!

  • @ТестТест-в3ъ
    @ТестТест-в3ъ 4 ปีที่แล้ว +3

    Здарова ! Огромное спасибо ! Я посмотрел весь твой канал , и ты один из бриллиантов в Ютубе , не бросай пж это дело! Если нужно идея , то как на счёт Алгоритм Гилберта - Джонсона - Кирти

  • @ebtyx
    @ebtyx 4 หลายเดือนก่อน

    Вычесление быстрейшего способа завязать шнурки на адидас кросовках

  • @samserious5483
    @samserious5483 2 ปีที่แล้ว

    Очень понятно, спасибо

  • @nexgenua
    @nexgenua 4 ปีที่แล้ว +4

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

    • @uebyCyka
      @uebyCyka 2 ปีที่แล้ว

      а можно поточнее описать?

  • @АлександрКакушкин-л9ж
    @АлександрКакушкин-л9ж 4 ปีที่แล้ว +6

    Только в алгоритме допущена небольшая ошибка.
    Функция оценки остатка пути должна давать нижнюю границу. Иначе алгоритм может сформировать не оптимальный путь. Или потратить больше времени (но это не так опасно).
    Манхеттенское расстояние в данном случае может давать завышенное значение. Лучше использовать функцию max(dx,dy)*10 + min(dx,dy)*4, дающую точную нижнюю границу (остаток пути на свободной от препятствий площадке).

    • @gamedevru3833
      @gamedevru3833  4 ปีที่แล้ว +2

      Да, я думал над этим моментом. В процессе тестирования гонял алгоритм по сетке 10 000 х 10 000 клеток, но так и не получил никаких видимых сбоев в построении оптимального пути.
      Потому посчитал, что не стоит усложнять расчёты для видео.

    • @АлександрКакушкин-л9ж
      @АлександрКакушкин-л9ж 4 ปีที่แล้ว +2

      Тут важен не размер
      Неправильный путь легко получить на относительно маленькой сетке. Для этого потребуется всего ничего. Например.
      ___________
      Н_ППП
      __ППП
      __ППП
      __ППП
      _____________Ц
      На картинке препятствие в виде прямоугольника. Начало поиска находится слева, вровень с верхним краем препятствия, с одной пустой ячейкой.
      Цель в ряду непосредственно под препятствием, вправо сдвинута так, что можно пройти по диагонали в ряд над препятствием. В том виде, что у тебя, алгоритм идёт по нижнему пути, хотя верхний явно короче.
      Картинка , кстати достаточно типичная. Препятствие
      То, что оценка остатка пути не должна превышать действительного остатка, особо подчёркивается во всех серьёзных описаниях этого алгоритма.
      Кроме предложенного мной годится более простая эвристика: max(dx,dy)*10. Это более грубая оценка, придётся анализировать больше вариантов, но она тоже даст кратчайший путь.

  • @SergeyPatuk
    @SergeyPatuk 4 ปีที่แล้ว

    Когдато лет 7 тому назад я думал что это чтото гениальное.

    • @SergeyPatuk
      @SergeyPatuk 4 ปีที่แล้ว

      @Dark Crafter Чем занимаешся ?

  • @edgaredgar4160
    @edgaredgar4160 ปีที่แล้ว

    Возникла идея решить это через дп, но не знал как это перенести в игровое пространство

  • @dDevusS89
    @dDevusS89 ปีที่แล้ว

    Просто и понятно) пошел писать свой код

  • @Артёмфомин-ш1ы
    @Артёмфомин-ш1ы 2 หลายเดือนก่อน

    Учитывая что алгоритм может просматривать диагональ не смотря, на две ячейки которые могут быть поперёк то на диагоналях он должен проскакивать в щель

  • @dentiller
    @dentiller 9 หลายเดือนก่อน

    Уважуха за DJ Blyatman друг) но оно мешает видосу

  • @softwet4341
    @softwet4341 3 ปีที่แล้ว +1

    я о обычно волновой алгоритм использую

  • @3akycka690
    @3akycka690 3 ปีที่แล้ว +1

    Ребята, алгоритм несомненно огонь, сам его повторил, но может кто-нибудь дать ссылку на хардбасс?

  • @slava_zxz
    @slava_zxz 8 หลายเดือนก่อน

    А что за визуализатор на видео?

  • @MikeAillen
    @MikeAillen ปีที่แล้ว +1

    Эвристика слабая , так он будет неправильно считать дальние расстояния, в случае с блокировками стартовых соседей.
    Лучше квадрат разницы по X + квадрат разницы по Y не умножая на 10

  • @RafaelShepard
    @RafaelShepard 6 หลายเดือนก่อน

    давненько я памп не слышал

  • @Салфетка-ь1ы
    @Салфетка-ь1ы 2 ปีที่แล้ว +1

    Почему на 5:52 мы резко переместились на активную клетку сверху?

    • @vitalii2321
      @vitalii2321 ปีที่แล้ว +1

      Потому как идет выбор по наименьшему весу из всех открытых клеток

  • @zahar_AI
    @zahar_AI 2 ปีที่แล้ว +1

    Привет!
    А в чем существенное отличие от алгоритма Дейкстры? Можно же это все перерисовать в граф, или Дейкстра будет медленнее работать на больших картах?

    • @uebyCyka
      @uebyCyka 2 ปีที่แล้ว +2

      Дейкстра находит кратчайшее расстояние до ВСЕХ точек из исходной. А а* только до одной нужной. Таким образом, если стартовая точка сместилась, вычислять всё придётся по новой. А раз так, лучше же снова искать путь до одной точки, а не до всех?

  • @СтаніславДеркач-щ6и
    @СтаніславДеркач-щ6и 2 ปีที่แล้ว

    Чувствую себя преисполнившись

  • @Desotterro
    @Desotterro 4 ปีที่แล้ว +2

    Родненький, ты где?

    • @gamedevru3833
      @gamedevru3833  4 ปีที่แล้ว +1

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

    • @Desotterro
      @Desotterro 4 ปีที่แล้ว +1

      @@gamedevru3833 фуух, а то я уж думал все, с концами, удачи, ждемс

  • @AizarkLizard
    @AizarkLizard ปีที่แล้ว

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

    • @coolkingdom1502
      @coolkingdom1502 10 หลายเดือนก่อน

      Если в открытом списке нет больше ячеек, то значит пути нет
      Просто же

  • @uebyCyka
    @uebyCyka 4 ปีที่แล้ว +2

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

    • @uebyCyka
      @uebyCyka 2 ปีที่แล้ว

      Ага, я тупой был, извините

  • @Regin-cb4qd
    @Regin-cb4qd 2 ปีที่แล้ว

    а что за музон?

  • @павелмак-в8ж
    @павелмак-в8ж 4 ปีที่แล้ว +1

    Приветствую. Интересно, а метод поиска в ширину не проще?

    • @rKvinty
      @rKvinty 3 ปีที่แล้ว +3

      проще но долго работает

    • @FanTopRU
      @FanTopRU 2 ปีที่แล้ว

      Ааа... какого.. он находит кратчпйший путь в невзвешенном графе ;)

  • @circus-overlord
    @circus-overlord 3 ปีที่แล้ว

    Можете подсказать что играет на фоне?

  • @barbaferam4762
    @barbaferam4762 4 ปีที่แล้ว

    алгоритмом волны вроде как нормально работает и для 3-х измерений

    • @rKvinty
      @rKvinty 3 ปีที่แล้ว

      Нормально и долго

  • @maxwad
    @maxwad 2 ปีที่แล้ว

    "Затем мы получаем Манхэттенское значение..." Так а как получаем? Конкретно что надо сделать?

  • @nikitas3729
    @nikitas3729 4 ปีที่แล้ว

    Просто глупый вопрос, а можно ли представь нашу "местность" в виде графа и решить через алгоритм декстера?

    • @supernova8486
      @supernova8486 3 ปีที่แล้ว +2

      этот как стрелять по воробьям из пушки. Алгоритм Дийсктры используется если надо найти путь от текущей вершины ко всем вершинам в графе

    • @foundersl
      @foundersl 3 ปีที่แล้ว +2

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

    • @nikitas3729
      @nikitas3729 3 ปีที่แล้ว

      @@foundersl Если честно, то я за 4 месяца уже понял это))

    • @foundersl
      @foundersl 3 ปีที่แล้ว +2

      @@nikitas3729 ну так вдруг у кого-то еще такой же вопрос будет)

  • @ЛёшаАркитов
    @ЛёшаАркитов 3 หลายเดือนก่อน

    2:16 откуда взялось 10 единиц? Это мы сами от балды придумываем? Или как?

    • @liquid_name1068
      @liquid_name1068 หลายเดือนก่อน

      Клетка находится на расстоянии 1 от стартовой точки, 1*10 = 10

  • @stepanbazrov6330
    @stepanbazrov6330 4 ปีที่แล้ว +2

    Ну надо глубже объяснять, рассказал бы, что такое графы

  • @DobinSergei
    @DobinSergei 4 หลายเดือนก่อน

    Зачем умножать на 10 и 14? Это же 5 и 7.
    Музыка на фоне очень мешает!

  • @ЕдуардБездухов
    @ЕдуардБездухов 4 ปีที่แล้ว +2

    Эмм... А на чем ты игру пишешь?) Я не спорю, вся эта лобуда работает (привет теорие алгоритмов), но в Unity, например, есть такая штука как AI (если коротко: движок сам вычислит допустимый и оптимальный путь для ботов). Думаю, что в Край и Анриал энджен это всё тоже как то автоматизировно. Вобщем, твой видос полезен если игра будет писаться без движка (то ещё извращение) или для изучения этого алгоритма на реалистичном примере. Но вообще, думаю, что можно и лайк поставить - это же не челендж с изолентой)

    • @Тестыбомжатскихвидеокарт
      @Тестыбомжатскихвидеокарт 4 ปีที่แล้ว +2

      Нифига, Unity вычисляет это только в Nav Mesh Agent, только в 3D, только по осям xz .
      Если пишешь 2D по осям xy, а по объектам то можно ходить, то нельзя, нужно писать свой алгоритм.

    • @ЕдуардБездухов
      @ЕдуардБездухов 4 ปีที่แล้ว +1

      @@Тестыбомжатскихвидеокарт , можно написать 2д и в координатах ХZ, а для реализации "то можно ходить, то нельзя" использовать ту же фишку что и при создании дверей в 3д. Навмеш можно изменить динамически (например, так работают движущиеся платформы, двери и т. д.) А если боитесь что динамическое изменение навмеша навернёт оптимизацию то тригери вам в помощь. И всё это всё ещё проще, чем писать алгоритм с нуля, как по мне

    • @Тестыбомжатскихвидеокарт
      @Тестыбомжатскихвидеокарт 4 ปีที่แล้ว +1

      2D в координатах XZ сделать нельзя. Только в XY. Спрайты можно повернуть на XZ, но тогда пропадают Polygon collider'ы, они не поворачиваются вместе со спрайтами, найти настройки этого я не смог. Как ни пытался, ничего больше придумать не смог. Пришлось повернуть игровую карту вместе с камерой, и теперь у меня 3D персонажи бегают по XY и направлены головой в сторону Z. И мне надо алгоритм, чтобы они бегали по XY спрайтам, при этом не наступали на запрещённые им спрайты.

    • @ЕдуардБездухов
      @ЕдуардБездухов 4 ปีที่แล้ว +1

      @@Тестыбомжатскихвидеокарт , окей, протупил. 2.5д в XZ сделать можно, а 2д - нет. Можно сделать костыль: мир по XZ, всех персонажей и графон лепить на квады как спрайты и располагать очень близко к самому 2д миру (если мир по оси У 0, то персонажи по оси У 0.001). Не уверен что это рационально, но возможно. А что за игра у вас, кстати?

    • @Тестыбомжатскихвидеокарт
      @Тестыбомжатскихвидеокарт 4 ปีที่แล้ว +1

      У меня спрайты наложены на плоскость XY - это страны.
      По странам должны бегать 3D войска, причём, бегать можно только по своей стране, вражеской и тем, которые дали разрешение на это.
      Если играл в CK2, HOI4 и EU4, поймёшь, как это выглядит.
      Распилить мир на 5000 регионов я не могу по причине количества, поэтому в игре только территории 200 стран как спрайты, а войска могут бегать в любую указанную точку. Мне надо сделать так, чтобы войска бегали в указанную точку только по тем территориям, в которых это можно.
      Nav Mesh Agent бегает только по XZ, на плоскости XY не работает, причём, ему нельзя просто так взять и указать разрешённые страны как список объектов класса.

  • @НикитаБуров-ъ6р
    @НикитаБуров-ъ6р ปีที่แล้ว +1

    great explanation, terrible music 8-)

  • @mega_mak
    @mega_mak 4 ปีที่แล้ว

    Я наоборот за научной составляющей иду к этим ресурсам, а вы говорите: "бла бла бла". Вообще ничего непонятно.

  • @Trepetsky
    @Trepetsky 8 หลายเดือนก่อน

    Так себе объяснение.