1 Востаннє редагувалося FakiNyan (30.11.2014 18:13:18)

Тема: Генетичний алгоритм (шукає не максимум, а мінімум функції)

Хай. Це продовження цієї теми.
Суть того шмата алгоритма, котрий я зараз реалізував...
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.
І нам же треба максимум знайти, ага? А воно шукає мінімум. От у мене так само.
Гляньте на картинку
http://не-дійсний-домен/dbxfq/0996da2b68.png
Бачите. У мене екстемуми знаходяться в точці 2, 4 і 5.
І от коли я підставляю в функцію значення 0.1, котре далеке від усіх естремумів, то маю пристосованність аж 77%.
А має бути навпаки ж, чим далі від екстремума, тим менше, ага? Чому так? Як то виправити? Чи потрібен вам код?
upd: я так думаю, то все можна виправити якщо просто відняти всі ті значення пристосованності від 100. Тоді вони просто інвертуються. Але все одно це все дивно, чим більше значення функції, тим далі воно від екстремумів

2

Re: Генетичний алгоритм (шукає не максимум, а мінімум функції)

Ну це трохи інакше називається, а не генетичний алгоритм.

3

Re: Генетичний алгоритм (шукає не максимум, а мінімум функції)

Vo_Vik написав:

Ну це трохи інакше називається, а не генетичний алгоритм.

як же?

4

Re: Генетичний алгоритм (шукає не максимум, а мінімум функції)

http://uk.wikipedia.org/wiki/%D0%93%D0% … 1%82%D0%BC

у вас один параметр, це явно замало для генетичного алгоритму. У вас швидше метод поступового наближення. Його в принципі можна вважати дуже частковим випадком генетичного алгоритму, але....

5

Re: Генетичний алгоритм (шукає не максимум, а мінімум функції)

Vo_Vik написав:

http://uk.wikipedia.org/wiki/%D0%93%D0% … 1%82%D0%BC

у вас один параметр, це явно замало для генетичного алгоритму. У вас швидше метод поступового наближення. Його в принципі можна вважати дуже частковим випадком генетичного алгоритму, але....

ну так це я вже читав, чесно кажучи, мені все одно, як воно зветься, мені цікаво те, що я запитував в шапці

6

Re: Генетичний алгоритм (шукає не максимум, а мінімум функції)

Давайте ще раз, що ви підбераєте? Бо я вже збився х чи  abc? якщо abc, то який x берете? Тобто що вам відодомо з початку?

7

Re: Генетичний алгоритм (шукає не максимум, а мінімум функції)

Vo_Vik написав:

Давайте ще раз, що ви підбераєте? Бо я вже збився х чи  abc? якщо abc, то який x берете? Тобто що вам відодомо з початку?

Ех, пишу вже хз який раз.

В мене є похідна у вигляді (x-a)(x-b)(x-c) (a, b ,c - відомі)
Я інтегрую цю похідну і отримую функцію.
Далі я ГЕНЕРУЮ набір значень, котрі підставляю в ту функцію, з метою знайти максимум тої функції.

8

Re: Генетичний алгоритм (шукає не максимум, а мінімум функції)

Гм, якщо у тебе є

похідна у вигляді (x-a)(x-b)(x-c) (a, b ,c - відомі)

то максимум буде в одній з точок abc іншого не дано, там нема що писати, перебираєш 3 точки і дивишся яка найбільша. Але це буде локальний максимум, бо фунція сама 4-го степеня(похідна 3-го) відповідно якщо перший коефіцієнт(при х в 4-му) оригінальної фунції додатній, то на мінус і плюс нескінченності фунція прямуватиме до нескінченості, відповідно матиме там максимум.

Чи в тебе проблема взяти  невизначений інтеграл з похідної?

9 Востаннє редагувалося FakiNyan (01.12.2014 18:47:58)

Re: Генетичний алгоритм (шукає не максимум, а мінімум функції)

Vo_Vik написав:

Гм, якщо у тебе є

похідна у вигляді (x-a)(x-b)(x-c) (a, b ,c - відомі)

то максимум буде в одній з точок abc іншого не дано, там нема що писати, перебираєш 3 точки і дивишся яка найбільша. Але це буде локальний максимум, бо фунція сама 4-го степеня(похідна 3-го) відповідно якщо перший коефіцієнт(при х в 4-му) оригінальної фунції додатній, то на мінус і плюс нескінченності фунція прямуватиме до нескінченості, відповідно матиме там максимум.

Чи в тебе проблема взяти  невизначений інтеграл з похідної?

нє, максимум шукається на певному інтервалі, і прийнято вважати, що ми не знаємо, де можуть бути екстремуми, оту функцію я шукаю через похідну, аби можна було швидко задавати усілякі функції (через похідні), і перевіряти роботу алгоритму

10

Re: Генетичний алгоритм (шукає не максимум, а мінімум функції)

Умовно кажучи у вас є чорна скринька про яку відомо що вона має внутрішню структуру a0x^n+a1x^n-1+...an і програма має шукати точки екстремумів для цієї чорної скриньки на заданому інтервалі? і ви збираєтесь емулювати роботу чорної скриньки своєю фунцією створеною з похідної, бо для неї ви знаєте точки екстремумів. Привильно?

