Тема: Генетичний алгоритм (шукає не максимум, а мінімум функції)
Хай. Це продовження цієї теми.
Суть того шмата алгоритма, котрий я зараз реалізував...
1) Записуємо похідну функції в форматі (x-a)(x-b)(x-c)
2) Шукаємо саму ту функцію
3) Генеруємо початковий набір значень
4) Шукаємо значення функції для кожного з згенерованих значень
5) Шукаємо значення пристосованності для кожного із значень за наступною формулою
1. Підставляємо значення в функцію, отримуємо якесь інше значення, після чого беремо зворотнє значення цього значення.
2. Робимо пункт 1 для кожного із згенерованних значень, та додаємо всі ті значення.
Ліл. Зара поясню.
Наприклад, є функція
y=x*2
І у нас є два значення, 3 і 10.
Ми підставляємо ті значення в функцію і отримуємо
6 для 3, і 20 для 10.
Після чого беремо зворотні значення, а це
1/6=0.166666666666667
1/20=0.05
Далі ми сумуємо ті значення і отримуємо 0.05+0.166666666666667=0.216666666666667
Після чого шукаємо пристосованність кожного із значень, от так
0.05/0.216666666666667=0.23076923076923
0.166666666666667/0.216666666666667=0.769230769230769
Ну, тобто значення 3 у нас має 77% пристосованність, а значення 10, 23%.
Але ж це якось не вірно. Адже значення функції, коли ми підставляємо в неї 3, дорівнює всього 6, а при 10 аж 20.
І нам же треба максимум знайти, ага? А воно шукає мінімум. От у мене так само.
Гляньте на картинку
Бачите. У мене екстемуми знаходяться в точці 2, 4 і 5.
І от коли я підставляю в функцію значення 0.1, котре далеке від усіх естремумів, то маю пристосованність аж 77%.
А має бути навпаки ж, чим далі від екстремума, тим менше, ага? Чому так? Як то виправити? Чи потрібен вам код?
upd: я так думаю, то все можна виправити якщо просто відняти всі ті значення пристосованності від 100. Тоді вони просто інвертуються. Але все одно це все дивно, чим більше значення функції, тим далі воно від екстремумів