Программирование - это просто
Advertisement
Главная arrow Искусственный интеллект arrow Моделирование сознания arrow Моделирование сознания. Урок 11. Новые стратегии поведения.
29.04.2024 г.
Главное меню
Главная
Интернет магазин
Программные продукты
Биржевые роботы
Искусственный интеллект
Математика и информатика
1С:Предприятие
Уроки C#
Уроки Delphi
Уроки программирования
Web-программирование
Дизайн и графика
Компьютер для блондинок
Исходники
Статьи
Платный раздел
Рассказы про компьютеры
Хитрости и секреты
Системный подход
Размышления
Наука для чайников
Друзья сайта
Excel-это не сложно
Все о финансах
.
Моделирование сознания. Урок 11. Новые стратегии поведения. Печать E-mail
Автор megabax   
14.04.2024 г.
unit AIObj

Моделирование сознания. Урок 11. Новые стратегии поведения.

Что бы смотреть урок полностью и скачать исходники, подпишитесь на платный раздел.

В платном разделе статья находиться здесь.


В прошлой статье было описано создание модуля поиска пищи и избегания опасностей. Сейчас будем улучшать эти модули. Начнем с модуля избегания опасностей. В класса DangerAvoiding  добавим поле lock_threahold:

 

        /// <summary>

        /// Порог, определяющий, что робот запертый

        /// </summary>

        private int lock_threahold = 14;

Это поле нужно для функции, которая будет определять а не заперт ли робот. Она будет сравнивать сигналы сенсоров с этим порогом, если хоть один сенсор показал значение ниже - есть куда идти:

        /// <summary>

        /// Робот заперт в ловушке

        /// </summary>

        /// <param name="sensors">Показание сенсоров</param>

        /// <returns>true - да, false - нет</returns>

        public bool is_locked(int[] sensors)

        {

            foreach (int item in sensors)

            {

                if (item < lock_threahold) return false;

            }

            return true;

        }

Что будет делать робот в противном случае? Ломать стены, он это может, если их прочность менее 1. Но если ломать стену не надо (на это тратится энергия) то робота надо остановить, если он движется к стене. Для этого предусмотрим вот этот метод:

...

...

Теперь займемся блоком поиска еды. Пусть робот ищет где подзарядиться не случайным блуждаем, а двигаясь по спирали. Если наткнется на стену, то некоторое время ищет случайным блужданием, затем снова запускает с самого начала движение по спирали. Если мы хотим реализовать такой алгоритм, то нам не нужно удалять стратегию случайного блуждания, надо лишь выделить ее в отдельный модуль. Для этого отдельного модуля мы создадим класс, который назовем RandomWalk. но так как у нас будет не одна стратегия поведения, то логичнее сделать у всех стратегий общий класс предок, назвав его, например, Behavior:...

...

...

И также внесем изменения в метод step():

        /// <summary>

        /// Шаг моделирования

        /// </summary>

        /// <param name="sensors">Сигналы с сенсоров</param>

        public void step(int[] sensors)

        {

            food_searcher.active = _energy_level < 70;

            food_searcher.step(drive);

            temp.step();

        }

Все, теперь мы можем протестировать:

Моделирование сознания. Урок 11. Новые стратегии поведения.

сравним со случайным блужданием:

Моделирование сознания. Урок 11. Новые стратегии поведения.

Итак, стратегии поведения "случайное блуждание" и "движение по спирали" реализованы и протестированы. Теперь займемся алгоритмом поиска еды, класс FoodSearcher. К нему мы добавим ряд полей: ...

...

...

... и изменим конструктор:

        /// <summary>

        /// Конструктор по ссылке на привод

        /// </summary>

        /// <param name="a_driver">Ссылка на привод</param>

        public FoodSearcher(Drive a_drive)

        {

            drive = a_drive;

            random_walk = new RandomWalk(drive);

            helix_walk = new HelixWalk(drive);

            active_behavior = helix_walk; //по умолчанию движение по спирали

        }

Также придется переделать у него и метод step(): ...

...

...

...

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

 
Пред. »
 
© 2024 Программирование - это просто
Joomla! - свободное программное обеспечение, распространяемое по лицензии GNU/GPL.
Русская локализация © 2005-2008 Joom.Ru - Русский Дом Joomla!
Design by Mamboteam.com | Powered by Mambobanner.de
Я принимаю Яндекс.Деньги