14
Курсов проект СУ “Св. Климент Охридски”, ФМИ тема Архитектура за Генетичен Алгоритъм ръководител: ст.н.с. Генади Агре Студенти: Росен Димов, ф.н. М-21664

Архитектура за Генетичен Алгоритъм

Embed Size (px)

Citation preview

Курсов проект

СУ “Св. Климент Охридски”, ФМИ

тема

Архитектура за Генетичен Алгоритъм

ръководител:ст.н.с. Генади Агре

Студенти:Росен Димов, ф.н. М-21664

Александър Стаменов, ф.н. М-21576

Февруари 2005 г.

Съдържание

1. Въведение2. Архитектура на фреймуърка3. Реализация на конкретна задача

ИнициализацияФитнес функцияСелекцияКръстосванеСледваща генерацияМутация

4. Използване на приложението5. Примери6. Анализи7. Приложения

2

"In the struggle for survival, the fittest win out at

the expense of their rivals because they succeed in

adapting themselves best to their environment."

Чарлз Робърт Дарвин

1. Въведение

Генетичните алгоритми са опит за моделиране на дарвиновата еволюция в термините на компютърна програма.

Формализирането на естествените процеси за една популация от индивиди е нелека, и не задължително възможна задача. Очевидната комплексност на динамиката в развитието на съвкупност от организми не е причина за отричането на опити за тяхното пресъздаване.

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

Настоящият проект има две основни цели. Първата е да предложи програмна архитектура, която да може да бъде прилагана за задачи от различни предметни области. Стрмежа е за всеки отделен проблем да е нужно да се дефинират само основните генетични оператори.

По този начин се предоставя едно ядро от функционалност, което може да бъде преизползвано.

Втората основна цел е да се проверят резултатите представени в статия [1], описваща приложение на генетичен алгоритъм в подобряване на работата на класификатор базиран на метода "най-близък съсед".

3

2. Архитектура на фреймуърка

Така нареченият фреймуърк представлява йерархия от класове и интерфейси реализирани на езика C#, които описват абстрактни оператори на един абстрактен генетичен алгоритъм. Като в случая свободно можем да използваме като синоним на абстрактен термина обобщен.

Генетичният алгоритъм е описан в класа GAEngine.GAE. Обект от този клас има два компонента PopulationManager и IFinisher. Посредством тях алгоритъмът се освобождава от термините на конкретна задача и работи над абстрактна популация, с абстрактни генетични оператори (капсулирани в PopulationManager) и абстрактно условие за край. Всичко, което е нужно да направи, е да приложи операторите в необходимата последователност.

Генетичните оператори от своя страна са описани от интерфейси, откъдето идва и абстрактността им:

IInitializatorArrayList InitPopulation( int Size );

Инициализира популация от индивиди (Specimen обекти).

IMateSelectorArrayList ChooseMates( ArrayList ParentsPopulation );

Конструира списък от двойки (MatePair обекти), които да участват в кръстосването. ICrossover ArrayList CrossoverPopulation( ArrayList ParentsPairs );Операторът за кръстосване. Получава като вход двойки от родителски индивиди и генерира списък от детски индивиди. IEvaluater

void EvaluateFitness( ArrayList Population );Описва фитнес функцията. Оценява всеки индивид.

4

IUpdatervoid UpdatePopulation(

ArrayList ParentsPopulation, ArrayList ChildsPopultaion );

На базата на текущата популация и "новородените" индивиди конструира популацията, която ще премине в следващата генерация. IMutator

void MutatePopulation( ArrayList ParentsPopulation ); Операторът мутация.

За дадена конкретна задача всеки един от операторите трябва да бъде реализиран в съответствие с конкретните нейни особености.

3. Реализация на конкретна задача

Конкретната задача, която избрахме е реализиране на постановката представена в статията на Kubat и Rozsypal [1]. Авторите предлагат генетичният алгоритъм за решаване на проблема за намиране на прототипи в обучаващо множество, които в последствие да бъдат използвани като центрове в работата на kNN алгоритъм.

