|
|
||
|---|---|---|
| .. | ||
| Diophantine.ipynb | ||
| Genetic.ipynb | ||
| README.md | ||
README.md
Генетски алгоритми
Квиз пре предавања
Генетски алгоритми (GA) засновани су на еволуционарном приступу вештачкој интелигенцији, где се методе еволуције популације користе за добијање оптималног решења за одређени проблем. Предложио их је 1975. године Џон Хенри Холанд.
Генетски алгоритми се заснивају на следећим идејама:
- Валидна решења проблема могу се представити као гени
- Укрштање нам омогућава да комбинујемо два решења како бисмо добили ново валидно решење
- Селекција се користи за избор оптималнијих решења помоћу неке функције прилагођености
- Мутације се уводе ради дестабилизације оптимизације и изласка из локалног минимума
Ако желите да имплементирате генетски алгоритам, потребно је следеће:
- Пронаћи метод за кодирање решења проблема помоћу гена g∈Γ
- На скупу гена Γ дефинисати функцију прилагођености fit: Γ→R. Мање вредности функције одговарају бољим решењима.
- Дефинисати механизам укрштања за комбиновање два гена како би се добило ново валидно решење crossover: Γ2→Γ.
- Дефинисати механизам мутације mutate: Γ→Γ.
У многим случајевима, алгоритми за укрштање и мутацију су прилично једноставни за манипулацију генима као нумеричким низовима или бит-векторима.
Специфична имплементација генетског алгоритма може се разликовати од случаја до случаја, али општа структура је следећа:
- Изабрати почетну популацију G⊂Γ
- Насумично изабрати једну од операција која ће се извршити у овом кораку: укрштање или мутација
- Укрштање:
- Насумично изабрати два гена g1, g2 ∈ G
- Израчунати укрштање g=crossover(g1,g2)
- Ако fit(g)<fit(g1) или fit(g)<fit(g2) - заменити одговарајући ген у популацији са g.
- Мутација - изабрати насумичан ген g∈G и заменити га са mutate(g)
- Поновити од корака 2, док не добијемо довољно малу вредност fit, или док се не достигне ограничење броја корака.
Типични задаци
Задаци који се обично решавају генетским алгоритмима укључују:
- Оптимизацију распореда
- Оптимално паковање
- Оптимално сечење
- Убрзавање исцрпне претраге
✍️ Вежбе: Генетски алгоритми
Наставите учење у следећим нотебуцима:
Идите на овај нотебук да видите два примера коришћења генетских алгоритама:
- Праведна подела блага
- Проблем 8 краљица
Закључак
Генетски алгоритми се користе за решавање многих проблема, укључујући логистичке и претраживачке проблеме. Ова област је инспирисана истраживањима која су спојила теме из психологије и рачунарских наука.
🚀 Изазов
"Генетски алгоритми су једноставни за имплементацију, али је њихово понашање тешко разумети." извор Урадите истраживање да пронађете имплементацију генетског алгоритма, као што је решавање Судоку загонетке, и објасните како функционише као скица или дијаграм тока.
Квиз после предавања
Преглед и самостално учење
Погледајте овај одличан видео који говори о томе како рачунар може научити да игра Супер Марио користећи неуронске мреже обучене генетским алгоритмима. Више ћемо научити о томе како рачунар учи да игра игре у следећем одељку.
Задатак: Диофантска једначина
Ваш циљ је да решите такозвану Диофантску једначину - једначину са целобројним коренима. На пример, размотрите једначину a+2b+3c+4d=30. Потребно је пронаћи целобројне корене који задовољавају ову једначину.
Овај задатак је инспирисан овим постом.
Савети:
- Можете разматрати корене у интервалу [0;30]
- Као ген, размотрите коришћење листе вредности корена
Користите Diophantine.ipynb као почетну тачку.