Генетический алгоритм

Автор работы: Пользователь скрыл имя, 31 Декабря 2010 в 00:58, курсовая работа

Краткое описание

Принятие решения в большинстве случаев заключается в генерации всех возможных альтернатив, их оценке и выборе лучшей среди них. Принять "правильное" решение - значит выбрать такой вариант из числа возможных, в котором с учетом всех разнообразных факторов и противоречивых требований будет оптимизирована некая общая ценность, то есть решение будет в максимальной степени способствовать достижению поставленной цели.

Содержание работы

ВВЕДЕНИЕ 5
1 МОДЕЛИРОВАНИЕ РАБОТЫ НЕЙРОННОЙ СЕТИ 6
2 АЛГОРИТМ ОБРАТНОГО РАСПРОСТРОНЕНИЯ ОШИБКИ 10
3 ГЕНЕТИЧЕСКИЙ АЛГОРИТМ 15
4 ЭФФЕКТИВНОСТЬ ГЕНЕТИЧЕСКИХ АЛГОРИТМОВ 22
4.1 Показатели эффективности генетических алгоритмов 22
4.2 Скорость работы генетических алгоритмов 22
4.3 Устойчивость работы генетических алгоритмов 24
4.4 Направления развития генетических алгоритмов 27
ЗАКЛЮЧЕНИЕ 30
СПИСОК ЛИТЕРАТУРЫ 31
ПРИЛОЖЕНИЕ 32

Содержимое работы - 1 файл

Курсовая_Таня.docx

— 115.30 Кб (Скачать файл)

      Еще одним важнейшим фактором, влияющим на эффективность генетического алгоритма, является оператор отбора. Слепое следование принципу "выживает сильнейший" может привести к сужению области поиска и попаданию найденного решения в область локального экстремума целевой функции. С другой стороны, слишком слабый оператор отбора может привести к замедлению роста качества популяции, а значит, и к замедлению поиска. Кроме того, популяция при этом может не только не улучшаться, но и ухудшаться. Самыми распространенными операторами отбора родителей являются:

- случайный равновероятный отбор;

- рангово-пропорциональный отбор;

- отбор пропорционально значению целевой функции.

      Виды  операторов редукции особей с целью  сохранения размера популяции практически совпадают с видами операторов отбора родителей. Среди них можно перечислить:

- случайное равновероятное удаление;

- удаление К наихудших;

- удаление, обратно пропорциональное значению целевой функции.

      Поскольку процедуры отбора родителей и  редукции разнесены по дей 
