
- •Введення
- •Лабораторна робота №1 Основи генетичних алгоритмів. Простій генетичний алгоритм Загальні відомості
- •Генетичні оператори
- •Репродукція
- •Оператор кросинговера (схрещування)
- •Мутація
- •Представлення рішень в двійковій формі
- •Логарифмічне кодування
- •Порядок виконання лабораторної роботи
- •Завдання
- •Контрольні запитання
- •Оператори кросинговеру
- •Оператори мутації
- •Тестові приклади
- •Порядок виконання лабораторної роботи
- •Контрольні питання
- •Лабораторна робота №3 Рішення завдання комівояжера за допомогою генетичних алгоритмів Загальні відомості
- •Представлення сусідства
- •Порядкове представлення
- •Шляхове представлення
- •Завдання
- •Контрольні питання
- •Лабораторна робота №4 Генетичне програмування Загальні відомості
- •Термінальна множина
- •Функціональна множина
- •Структури для представлення програм
- •Деревовидна структура
- •Лінійні структури
- •Графоподібні структури
- •Ініціалізація початкової популяції
- •Ініціалізація деревовидних структур
- •Ініціалізація лінійних структур
- •Кросинговер в генетичному програмуванні
- •Виконання ок на деревовидних структурах
- •Ок на лінійних структурах
- •Виконання ок для графоподібних структурах
- •Мутація в генетичному програмуванні
- •Виконання мутації на деревовидних структурах
- •Виконання мутації на лінійних структурах
- •Виконання мутації на графоподібних структурах
- •Фітнес-функція в генетичному програмуванні
- •Інтрони
- •Загальний алгоритм генетичного програмування
- •Порядок виконання лабораторної роботи
- •Завдання
- •Контрольні запитання
- •Литература
- •Методичнi вказiвки До виконання лабораторних робіт
Порядкове представлення
Порядкове представлення представляє тур як список з n міст; i-й елемент списку - номер від 1 до n-i-1. Ідея порядкового представлення полягає в наступному. Є кілька впорядкованих списків міст ІЗ, які служать як точки зв'язку для списків з порядковим представленням. Припустимо, наприклад, що такий упорядкований список простий:
(1 2 3 4 5 6 7 8 9).
Тоді тур
1-2-4-3-8-5-9-6-7
буде представлений як список l з посилань,
l=(1 1 2 1 4 1 3 1 1)
і може бути інтерпретований у такий спосіб:
Тому що перший номер списку l 1, беремо перше місто зі списку З як перше місто з тура (місто номер 1), і виключаємо його зі списку. Частина маршруту - це
1
Наступний номер у списку l також 1, тому беремо перший номер зі списку, що залишився. Оскільки ми виключили зі списку l 1-е місто, наступне місто - 2. Виключаємо й це місто зі списку. Маршрут:
1 - 2
Наступний номер у списку l - 2. Беремо зі списку l 2-ий друге по порядку місто, з тих що залишилися. Це - 4. Виключаємо його зі списку. Маршрут:
1 - 2 - 4
Наступний номер у списку l - 1. Беремо зі списку l 1-й місто - № 3. Маємо маршрут
1 - 2 - 4 - 3
Наступний у списку l - 4, беремо 4-й місто зі списку, що залишився (8).
Маршрут:
1 - 2 - 4 - 3 - 8
Наступний номер у списку l - 1. Беремо зі списку l 1-й місто - № 5. Маршрут:
1 - 2 - 4 - 3 - 8 - 5
Наступний номер у списку l - 3. Беремо наступне місто зі списку (9). Видаляємо його із С. Маршрут:
1 - 2 - 4 - 3 - 8 - 5 - 9
Наступний номер у списку l - 1, тому беремо перше місто з поточного списку С и наступне місто маршруту (місто номер 6), і видаляємо його із С. Частковий маршрут має вигляд:
1 - 2 - 4 - 3 - 8 - 5 - 9 - 6
Останнім номером у списку l завжди буде 1, тому беремо останнє місто, що залишилося, з поточного списку С и останнє місто маршруту (місто номер 7), і видаляємо його із С. Остаточно маршрут має вигляд:
1 - 2 - 4 - 3 - 8 - 5 - 9 - 6 - 7
Основна перевага порядкового представлення - в тому, що класичний кросовер працює! Будь-які два маршрути в порядковому представленні, обрізані на будь-якій позиції й склеєні разом, породять два нащадки, кожний з яких буде правильним туром. Наприклад, два батьки
p1 = (1 1 2 1| 4 1 3 1 1) і
p2 = (5 1 5 5 | 5 3 3 2 1),
які позначають відповідно маршрути
1 - 2 - 4 - 3 - 8 - 5 - 9 - 6 - 7 і
5 - 1 - 7 - 8 - 9 - 4 - 6 - 3 - 2,
с точкою розрізу, позначеною « | » породять наступних нащадків:
o1 = (1 1 2 1 5 3 3 2 1) і
o2 = (5 1 5 5 4 1 3 1 1).
Ці нащадки позначають маршрути
1 - 2 - 4 - 3 - 9 - 7 - 8 - 6 - 5 і
5 - 1 - 7 - 8 - 6 - 2 - 9 - 3 - 4
Легко помітити, що частини маршруту ліворуч від лінії розрізу не змінилися, тоді як частини маршруту праворуч від лінії розрізу розташувалися в досить випадковому порядку. Відверто слабкі показники цього представлення також підтверджують перше враження про слабку можливість його використання.
Шляхове представлення
Шляхове представлення - це, можливо, найбільш природне представлення тура. Наприклад, тур
5 - 1 - 7 - 8 - 9 - 4 - 6 - 2 - 3
представлений просто як
(5 1 7 8 9 4 6 2 3).
Для шляхового представлення широко відомі три операції кросовера: частково-відображений - partially-mapped (PMX), порядковий - order (OX), циклічний - cycle (CX) кросоверы.
PMX - будує нащадків, вибираючи підпослідовність із тура від одного з батьків і зберігаючи порядок і послідовність найбільшого з можливого числа міст іншого батька. Підпослідовність маршруту вибирається двома випадковими крапками розрізу. Наприклад, два батьки (розрізи відзначені “ | “)
p1= (1 2 3 | 4 5 6 7 | 8 9) і
p2= (4 5 2 | 1 8 7 6 | 9 3)
можуть одержати нащадків у такий спосіб. По-перше, сегменти між точками кросинговеру міняються місцями (символом «Х» позначається невідомий символ).
о1= (х х х | 4 5 6 7 | х х) і
о2= (х х х | 1 8 7 6 | х х)
також цей обмін визначає серію перетворень даних:
1 <-> 4, 8 <-> 5, 7<-> 6 і 6 <-> 7
тепер ми можемо заповнити інші міста, для яких немає конфліктів, з іншого батька:
о1= (х 2 3 | 4 5 6 7 | х 9) і
о2= (х х 2 | 1 8 7 6 | 9 3).
Наприкінці, перший «х» з нащадка о1 (який повинен був бути 1, але був виявлений конфлікт) заміняється на 4 (див. серію перетворень даних). У такий же спосіб, другий «х» з нащадка о1 міняємо на 5 і «х»-и в нащадку о2 міняємо на 1 і 8 відповідно. Маємо нащадків:
о1= (4 2 3 | 4 5 6 7 | 5 9) і
о2= (1 8 2 | 1 8 7 6 | 9 3).
PMX розробляє важливі спільності в значеннях і порядку проходження, коли він використовується з відповідним чином розробленим відтворювальним планом.
ОХ - будує нащадків, вибираючи шматок з одного батька, інші міста - з іншого, дотримуючи черговості міст. Наприклад, два батьки (розрізи відзначені “ | “)
p1= (1 2 3 | 4 5 6 7 | 8 9) і
p2= (4 5 2 | 1 8 7 6 | 9 3)
можуть одержати нащадків у такий спосіб. По-перше, сегменти між крапками обріза копіюються нащадкам (символом «Х» позначається невідомий символ).
о1= (х х х | 4 5 6 7 | х х) і
о2= (х х х | 1 8 7 6 | х х)
далі, починаючи від другої крапки обріза іншого батька, записуються міста, що залишилися, у тім же порядку, у якому вони були в батьках.
о1= (2 1 8 | 4 5 6 7 | 9 3) і
о2= (3 4 5 | 1 8 7 6 | 9 2).
Кросовер ОХ використовує властивість шляхового представлення, що порядок міст важливий, а перше місто - ні. Тури:
1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 і
2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 1
є фактично ідентичними.
СХ - будує нащадків таким чином, що кожне місто (і його позиція) приходять від одного з батьків. Два батьки
p1= (1 2 3 4 5 6 7 8 9) і
p2= (4 5 2 1 8 7 6 9 3)
будуть породжувати першого нащадка, взявши перше місто від першого батька:
о1=(1 х х х х х х х х).
Після цього кожне місто в нащадку повинен бути взятий від одного з його батьків (з тієї ж позиції, на якій перебувало попереднє місто в іншому батьку). У нашому випадку, це місто 4. ставимо його на ту ж позицію, на якій він перебував у р1
о1=(1 х х 4 х х х х х).
Далі діючи в такий же спосіб, знаходимо місто 8, що перебуває «нижче» міста 4
о1=(1 х х 4 х х х 8 х).
У такий же спосіб ставимо й міста 3 і 2.
о1=(1 2 3 4 х х х 8 х).
Подальше заповнення тим же образом неможливо, тому що нижче міста 2 перебуває місто 1, тобто утвориться замкнутий цикл. Інші міста беремо з іншого батька.
о1=(1 2 3 4 7 6 9 8 5).
Діючи в такий же спосіб, але починаючи з батька р2, одержимо другого нащадка
о2=(4 1 2 8 5 6 7 3 9).
СХ зберігає абсолютну позицію елементів тієї ж, що й у батьків.
Існують і інші операції для шляхового представлення.
Шляхове представлення занадто бідно, щоб представляти важливі властивості тура, такі як ребра. Але в порівнянні з іншими векторними представленнями вони показують непогані результати, мають досить широкі можливості.