
- •1 Генетичні алгоритми
- •1.1 Основні поняття генетичних алгоритмів
- •Опис довільного генетичного алгоритму
- •1.3 Етапи довільного генетичного алгоритму
- •Опис довільного генетичного алгоритму
- •2.1 Створення початкової популяції
- •2.3 Алгоритмічне розмноження
- •2.4 Мутації
- •3 Реалізація генетичних алгоритмів
- •3.2 Застосування генетичних алгоритмів
- •3.3 Класичний генетичний алгоритм
- •4 Еволюційне програмування
- •4.1 Сучасне еволюційне програмування
- •4.2 Галузі Застосування еволюційного програмування
- •Висновки
- •Перелік посилань
2.4 Мутації
Мутація - це перетворення хромосоми, що випадково змінює одну чи декілька її позицій (генів). Найбільш розповсюджений вид мутацій - випадкова зміна тільки одного з генів хромосоми.
До мутацій відноситься все те ж, що і до розмноження: є деяка доля мутантів m, що є параметром генетичного алгоритму, і на кроці мутацій необхідно вибрати m*N осіб, а згодом змінити їх згідно із заздалегідь заданими операціями мутації [5].
3 Реалізація генетичних алгоритмів
3.1 Приклад реалізації генетичного алгоритму на С++
Пошук в одномірному просторі, без схрещення. Ця програма вважає більші за значенням елементи представлені цілими числами найбільш життєздатними.
# include <iostream.h>
# include <algorithm.h>
# include <numeric.h>
using namespace std;
int main()
{
//початковий масив (популяція) з 1000 елементів (осіб).
const int N = 1000;
int a[N];
//заповнимо елементи нулями
fill(a, a+N, 0);
for (;;)
{
//Мутація кожного елемента.
//Випадково збільшуємо або зменшуємо значення елементу на один;
for (int i = 0; i < N; ++i)
if (rand()%2 == 1)
a[i] += 1;
else
a[i] -= 1;
//відсортуванням по зростанню вибираємо більші за значенням.
sort(a, a+N);
//... і тоді більші за значенням виявляться в другій частині масиву.
//скопіюємо більші в першу половину, коли вони залишили нащадків, а перші померли:
copy(a+N/2, a+N, a /*куди*/);
//тепер поглянемо на середнє значення елементу популяції. Як бачимо, середнє значення все більше і більше.
cout << accumulate(a, a+N, 0) / N << endl;
}
}
3.2 Застосування генетичних алгоритмів
Генетичні алгоритми в різних формах застосовуються до вирішення багатьох наукових і технічних проблем.
Генетичні алгоритми використовуються при створенні інших обчислювальних структур, наприклад, автоматів або мереж сортування. У машинному навчанні вони використовуються при проектуванні нейронних мереж або керуванні роботами. Вони також застосовуються при моделюванні розвитку в різних предметних областях, включаючи біологічні (екологія, імунологія і популяційна генетика) та соціальні (такі як економіка і політичні системи) системи.
Проте, можливо найбільш популярне застосування генетичних алгоритмів - оптимізація багато-параметричних функцій.
Багато реальних задач можуть бути сформульовані як пошук оптимального значення, де значення - складна функція, що залежить від певних вхідних параметрів.
У деяких випадках, потрібно знайти ті значення параметрів, при яких досягається найкраще точне значення функції.
В інших випадках, точний оптимум не потрібний - рішенням може вважатися будь-яке значення, краще за певну задану величину. У цьому випадку, генетичні алгоритми - часто найбільш прийнятний метод для пошуку прийнятних значень.
Сила генетичного алгоритму полягає в його здатності маніпулювати одночасно багатьма параметрами, що використовується в сотнях прикладних програм, включаючи проектування літаків, налаштування параметрів алгоритмів і пошуку стійких станів систем нелінійних диференціальних рівнянь.
Генетичні алгоритми застосовується для вирішення наступних задач:
Оптимізація функцій
Оптимізація запитів в базах даних
Різноманітні задачі на графах (задача комівояжера, розфарбування)
Налаштування і навчання штучної нейронної мережі
Задачі компоновки
Створення розкладів
Ігрові стратегії
Апромоксація функцій
Штучне життя
Біоінформатика (згортання білків)
Можна підсумувати, що генетичні алгоритми є ефективною процедурою пошуку, що конкурує з іншими процедурами.
Ефективність генетичних алгоритмів сильно залежить від таких деталей, як метод кодування рішень, операторів, налаштування параметрів, окремих критеріїв успіху.
Теоретична робота, відбита в літературі, присвяченої генетичним алгоритмам, не дає підстав говорити про вироблення певних строгих механізмів для чітких передбачень [3].