11

Re: Генетичний алгоритм (шукає не максимум, а мінімум функції)

Vo_Vik написав:

Умовно кажучи у вас є чорна скринька про яку відомо що вона має внутрішню структуру a0x^n+a1x^n-1+...an і програма має шукати точки екстремумів для цієї чорної скриньки на заданому інтервалі? і ви збираєтесь емулювати роботу чорної скриньки своєю фунцією створеною з похідної, бо для неї ви знаєте точки екстремумів. Привильно?

абсолютно вірно, молодець!

12

Re: Генетичний алгоритм (шукає не максимум, а мінімум функції)

ну тоді умовно кажучи вам треба знайти dy/dx = 0 =y(x)-y(x+dx)
Умовно припускаємо що у нас є 10 екстремумів на відрізку. Розбиваємо відрізок на 10 частин. спочатку можна рівних. Плюс маємо крайні точки.
відповідно маємо 11 точок x0.....x11. Шукаємо значення фунцій у точках x0.....x11 і (x0+0.000000001)......(x10+0.00000000001)(x11-0.00000000001) Шукаємо дифиренціал в даних точках Dn = dy/dx(n)=y(xn+0.000000001)-y(xn) або навпаки y(xn)-y(xn-0.000000001)
Далі дивимось між якими точками диференціал поміняв знак. умовно кажучи D2=-3 D3=2. Зсуваємо точку х3 вліво то точки можливого екстремуму
x3' = x3-(x3-x2)/(D3/(D3-D2)) = x3-(x3-x2)(D3-D2)/D3

Якось так якщо в загальних рисах.

13

Re: Генетичний алгоритм (шукає не максимум, а мінімум функції)

Що ви пишете? В мене немає проблем з диференціалами, мені необхідно запрограмувати отой ваш частковий випадок генетичного алгоритму, і все.

14

Re: Генетичний алгоритм (шукає не максимум, а мінімум функції)

Де у ваших повідомленнях хоч натяк на генетичний алгоритм? тобто вибір наступного покоління як нащадків переможців попереднього циклу?
І що оте ваше пристосування вам дає? де ви його використовуєте?

15

Re: Генетичний алгоритм (шукає не максимум, а мінімум функції)

Vo_Vik написав:

Де у ваших повідомленнях хоч натяк на генетичний алгоритм? тобто вибір наступного покоління як нащадків переможців попереднього циклу?
І що оте ваше пристосування вам дає? де ви його використовуєте?

чим більше пристосування - тим більший шанс, що цей юніт обереться в пару до когось, аби дати потомство
Наступного покоління немає, тому що вже зараз пристосованність більша у тих юнітів, котрі найвіддаленіші від екстремумів

16

Re: Генетичний алгоритм (шукає не максимум, а мінімум функції)

Ну то розвертайте функцію як викладач казав, M-f(x),
А то написали про генетичний алгоритм, а обговорюєте якусь зовсім протилежну фігню.

17

Re: Генетичний алгоритм (шукає не максимум, а мінімум функції)

Vo_Vik написав:

Ну то розвертайте функцію як викладач казав, M-f(x),
А то написали про генетичний алгоритм, а обговорюєте якусь зовсім протилежну фігню.

так я не доганяю, як то реалізувати в програмі. Викладач сказав, що M - це якесь дуже здорове число.
То що, я так і маю робити? Брати якийсь  double.MaxValue і віднімати від нього значення функції?

18

Re: Генетичний алгоритм (шукає не максимум, а мінімум функції)

або якщо треба мінімум то бери мінімальну пристосованійсть а не максимальну.

19

Re: Генетичний алгоритм (шукає не максимум, а мінімум функції)

Vo_Vik написав:

або якщо треба мінімум то бери мінімальну пристосованійсть а не максимальну.

я дещо обісрався.

Прихований текст

http://не-дійсний-домен/dcZHy/7a42db5f54.png

Так багацько думав про свої екстремуми, що й не помітив очевидного, функція ж йде до + нескінченності на відрізку десь від 0 до 2. А я ж шукаю екстремуми на відрізку саме від 0 до 5.11.
Гадаю, це мене дещо надурило, і я взагалі невірно оцінював все, що бачив.
Як я то помітив? Ну я ж думаю так, раз 4 - це у нас екстремум, то в цій точці значення має бути гарантовано більше, або менше за всі інші значення. Але я бачив, що є значення ще менші/більші, ніж значення в точці 4, от і вирішив глянути на графік уважніше, хехе. 8)

20 Востаннє редагувалося FakiNyan (01.12.2014 21:26:52)

Re: Генетичний алгоритм (шукає не максимум, а мінімум функції)

тепер от дивлюсь, і все вірно. Де ближче до 4, там і fitness більший
http://не-дійсний-домен/dd0lu/a88e9dada0.png
p.s. оті бінарники внизу - то я беру число (від 2 до 5.11 зараз), множу його на сотню, ну щоб гарантовано ціле було, а потім перевожу в двійкове, і тепер я буду отой кросовер робити