Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Технологии обработки данных в прогнозировании


Информационный Канал Subscribe.Ru Новый модный поиск - www.lycos.ru

rass_4

Выпуск 3.   Генетические алгоритмы (Часть 2)

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

Предыдущие выпуски

                                                           Здравствуйте!                                                             

В   предыдущем выпуске  были закончены все подготовительные операции для генетического алгоритма. Сам алгоритм приведен в выпуске 2.  Выпуск 4 посвящен некоторым частным операциям, применяемым в ГА.  Во-первых, кроссовер может быть как одноточковым так и двухточковым и многоточковым (описание такого не встречалось, но теоретически вполне возможно, причем вариантов алгоритма - множество). Вероятности выбора родительских пар тоже могут определяться по-разному. Известны следующие способы [7]:  

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

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

{Процедура мутации. P-вероятность мутации, Str_Mut1- начальная бинарная строка, Str_Mut2 - результат мутации, raz - размер бинарной строки}

Procedure Tgenetic.Mutation(var Str_Mut1,Str_Mut2:string;raz:integer);
var r1:real;sm1,s3:string;k:integer;
begin
r1:=random; sm1:=Str_Mut1;
if r1<P_mutation then begin
k:=random(raz-1)+1;
s3:=copy(sm1,k,1);
delete(sm1,k,1);
if s3='0' then insert('1',sm1,k) else insert('0',sm1,k);
Str_Mut2:=sm1;
end
else Str_Mut2:=Str_Mut1;
end;

{Процедура кроссовера. Par_1,Par_2 - родители-генотипы, Son - потомок, raz - размер бинарной строки, kk - случайное число, указывающее на точку деления}
Procedure Tgenetic.Crossover(var Par_1,Par_2,Son:string;var raz:integer;var kk:byte);
var l:integer;c1,c2,P_1,P_2:string;r1:real;
begin
l:=length(Par_1);
kk:=random(raz-1)+1;
P_1:=Par_1;
P_2:=Par_2;
c1:=copy(P_1,kk,l-kk+1);
c2:=copy(P_2,1,kk-1);
delete(P_1,kk,l-kk+1);
delete(P_2,1,kk-1);
P_2:=concat(P_1,P_2);
P_1:=concat(c2,c1);
r1:=random;
if r1<0.5 then Son:=P_1 else Son:=P_2;
end;

        
                                                       

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

                                 Написать автору рассылки

 


http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное