Порівняння двох генетичних алгоритмів


9

У мене є дві реалізації генетичного алгоритму, які повинні поводитися однаково. Однак через технічні обмеження, які неможливо вирішити, їх вихід не є абсолютно однаковим з огляду на один і той же вхід.

Я все-таки хотів би показати, що суттєвої різниці в продуктивності немає.

У мене є 20 запусків з однаковою конфігурацією для кожного з двох алгоритмів, використовуючи різні початкові насіння випадкових чисел. Для кожного запуску і генерації мінімальної помилки пристосованість кращої особини в популяції була зафіксована. В алгоритмі використовується механізм збереження еліти, тому придатність найкращого індивіда монотонно знижується. Пробіг складається з 1000 поколінь, тому я маю 1000 значень на пробіг. Я не можу отримати більше даних, оскільки розрахунки дуже дорогі.

Який тест я повинен використовувати? Найпростішим способом було б, мабуть, лише порівняти помилку в останніх поколіннях (знову ж, який тест я б тут використав)? Але можна також подумати про порівняння поведінки конвергенції взагалі.


Як уточнення: чи не так, що генетичний алгоритм шукає рішення випадковим чином, так що початковий сегмент будь-якого запуску навряд чи дасть корисне рішення? Також, що саме ви маєте на увазі під «мінімальною помилкою в сукупності»? Якщо ви маєте на увазі мінімальну різницю між відомим справжнім значенням та будь-яким рішенням із 1000 значень у пробігу, то чи не є це упередженою ознакою результату виконання? Зрештою, на практиці ви б приймали остаточне рішення в кожному циклі і відхиляли все, що йому передує, правда?
whuber

Під помилкою я в основному маю на увазі 1 / придатність, тому я кажу про цінність найкращого індивіда в поколінні. Я фіксував цінність найкращого індивіда для кожного покоління. Тож у мене є 1000 * 20 * 2 цифри, кожне з яких відповідає «придатності» найкращого індивіда в конкретному поколінні конкретного пробігу.
nisc

Я думаю, що початкове питання було
невдалим

Відповіді:


9

Тестування стохастичних алгоритмів може бути досить складним!

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

У dsmts ми обчислили (аналітично) очікуване значення та дисперсію конкретної моделі. Потім ми проводимо тест гіпотези, щоб визначити, чи симулятор відрізняється від істини. У розділі 3 керівництва користувача наведено реквізити. По суті, ми робимо t-тест для середніх значень та тест-чи-квадрат на дисперсії.

У вашому випадку ви порівнюєте два тренажери, тому вам слід просто використовувати двопробний t-тест замість цього.


Як би я міг використовувати інформацію від усіх поколінь?
nisc

Найпростіший спосіб - це зробити кілька тестів, тобто тест у кожного покоління, а потім скористатися корекцією Bonferroni або fdr.
csgillespie

Якщо порівнювати кожне покоління, мені доведеться перевірити рівень значущості 1/1000 * 0,05? Це не трохи суворо?
nisc

Правда, але ви також робите багато тестування - не можете мати все;) Ви можете ранжувати значення p, використовувати їх як керівництво, щоб побачити, де можливі помилки.
csgillespie

1
Замість корекції бонферроні ви завжди можете використовувати більш потужну болферроні. Дивіться мою відповідь тут: stats.stackexchange.com/questions/575/…
Генрік

4

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

Оновлення Щодо детальної інформації - ну які особливості часового ряду вас цікавлять, крім остаточної помилки? Я думаю, у вас насправді є три різні питання для вирішення:

  1. Що для вас являє собою подібність, тобто що ви маєте на увазі, говорячи, що не вірите, що два способи різні?
  2. Як ви її кількісно оцінюєте - можна відповісти через 1 та
  3. Як ви можете перевірити суттєві відмінності між вашими двома методами?

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


звучить розумно, будь-які деталі?
nisc
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.