forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Алгоритмика (http://forum.boolean.name/forumdisplay.php?f=21)
-   -   Вопросы про A* (http://forum.boolean.name/showthread.php?t=20098)

RegIon 22.11.2015 19:08

Вопросы про A*
 
Тут возник вопрос как заставить алгоритм идти не по кратчайшему пути, а в определенном направлении.
Необходимо что бы он расчитывал с учетом направления из точки старта, но потом шел по кратчайшему.
Какую тут эвристическую функцию можно применить? :dontknow:
Еще желательно что бы на пути было меньше поворотов.



Просто машинка начинает разворачиваться на 180, чего совсем не нужно.:wild:

Я попытался так, но это не дает эффекта. Хотя по идее должно работать.

Nerd 22.11.2015 19:15

Ответ: Вопросы про A*
 
А не вариант делать поиск пути по ориентированному графу, заранее определив направление граней, начиная от старта по известному направлению?

RegIon 22.11.2015 19:27

Ответ: Вопросы про A*
 
Я не совсем тебя понял.

Ну просто ситуация где однозначные пути.
Нужно провести путь сквозь зеленую точку.

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

Nerd 22.11.2015 19:59

Ответ: Вопросы про A*
 
Хз насколько я тебя понял. Если всё так просто:
1. Определяем ближайшую ноду от старта по нужному направлению
2. Двигаем к ней
3. Не даём поиску пути проходить через старт
Цитата:

Сообщение от RegIon (Сообщение 301763)
Я понимаю, что нужно алгоритму сообщить, что повороты - тяжелая операция, и давай их по миниму, но хз как это сказать.

Включай в стоимость вершины угол между ней и соседями.

RegIon 23.11.2015 11:17

Ответ: Вопросы про A*
 
Цитата:

Сообщение от Nerd (Сообщение 301764)
Хз насколько я тебя понял. Если всё так просто:
1. Определяем ближайшую ноду от старта по нужному направлению
2. Двигаем к ней
3. Не даём поиску пути проходить через старт

Включай в стоимость вершины угол между ней и соседями.

Я неправильно рассчитывал направление:rolleyes:, из-за округления инта у меня направление = 0 всегда было.
Вторую пару скобок не поставил.

mingw 01.01.2016 22:34

Ответ: Вопросы про A*
 
Ввести понятие направление. Просто штрафуй те клетки, наступив на которую произойдет смена направления. Штрафовать можно путем тупого прибавления к стоимости шага G. Чем сильнее угол поворота, тем больше штраф.


Часовой пояс GMT +4, время: 21:52.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot