В задаче о кратчайшем пути на сетке с препятствиями предложите доказательство корректности алгоритма A* с эвристикой, не превышающей истинную стоимость, и обсудите, как изменение эвристики влияет на время и память
Определения и условия - Эвристика адекватна (admissible): для любой вершины nnn верно h(n)≤h∗(n) \:h(n)\le h^*(n)\:h(n)≤h∗(n), где h∗(n)h^*(n)h∗(n) — истинная стоимость кратчайшего пути от nnn до цели. - Эвристика монотонна (consistent): для любого ребра (n,m)(n,m)(n,m) выполнено h(n)≤c(n,m)+h(m) \:h(n)\le c(n,m)+h(m)\:h(n)≤c(n,m)+h(m). Монотонность влечёт адекватность. Доказательство корректности (оптимальности) A* при адекватной эвристике 1. Обозначения. Пусть старт sss, цель GGG. Пусть A* извлекла из OPEN цель GGG с записанной стоимостью g(G)=Cg(G)=Cg(G)=C. Пусть истинная оптимальная стоимость пути до цели равна C∗=g∗(G)C^*=g^*(G)C∗=g∗(G). Предположим противное: C>C∗C>C^*C>C∗. 2. Рассмотрим некоторый оптимальный путь s=v0,v1,…,vk=Gs=v_0,v_1,\dots,v_k=Gs=v0,v1,…,vk=G. Пусть iii — наименьший индекс такой, что viv_ivi находится в OPEN в момент извлечения GGG (все vjv_jvj с j<ij<ij<i уже были извлечены/рассмотрены). Тогда для этого viv_ivi после обработки предыдущих вершин A* имеет точное значение g(vi)=g∗(vi)g(v_i)=g^*(v_i)g(vi)=g∗(vi) (путь до viv_ivi уже раскрыт). 3. Оценим f(vi)=g(vi)+h(vi)f(v_i)=g(v_i)+h(v_i)f(vi)=g(vi)+h(vi). По адекватности h(vi)≤h∗(vi) \:h(v_i)\le h^*(v_i)\:h(vi)≤h∗(vi), поэтому f(vi)=g∗(vi)+h(vi)≤g∗(vi)+h∗(vi)=g∗(G)=C∗.
f(v_i)=g^*(v_i)+h(v_i)\le g^*(v_i)+h^*(v_i)=g^*(G)=C^*. f(vi)=g∗(vi)+h(vi)≤g∗(vi)+h∗(vi)=g∗(G)=C∗.
4. Для цели h(G)=0h(G)=0h(G)=0, значит в момент извлечения GGG её приоритет f(G)=g(G)=Cf(G)=g(G)=Cf(G)=g(G)=C. По предположению C∗<CC^*<CC∗<C, следовательно f(vi)≤C∗<C=f(G)f(v_i)\le C^*<C=f(G)f(vi)≤C∗<C=f(G). 5. Но A* всегда извлекает из OPEN вершину с минимальным fff-значением, значит GGG не мог быть извлечён раньше, чем viv_ivi. Противоречие с шагом 1. Следовательно предположение неверно и C=C∗C=C^*C=C∗. A* возвращает оптимальный путь. Замечания про монотонность: если эвристика монотонна, то fff-значения невозрастают по извлекаемым вершинам и каждый узел извлекается не более одного раза (не требуется повторного открытия). Если эвристика адекватна, но не монотонна, корректность сохраняется, но алгоритм может повторно открывать вершины (нужно допускать обновление g-значений и повторную вставку в OPEN). Влияние изменения эвристики на время и память - Точность эвристики: чем ближе h(n)h(n)h(n) к h∗(n)h^*(n)h∗(n) (но не превышает его), тем меньше вершин A* расширит. Граничные случаи: - h(n)≡0h(n)\equiv 0h(n)≡0 → A* совпадает с алгоритмом Дейкстры, возможны максимальные расширения (много времени и памяти). - h(n)=h∗(n)h(n)=h^*(n)h(n)=h∗(n) (идеальная эвристика) → A* расширяет только вершины на оптимальном пути (минимум расширений и хранения). - Монотонность: монотонная эвристика уменьшает число повторных открытий и тем самым снижает время; также облегчает реализацию (не нужна обработка релаксаций закрытых узлов). - Стоимость вычисления эвристики: более информативная эвристика часто дороже по вычислению. Итоговое время = (число расширений)×(стоимость обработки одной вершины+стоимость вычисления hhh). Иногда лучше простая и дешёвая эвристика, чем дорогая, хоть и более точная. - Память: A* хранит OPEN и CLOSED; число хранимых вершин примерно равно числу сгенерированных/необработанных узлов. Более информативная hhh уменьшает это число. Однако вычисление сложной эвристики может требовать дополнительной памяти (например, таблицы для паттерн-эвристик). - Неправильная (overestimating) эвристика: может снизить число расширений и время, но теряется гарантия оптимальности. Управляемая компромиссная стратегия — взвешенный A*: f=g+ϵhf=g+\epsilon hf=g+ϵh с ϵ>1\epsilon>1ϵ>1 даёт приближённый ответ быстрее; при выбранном ϵ\epsilonϵ можно получить предел на субоптимальность. Коротко - Адекватность h(n)≤h∗(n) \:h(n)\le h^*(n)\:h(n)≤h∗(n) гарантирует оптимальность A* (доказано выше). - Монотонность упрощает реализацию и уменьшает повторные открытия. - Чем информативнее (ближе к h∗h^*h∗) эвристика, тем меньше расширений, следовательно меньше времени и памяти, но обычно выше стоимость вычисления эвристики; превышение h∗h^*h∗ даёт выигрыш в ресурсах ценой потери оптимальности.
- Эвристика адекватна (admissible): для любой вершины nnn верно h(n)≤h∗(n) \:h(n)\le h^*(n)\:h(n)≤h∗(n), где h∗(n)h^*(n)h∗(n) — истинная стоимость кратчайшего пути от nnn до цели.
- Эвристика монотонна (consistent): для любого ребра (n,m)(n,m)(n,m) выполнено h(n)≤c(n,m)+h(m) \:h(n)\le c(n,m)+h(m)\:h(n)≤c(n,m)+h(m). Монотонность влечёт адекватность.
Доказательство корректности (оптимальности) A* при адекватной эвристике
1. Обозначения. Пусть старт sss, цель GGG. Пусть A* извлекла из OPEN цель GGG с записанной стоимостью g(G)=Cg(G)=Cg(G)=C. Пусть истинная оптимальная стоимость пути до цели равна C∗=g∗(G)C^*=g^*(G)C∗=g∗(G). Предположим противное: C>C∗C>C^*C>C∗.
2. Рассмотрим некоторый оптимальный путь s=v0,v1,…,vk=Gs=v_0,v_1,\dots,v_k=Gs=v0 ,v1 ,…,vk =G. Пусть iii — наименьший индекс такой, что viv_ivi находится в OPEN в момент извлечения GGG (все vjv_jvj с j<ij<ij<i уже были извлечены/рассмотрены). Тогда для этого viv_ivi после обработки предыдущих вершин A* имеет точное значение g(vi)=g∗(vi)g(v_i)=g^*(v_i)g(vi )=g∗(vi ) (путь до viv_ivi уже раскрыт).
3. Оценим f(vi)=g(vi)+h(vi)f(v_i)=g(v_i)+h(v_i)f(vi )=g(vi )+h(vi ). По адекватности h(vi)≤h∗(vi) \:h(v_i)\le h^*(v_i)\:h(vi )≤h∗(vi ), поэтому
f(vi)=g∗(vi)+h(vi)≤g∗(vi)+h∗(vi)=g∗(G)=C∗. f(v_i)=g^*(v_i)+h(v_i)\le g^*(v_i)+h^*(v_i)=g^*(G)=C^*.
f(vi )=g∗(vi )+h(vi )≤g∗(vi )+h∗(vi )=g∗(G)=C∗. 4. Для цели h(G)=0h(G)=0h(G)=0, значит в момент извлечения GGG её приоритет f(G)=g(G)=Cf(G)=g(G)=Cf(G)=g(G)=C. По предположению C∗<CC^*<CC∗<C, следовательно f(vi)≤C∗<C=f(G)f(v_i)\le C^*<C=f(G)f(vi )≤C∗<C=f(G).
5. Но A* всегда извлекает из OPEN вершину с минимальным fff-значением, значит GGG не мог быть извлечён раньше, чем viv_ivi . Противоречие с шагом 1. Следовательно предположение неверно и C=C∗C=C^*C=C∗. A* возвращает оптимальный путь.
Замечания про монотонность: если эвристика монотонна, то fff-значения невозрастают по извлекаемым вершинам и каждый узел извлекается не более одного раза (не требуется повторного открытия). Если эвристика адекватна, но не монотонна, корректность сохраняется, но алгоритм может повторно открывать вершины (нужно допускать обновление g-значений и повторную вставку в OPEN).
Влияние изменения эвристики на время и память
- Точность эвристики: чем ближе h(n)h(n)h(n) к h∗(n)h^*(n)h∗(n) (но не превышает его), тем меньше вершин A* расширит. Граничные случаи:
- h(n)≡0h(n)\equiv 0h(n)≡0 → A* совпадает с алгоритмом Дейкстры, возможны максимальные расширения (много времени и памяти).
- h(n)=h∗(n)h(n)=h^*(n)h(n)=h∗(n) (идеальная эвристика) → A* расширяет только вершины на оптимальном пути (минимум расширений и хранения).
- Монотонность: монотонная эвристика уменьшает число повторных открытий и тем самым снижает время; также облегчает реализацию (не нужна обработка релаксаций закрытых узлов).
- Стоимость вычисления эвристики: более информативная эвристика часто дороже по вычислению. Итоговое время = (число расширений)×(стоимость обработки одной вершины+стоимость вычисления hhh). Иногда лучше простая и дешёвая эвристика, чем дорогая, хоть и более точная.
- Память: A* хранит OPEN и CLOSED; число хранимых вершин примерно равно числу сгенерированных/необработанных узлов. Более информативная hhh уменьшает это число. Однако вычисление сложной эвристики может требовать дополнительной памяти (например, таблицы для паттерн-эвристик).
- Неправильная (overestimating) эвристика: может снизить число расширений и время, но теряется гарантия оптимальности. Управляемая компромиссная стратегия — взвешенный A*: f=g+ϵhf=g+\epsilon hf=g+ϵh с ϵ>1\epsilon>1ϵ>1 даёт приближённый ответ быстрее; при выбранном ϵ\epsilonϵ можно получить предел на субоптимальность.
Коротко
- Адекватность h(n)≤h∗(n) \:h(n)\le h^*(n)\:h(n)≤h∗(n) гарантирует оптимальность A* (доказано выше).
- Монотонность упрощает реализацию и уменьшает повторные открытия.
- Чем информативнее (ближе к h∗h^*h∗) эвристика, тем меньше расширений, следовательно меньше времени и памяти, но обычно выше стоимость вычисления эвристики; превышение h∗h^*h∗ даёт выигрыш в ресурсах ценой потери оптимальности.