Программирование - это просто
Advertisement
Главная arrow Уроки C# arrow Моделирование сознания arrow Моделирование сознания. Урок 11. Новые стратегии поведения.
08.05.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
Я принимаю Яндекс.Деньги