Одна пара кратчайший путь несколько путешественников

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

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

пример изображения

с красным и зеленым, движущимися из S в D. Оптимальным путем для движения только красного будет S-A-D со стоимостью 2, а оптимальным путем для движения только зеленого будет S-C-D со стоимостью 2. В обоих случаях, однако, другой стоимость движения юнитов будет 5 и, таким образом, оптимальный путь, когда юниты движутся вместе, это S-B-D с максимальной стоимостью движения 4.

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


person flowerpot    schedule 14.02.2013    source источник


Ответы (1)


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

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

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

person Howie    schedule 14.02.2013