Идеята за генетичните алгоритми (GA) се появи доста отдавна (1950–1975), но те станаха истински обект на изследване едва през последните десетилетия. Г. Холанд се смяташе за пионер в тази област, който взел назаем много генетика и ги адаптирал за компютри. GAs широко се използват в системите за изкуствен интелект, невронни мрежи и оптимизационни проблеми.
Модели на генетични алгоритми са създадени въз основа на еволюцията в дивата природа и методите на случайно търсене. В същото време случайното търсене е реализация на най-простата еволюционна функция - случайни мутации и последваща селекция.
От математическа гледна точка еволюционното търсене не означава нищо повече от превръщането на съществуващо крайно множество от решения в ново. Функцията, отговорна за този процес, е генетичното търсене. Основната разлика на такъв алгоритъм от случайно търсене е активното използване на информацията, натрупана по време на повторения (повторения).
GA има следните цели:
В момента, същността на генетичните алгоритми и техните модифицирани версии може да се нарече търсене на ефективни решения, като се отчита качеството на резултата. С други думи, намирането на най-добрия баланс между производителност и точност. Това се дължи на добре познатата парадигма на "оцеляване на най-силния индивид" в несигурни и размити условия.
Ние изброяваме основните разлики на GA от повечето други методи за намиране на оптималното решение.
Генетичните алгоритми правят изчисления на базата на две условия:
Ако едно от тези условия е изпълнено, генетичният алгоритъм ще спре да извършва допълнителни повторения. В допълнение, използването на ГА в различни области на пространството за решения им позволява да намерят много по-добри нови решения, които имат по-подходящи стойности на целевата функция.
Поради факта, че GA се основава на генетиката, по-голямата част от терминологията съответства на нея. Всеки генетичен алгоритъм работи въз основа на първоначалната информация. Наборът от начални стойности е популацията t t = {n 1 , n 2 , ..., n n }, където n i = {r 1 , ..., r v }. Ще разгледаме по-подробно:
Какво означава "кодиран" в контекста на GA? Обикновено всяка стойност се кодира на базата на азбука. Най-простият пример е преобразуването на числа от десетичната система в двоичното представяне. По този начин азбуката е представена като множеството {0, 1}, а числото 157 10 ще бъде кодирано от хромозома 100111012, състояща се от осем гена.
Родителите са елементите, избрани в съответствие с дадено условие. Например, често това състояние е инцидент. Избрани елементи, дължащи се на операции на кръстосване и мутация, пораждат нови, които се наричат потомци. По този начин родителите по време на изпълнението на една итерация на генетичния алгоритъм създават ново поколение.
И накрая, еволюцията в този контекст ще бъде редуването на поколенията, всяко ново от които се отличава с набор от хромозоми за по-добра фитнес, т.е. по-подходящо съответствие с определените условия. Общият генетичен фон в процеса на еволюцията се нарича генотип, а формирането на връзката на организма с външната среда се нарича фенотип.
Магията на генетичния алгоритъм във фитнес функцията. Всеки индивид има своя собствена стойност, която може да се научи чрез функцията на адаптация. Неговата основна задача е да оцени тези стойности за различни алтернативни решения и да избере най-добрата. С други думи, най-силният.
При оптимизационните задачи функцията на фитнеса се нарича мишена, в теорията на контрола - грешка, в теорията на игрите - функция на стойността и т.н. Какво точно ще бъде представено като функция на адаптацията зависи от проблема, който трябва да бъде решен.
В крайна сметка може да се заключи, че генетичните алгоритми анализират популация от индивиди, организми или хромозоми, всяка от които е представена от комбинация от гени (набор от някои стойности) и търсят оптимално решение, превръщайки индивидите от популацията чрез изкуствена еволюция.
Отклоненията в една или друга посока от отделни елементи в общия случай са в съответствие с нормалния закон за разпределение на количествата. В същото време ГА осигурява наследственост на черти, най-приспособените от които са фиксирани, като по този начин осигурява най-доброто население.
Ние разлагаме на стъпки най-простия (класически) GA.
Нека да разгледаме накратко очевидните части на алгоритъма. Има две условия за прекратяване:
Генетичните оператори са оператор на мутация и кросоувър оператор. Мутацията променя случайни гени с определена вероятност. По правило вероятността за мутация има ниска числена стойност. Нека поговорим повече за процедурата на генетичния алгоритъм "пресичане". Това се случва по следния принцип:
Ние решаваме проблема чрез генетичен алгоритъм, като използваме примера за търсене на индивид с максималния брой единици. Нека индивидът се състои от 10 гена. Определяме основната популация в размер на осем индивида. Очевидно е, че най-добрият човек трябва да бъде 1111111111. Нека да компенсираме решението на GA.
n 1 | 1110010101 | n 5 | 0101000110 |
n 2 | 1100111010 | n 6 | 0100110101 |
n 3 | 1110011110 | n 7 | 0110111011 |
n 4 | 1011000000 | n 8 | 0100001001 |
n i | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
F (n i ) | 6 | 7 | 8 | 3 | 4 | 5 | 7 | 3 |
Таблицата показва, че индивиди 3 и 7 имат най-голям брой единици и затова са най-подходящите членове на населението за решаване на проблема. Тъй като в момента няма решение с необходимото качество, алгоритъмът продължава да работи. Необходимо е да се извърши подбор на лица. За улеснение на обяснението, селекцията трябва да бъде случайна и ние получаваме извадка от индивиди {n 7 , n 3 , n 1 , n 7 , n 3 , n 7 , n 4 , n 2 } - това са родителите на новата популация.
двойка | (стр 2 , стр 7 ) | (n 1 , n 7 ) | (p 3 , p 4 ) | (стр 3 , стр 7 ) |
родители | [1100111010] [0110111011] | [1110010101] [0110111011] | [1110011110] [1011000000] | [1110011110] [0110111011] |
Tsk i | 3 | 5 | 2 | 8 |
потомци | [1100111011] [0110111010] | [1110011011] [0110110101] | [1111000000] [1010011110] | [1110011111] [0110111010] |
n 1 | 1100111011 | n 5 | 1111000000 |
n 2 | 0110111010 | n 6 | 1010011110 |
n 3 | 1110011011 | n 7 | 1110011111 |
n 4 | 0110110101 | n 8 | 0110111010 |
n i | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
F (n i ) | 7 | 6 | 7 | 6 | 4 | 6 | 8 | 6 |
По-нататъшни действия са очевидни. Най-интересното в GA е, ако преценим средния брой единици във всяка популация. При първото население средно за всеки индивид е имало 5.375 единици, в популацията на потомците - 6.25 единици на човек. И такава характеристика ще се наблюдава дори ако по време на мутациите и пресичането на индивида с най-голям брой единици в първата популация се загуби.
Създаването на генетичен алгоритъм е доста сложна задача. Първо, ще изброим плана под формата на стъпки, след което ще разгледаме всеки един от тях по-подробно.
Първият етап казва, че азбуката, в която ще бъдат кодирани всички елементи на набор от решения или население, трябва да бъде достатъчно гъвкава, за да позволи на необходимите произволни пермутации да бъдат изпълнени едновременно и да оцени годността на елементите, както първичните, така и тези, които са преминали през промените. Математически е установено, че е невъзможно да се създаде идеална азбука за тези цели, поради което компилирането й е една от най-трудните и решаващи стъпки за осигуряване на стабилна работа на ГА.
Също толкова трудно е да се определят изявленията за промяна и да се създават потомци. Има много оператори, които са в състояние да изпълнят необходимите действия. Например от биологията е известно, че всеки вид може да се размножава по два начина: сексуално (чрез кръстосване) и асексуален (чрез мутации). В първия случай родителите обменят генетичен материал, а във втория - се случват мутации, определени от вътрешните механизми на тялото и външното влияние. Освен това могат да се използват репродуктивни модели, които не съществуват в дивата природа. Например, използвайте гените на три или повече родители. По същия начин, преминаването на мутация в генетичен алгоритъм може да включва разнообразен механизъм.
Изборът на метод за оцеляване може да бъде изключително измамен. Има много начини в генетичния алгоритъм за размножаване. И както показва практиката, правилото за "оцеляването на най-силния" не винаги е най-доброто. При решаването на сложни технически проблеми често се оказва, че най-доброто решение идва от множество средни или дори по-лоши. Затова често се приема вероятностен подход, според който най-доброто решение има по-голям шанс за оцеляване.
Последният етап осигурява гъвкавостта на алгоритъма, който никой друг няма. Първоначалната популация от решения може да се определи или въз основа на всички известни данни, или по напълно случаен начин чрез просто пренареждане на гените вътре в индивидите и създаване на случайни индивиди. Въпреки това, винаги си струва да си припомним, че ефективността на алгоритъма зависи от първоначалната популация.
Ефективността на генетичния алгоритъм зависи изцяло от правилността на стъпките, описани в плана. Особено влиятелен елемент тук е създаването на основно население. Има много подходи за това. Ние описваме няколко:
Така можем да заключим, че ефективността на генетичните алгоритми зависи до голяма степен от опита на програмиста в тази област. Това е едновременно недостатък на генетичните алгоритми и тяхното предимство.