Программирование - это просто
Advertisement
Главная arrow Искусственный интеллект arrow Искусственный интеллект arrow Моделирование сознания (платный раздел). arrow Моделирование сознания. Урок 11. Новые стратегии поведения.
18.07.2018 г.
Главное меню
Главная
Системный подход
Интернет магазин
Биржевые роботы
Программные продукты
Математика и информатика
1С:Предприятие
C#, Delphi, VB, F#, Web и пр.
Искусственный интеллект
Услуги
Ча. Во. (FAQ)
Платный раздел
Наука для чайников
Разное
Размышления
Карта сайта
Друзья сайта
Excel-это не сложно
Все о финансах
Моделирование сознания. Урок 11. Новые стратегии поведения. Печать E-mail
Автор megabax   
11.02.2017 г.
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 и все начинает с сначала. Но улучать мы его будет уже в следующих уроках.

Последнее обновление ( 11.02.2017 г. )
 
« След.   Пред. »
 
© 2018 Программирование - это просто
Joomla! - свободное программное обеспечение, распространяемое по лицензии GNU/GPL.
Русская локализация © 2005-2008 Joom.Ru - Русский Дом Joomla!
Design by Mamboteam.com | Powered by Mambobanner.de
Я принимаю Яндекс.Деньги
Мы принимаем
Банковские карты
Оплатите покупку в интернет-магазине банковскими картами VISA и Mastercard любого банка.
узнать больше
Электронный кошелек
Моментальная оплата покупок с помощью вашего электронного кошелька RBK Money.
узнать больше
Банковский платеж
Оплатите покупку в любом российском банке. Срок зачисления средств на счет - 3-5 рабочих дней.
узнать больше
Денежные переводы
Оплата покупок через крупнейшие системы денежных переводов CONTACT и Unistream.
узнать больше
Почтовые переводы
Оплатите покупку в любом отделении Почты России. Срок зачисления платежа - 3-4 рабочих дня.
узнать больше
Платежные терминалы
Оплата покупок в терминалах крупнейших платежных систем в любом городе России - быстро и без комиссии.
узнать больше