Обучаващото множество се състои от примери. Всеки от тях е вектор от стойности, съответстващи на фиксиран набор от атрибути, между които и класът, към който принадлежи съответният пример.

Целта на алгоритъма е да определи набор от примери и подмножество от релевантни атрибути.

Следвайки постановката в [1], един индивид представлява вектор от цели числа.

ИнициализацияВсеки индивид се инициализира като дължината му се определя

по формулата:

length = attributeLength + CONST,

където CONST е константа определена при инициализирането на алгоритъма от графичната среда.

5

Отделните координати във вектора са произволни цели числа от 1 до размера на обучаващото множество.

Фитнес функция

Пресмята се по следната формула:Fitness = 1 / ( C1 * ErrorRate + C2 * RetainSize );

C1 и C2 са константи, които могат да се променят от панела с параметри на приложението.ErrorRate е процентът на вярно класифицираните примери, изчислен с помощта на kNN, спрямо текущата хромозома.RetainSize е процентът на ядрата в текущата хромозома.

СелекцияРеализирани са два метода за селекция на партньори:

- метод на рулетката;- ранг селектор.

КръстосванеРеализиране е двуточково кръстосване. Особеността е, че от

всеки от родителите се избира различен в общия случай интервал от хромозомата, който да бъде обменен. По този начин гарантираме, с определена веряотност, че хромозомите “деца” ще бъдат с различни дължини.

Следваща генерацияС помощта на този оператор “сливаме” текущата популация и

новосъздадените индивиди и от тях конструираме популацията, която ще премине в следващата генерация.

След сливането индивидите се сортират по своя фитнес фактор. Вземаме първите |CurrentGeneration| на брой индивида, започвайки от тези с най-висок фитнес.

МутацияОператорът “мутация” е едноточков. С определна в графичната

среда при инициализирането вероятност се избира произволен ген от хромозомата и към него се прибавя произволно цяло число.

Тъй като трябва да гарантираме, че гените са номера на примери от обучаващото множество, получената сума е нужно да разделим по модул броя на примерите.

6

Входните параметри за генетичният алгоритъм се задават от графичната среда.

4. Използване на приложението

За да започнете работа с приложението е нужно да имате подготвени бази данни от типа .name, с които системата работи.

Зареждането на конкретна база с примери се извършва посредством менюто File > Open Database или просто клавишната комбинация (Ctrl+O). В таблица се зареждат данните така както са показани на фиг.1.

фиг. 1. Зареждане на текстова база данни с примери за обучение.

Заредените данни са в “суров” вид така както са предоставени ос авторите на .name файла. За да бъдат приведени във вид удобен за работа на гнетичния алгоритъм е нужно да бъдат нормализирани (в случаите на атрибуте с дефиниционна област реалните числа) и индексирани (в случаите на атрибути с номинални стойности).

Тази операция се извършва посредством менюто Edit > Parse Data или с клавишната комбинация (Ctrl+P).

Обработените данни могат да бъдат видяни в таб контрола “ParsedData”.

На фиг. 2. са показани различните параметри, които могат да бъдат зададени на генетичния алгоритъм. В combo-box-овете ще могат да бъдат избирани различни имплементации за конкретните методи.

7

Добавянето на нов метод е изключително лесно, благодарение на гъвкавата архитектура. Създава се клас, който имплеметира съответният интерфейс и в който се добавя новият метод. Добавя се нова опция на combo-box-а и се добавя в съотвтният switch оператор в GAEngine.cs.

Фиг. 3. показва примерна диаграма на историята на процеса на генетичния алгоритъм.

фиг. 2. Параметри на генетичния алгоритъм

8

фиг. 3. Графика на текущото състояние на популацията.

5. ПримериПредстои да бъдат завършени

6. АнализиПредстои да бъдат завършени

7. Приложения

9

Приложение А – Клас-диаграма на фреймуърка

8. Библиография

[1] Kubat, M. & Rozsypal, A. “Using the Genetic Algorithm to Reduce the Size of a Nearest-Neighbor Classifier and to Select Relevant Attributes”.

[2] http://cs.felk.cvut.cz/~xobitko/ga/index.html

10