ствию во времени и имеют разный смысл, сейчас ведутся активные иссле 
дования с целью выяснения, как влияет согласованность этих процедур на 
эффективность генетического алгоритма. /

      Одним из параметров, также влияющих на устойчивость и скорость поиска, является размер популяции, с которой работает алгоритм. Классические генетические алгоритмы предполагают, что размер популяции должен быть фиксированным. Такие алгоритмы называют алгоритмами стационарного состояния. В этом случае оптимальным считается размер 21о§2(и), где п - количество всех возможных решений задачи.

      Однако  практика показала, что иногда бывает полезно варьировать размер популяции  в определенных пределах. Подобные алгоритмы получили название поколенческих [82]. В данном случае после очередного порождения потомков усечения популяции не происходит. Таким образом, на протяжении нескольких итераций размер популяции может расти, пока не достигнет определенного порога, После чего популяция усекается до своего исходного размера. Такой подход способствует расширению области поиска, но вместе с тем не ведет к значительному снижению скорости, поскольку усечение популяции, хотя и реже, но все же происходит.

     4.4 Направления развития генетических алгоритмов

      Практическая  деятельность человека ставит перед  наукой все новые исследовательские  задачи祥 Область применения генетических алгоритмов постоянно расширяется, что требует их совершенствования  и исследования. Перечислим несколько новых задач, которые могут решаться с использованием генетических алгоритмов, и связанные с ними направления исследований в этой области:

    1) разработка новых методов тестирования генетических алгоритмов; 
    разработка адаптивных генетических алгоритмов;

  1. расширение круга решаемых с использованием генетических алгоритмов задач;
  2. максимальное приближение генетических алгоритмов к естественному эволюционному процессу.

      До  недавнего времени в качестве критерия качества большинства конкретных генетических алгоритмов использовалась эффективность решения задачи получения битового вектора с максимальным числом единичных разрядов. Чем быстрее алгоритм находил наилучшее решение, тем он считался эффективнее. Сейчас эта задача уже не является объективным средством тестирования алгоритмов, что свидетельствует об их бурном развитии не только с точки зрения применимости к тем или иным классам задач, но и с точки зрения их внутреннего построения и принципов работы.

      В области исследований, направленных на повышение эффективности генетических алгоритмов, большое значение приобрели  идеи создания адаптивных генетических алгоритмов, которые могут изменять свои параметры в процессе работы. Они стали продолжением развития идеи поколенческих алгоритмов, которые в процессе работы изменяют размер популяции. Адаптивные алгоритмы способны изменять не только этот параметр, но и суть генетических операторов, вероятность мутации и даже генотип алгоритма. Как правило, данные изменения происходят путем выбора параметров из нескольких вариантов, определенных перед началом работы алгоритма.

      Идея  адаптивных генетических алгоритмов получила свое воплощение в концепции, представляющей многоуровневые генетические алгоритмы. Нижний уровень такого алгоритма непосредственно выполняет задачу улучшения популяции решений. Верхние уровни представляют собой генетические алгоритмы, решающие оптимизационную задачу по улучшению параметров алгоритма нижнего уровня. При этом в качестве целевой функции используется обычно скорость работы алгоритма нижнего уровня и скорость улучшения им популяции от поколения к поколению.

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

      До  сих пор продолжается дискуссия  между сторонниками универсальных  и проблемно-ориентированных представлений  задач при использовании эволюционных вычислений. Можно говорить, что  в этом вопросе чаша весов, склоняется в сторону универсальных, в которых  можно осуществлять изменения на уровне генотипа значительно проще  и эффективнее, чем на уровне фенотипа.

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

      Идея  приближения генетических алгоритмов к реальному эволюционному процессу нашла свое отражение и в предложениях ввести в рассмотрение такие понятия, как вид и пол, учитывать взаимодействие особей в популяции в процессе "жизни", причем особей как одного вида, так и различных. Это позволит моделировать процессы сотрудничества, отношений хозяев и паразитов и т. д.

      Помимо  этих новых течений в области  исследования генетических алгоритмов ведутся работы и в традиционных направлениях. Создаются все новые разновидности операторов отбора, скрещивания и мутации. Конструируются адаптивные алгоритмы, совершенствуются методы распараллеливания вычислений и структурирования популяций. Одновременно разрабатываются методики оценки эффективности и тестирования генетических алгоритмов.

      Таким образом, генетические алгоритмы представляют собой одну из важных и активно  развивающихся парадигм обширной области  алгоритмов поиска оптимальных решений. И в последнее время, с развитием методов компьютерной поддержки принятия решений, они приобретают все большее значение. 

 

       ЗАКЛЮЧЕНИЕ

 

       В ходе данной работы была  построена модель нейрона, нейронной сети. Для обучения сети был использовании алгоритм обратного распространения ошибки, являющийся наиболее распространённым алгоритмом при обучении нейронных сетей. Для обучения сети был применен генетический алгоритм. Программирование и обучение нейронных сетей очень интересное и увлекательное занятие. Роль генетических алгоритмом и нейронных сетей в настоящее время очень велика, поэтому знание и умение программировать их необходимо знать.

 

    СПИСОК ЛИТЕРАТУРЫ

 

1) Курс лекций по дисциплине «Интеллектуальные ИС», Гурьев А.Т. , 2008

2) Лабораторный практикум по дисциплине «Интеллектуальные ИС», 2008г.

3) Методические пособия по дисциплине «Интеллектуальные ИС», 2008г.

4) Нейрокомпьютерная техника, Ф.Уоссермен, 1992.

5) Нейронные сети: основные положения, С.Короткий, 2008г.

 

ПРИЛОЖЕНИЕ

(обязательное) 
 

using System;

using System.Collections.Generic;

using System.Text;

using System.Collections;

using System.IO;

namespace neuro

{

      struct SandY//резултат работы нейрона

      {

            public double S;//сумма

            public double Y;//значение  активизационной функции

      }

      class Program

      {

            static Random ver = new Random();

            static int s = 0;//для рандомайза 

            static int[] NMinIndexesValue(int N, double[] mass)//Возвращает N индексов для наименьших значений mass

            {

                  int[] resultMin = new int[N];

                  double[] arr = new double[mass.Length];

                  int[] ind = new int[mass.Length];

                  for (int i = 0; i < mass.Length; i++)

                  {

                        arr[i] = mass[i];

                        ind[i] = i;

                  }

                  double x;

                  int x1;

                  for (int i = 0; i < mass.Length; i++)

                  {

                        for (int j = mass.Length - 1; j > i; j--)

                        {

                              if (arr[j - 1] > arr[j])

                              {

                                    x = arr[j - 1];

                                    x1 = ind[j - 1];

                                    arr[j - 1] = arr[j];

                                    ind[j - 1] = ind[j];

                                    arr[j] = x;

                                    ind[j] = x1;

                              }

                        }

                  }

                  for (int n = 0; n < N; n++)

                  {

                        resultMin[n] = ind[n];

                  }

                  return resultMin;

            }

            static void mutation(double[][] W)// оператор мутации

            {

                  Random rnd = new Random(s);

                  int rnd1 = rnd.Next(0, 5);

                  int rnd2 = rnd.Next(0, 5); 

                  double[] temp = new double[W[rnd1].Length];

                  double[] temp2 = new double[W.Length];

                  //меняет местами  случайную строку и случайный  столбец - и все портит =)

Информация о работе Генетический алгоритм