Сегодня я хотел бы поделиться размышлениями о таких понятиях, как стратегия и тактика, и о том, как эту информацию можно использовать для написания игрового искусственного интеллекта. Эти термины были придуманы людьми уже очень давно, и по сей день используются во многих отраслях человеческой деятельности, начиная от военных дисциплин, бизнеса и заканчивая жизненными позициями многих членов общества или играми. Вообще, понятие "Стратегия" можно приравнять к понятию "Пошаговое планирование". Это может быть некое долгосрочное, планирование строительства какого нибудь комбината, или-же наоборот, планирование заданий на один день у очень занятого человека. Так или иначе, стратегия - это, некое общее, абстрактное планирование, которое не учитывает многие факторы, которые может внести реальность. Предположим, генерал некой армии решил захватить город N. Он составил пошаговый стратегический план захвата.
Первый пункт - высадить десант где то на перифирии города.
Второй пункт - подобраться к вокзалу и захватить его лишив город транспортной системы.
Третий пункт - захватив вокзал, перебраться через единственный мост ведущий к городу к телеграфу и захватить его, лишив город связи.
Четвертый пункт - двинуться к главному зданию в городе, и захватить его правительство.
Стратегически все верно. Но каковы шансы на успех такой операции? Вполне возможно, что подойдя к мосту, солдаты обнаружат, что мост по каким-то причинам взорван, и дальше двигаться нельзя. План сорван, и битва проиграна? Но тут в дело должна вступить тактика.
Что же такое тактика? Тактика - это как-бы реализация (воплощение в жизнь) стратегии.
Иными словами обнаружив, что план не состоятелен по каким-либо причинам, его необходимо пересмотреть и скорректировать. Решить какие именно действия необходимо предпринять для составления нового плана и прожолжения битвы, можно только наткнувшись на конкретную проблему, которая появилась здесь и сейчас, и о возможном существовании которой составитель плана даже не подозревал. Таким образом, Стратегия ПРЕДПОЛАГАЕТ возможное развитие событий, а тактика РАСПОЛАГАЕТ конкретными фактами, и на их основании позволяет принимать по ситуации те или иные решения.
На основании всего высшесказанного, можно попытаться разработать алгоритм принятия решений для ИИ. Для простого примера возьмем игровое поле 4х3 клетки, и в нижний левый угол поставим синюю фишку. По правилам эта фишка может передвигаться по трем направлениям. Вперед, влево и вправо на одну клетку.
Цель игры - как можно быстрее дойти до зеленой фишки. Красный квадратик - это преграда о которой фишка пока не подозревает, потому что она находится дальше одной клетки от нее.
И вот синяя фишка строит стратегический план для достижения цели. Она начинает рекурсивно перебирать все возможные последовательности ходов. В результате этого перебора появится древовидная структура которая будет начинаться в точке H1W1 а заканчиваться в точке H1W4. Очевидно, что следует выбирать самую короткую ветку графа, для достижения цели в кратчайшие сроки. Ей будет являться такая последовательность:
H1W1>>H1W2>>H1W3>>H1W4.
Однако перейдя на клетку H1W2 фишка обнаружит, что впереди преграда (взорванный мост).
Для решения проблемы, необходимо снова расчитать все возможные пути достижения цели (скорректировать план) и выбрать кратчайший, используя его до тех пор, пока не появится еще какая-либо преграда, о существовании которой мы не подозревали. Таким образом, расчет пути в данном случае - это стратегия, а повторный расчет пути из-за внезапно появившейся преграды, это уже тактика. На примере такого простого алгоритма, уже можно написать простейшего "бота" использующего стратегию и тактику, который сможет находить путь к чему либо. Постепенно усложняя алгоритм, вводя в него дополнительные параметры можно добиться решения более сложных задач, но в основе все равно будет лежать стратегия и тактика.
Комментариев нет:
Отправить комментарий