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

Генетический алгоритм. Урок 1. Решение многочлена

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

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


Исходники к уроку можно скачать в платном разделе.

Разговор двух блондинок:

- Ну что, поступила в Институт?

- Нет,  не поступила.

- А что-ж так?

- Дык, задали мне решить какой то там квадратный трехчлен.

А я даже представить себе такого не могу!

Сегодня мы рассмотрим применение генетического алгоритма для решения многочлена степени три и более (поскольку уравнение степени два решаются легко любым адекватным школьником).  Как можно решить, например, вот такое уравнение 5x5+7x4-8x3+4x2-11x-202? Ясно, что тупым перебором тут не отделаться, ибо нереально перебрать все числа. К тому же, у многочлена может быть не один корень. И тут на выручку нам приходит генетический алгоритм. Его муть состоит в том, оптимизируемые параметры кодируются в специальный формат, называемый генетическим кодом. Наборы таких параметров называются "особи", а совокупность "особей" - "популяцией". Для каждой "особи" вычисляется целевая функция, затем происходит сортировка и из "популяции" удаляются "особи" с наихудшим значением целевой функции. "Особи" могут "скрещиваться" между собой. Этот процесс происходит следующим образом:  два "гена" рассекаются в случайном месте, и новый "ген" получается из соединения частей этих двух генов. Так же "особи" могут "мутировать". Суть мутации состоит в том, что случайным образом изменяется какой нибудь бит "гена".

Таким образом, путем естественно отбора, в выборе остаются только те комбинации параметров, которые лучшим образом соответствуют решению, например, имеют наименьшую целевую функцию. Если мы вычислим значение многочлена, и возьмем его по модулю, то это значение у нас должно стремиться к нулю....

....

....При нажатии на кнопочку "Тест шаг" у нас будет выполнятся переход к следующему поколению:

        private void lbTest_Click(object sender, EventArgs e)

        {

            pop.NextGeneration();

            show();

        }

При нажатии на кнопочку "Обучение" у нас должно происходить генерация множества поколений, например, 100:

        private void btnStudy_Click(object sender, EventArgs e)

        {

            for(int i=1; i<100; i++)

            {

                pop.NextGeneration();

            }

            show();

        }

...

... Теперь перейдем к тестированию. И так, вот первоначальное поколение:

Генетический алгоритм. Урок 1. Решение многочлена

Как видим, и целевая функция даже близко не валяется с нулем. Жмем кнопочку "Тест шаг":

Генетический алгоритм. Урок 1. Решение многочлена

Жмем еще раз:

Генетический алгоритм. Урок 1. Решение многочлена

Как видим, количество видов лучшей целевой функцией увеличилась. В идеале, конечно, что бы она (целевая функция) достигла нуля. Жмем еще раз:

Генетический алгоритм. Урок 1. Решение многочлена

Что же мы видим? У нас появился вид с целевой функцией лучше, чем на прошлом шаге. В общем, с каждым шагам качество популяции улучшается. что будет, если мы пропустим 100 поколений? Вот, смотрите:

Генетический алгоритм. Урок 1. Решение многочлена

Фактически, у нас все особи имеют значение целевой функции, близкой к нулю (к идеальному значению). Тоесть, мы решили уравнение.  Давайте проверим:

5x5+7x4-8x3+4x2-11x-202=5*25+7*24-8*23+4*22-11*2-202=5*32+7*16-8*8+4*4-22-202=160+112-64+16-22-202=0

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


Скриншоты, помеченные знаком *, являются цитатами и иллюстрациями  программного продукта "Microsoft Visual Studio 2010 Professional", авторское право на который принадлежит корпорации Microsoft.. 


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