Яку мову використовувати для генетичного програмування


15

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

Уточнення: я не запитую, якою буде мова, я сам напишу генетичний алгоритм (так як я зможу приймати рішення сам), я запитую, якою мовою програмування повинні бути створені розвинені програми.

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

Я волів би використовувати що - то , що присвячений для генетичного програмування , як слеш / A . SlashA не вимагає роботи над ASTs --- програми в байт-коді - це лише масив входів, який можна змінити в будь-якому необхідному файлі, оскільки кожен масив int являє собою деяку косу рису / програму.

Додаткові зауваження:

  • Я хотів би уникати маніпуляцій з AST!
  • Ця проблема є важкою (можливо, не такою важкою, як прогнозування вартості акцій). Це пов’язано з тим, що (швидше за все) у нас недостатньо вхідної інформації (є деякі приховані параметри). Створення моделі, яка має кращі показники, модель, яка повертає середнє значення, є певною проблемою (середні моделі мають 35% MAPE), більшість моделей мають MAPE приблизно 25%, найкращі - 20%.
  • Я хотів би мати мову, яка керує наборами даних з багатьма функціями, припускаючи, що я не впевнений, які важливі. (Slash / A має тут недолік --- в цій мові функції введення читаються послідовно --- тому деякі функції будуть використовуватися з більшою ймовірністю).
  • Я хотів би мати можливість програмувати це на Python, тому python libs було б чудово --- але я можу робити прив'язки для C / C ++ (немає Java, немає Matlab тощо).

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

Відповіді:


14

Ваша проблема із забрудненням, ймовірно, зовсім не потребує мови. Це виглядає як символічна регресія, а не проблема управління, і в цьому випадку ви можете просто використовувати стандартний GP-файл дерева з функціями та кількома корисними константами в якості набору терміналів та відповідних операторів у наборі функцій. Система GP знищить невідповідні функції та є методи обробки дуже великих наборів даних. Як правило, вкажіть найменший набір функцій, який, за вашими оцінками, може вирішити проблему, і при необхідності обережно розгорніть її.

На початку вам потрібно буде вибрати між деревом та лінійним GP. Lisp - дерево, Slash / A - лінійне. Прочитайте про обидва, щоб зрозуміти плюси і мінуси, але з написаного вами я запропонував би просту систему дерев яних GP. Написати свої власні не надто важко, але є існуючі реалізації Python. Ці нижче наведені для еволюційних алгоритмів в Python взагалі, але не всі роблять GP, а деякі є неактивними:

  1. PyGressionGP (GP для символічної регресії в Python) - http://code.google.com/p/pygressiongp/
  2. PyGene - https://github.com/blaa/PyGene
  3. Просте генетичне програмування на Python - http://zhanggw.wordpress.com/2009/11/08/a-simple-genetic-programming-in-python-4/
  4. Pyevolve - https://github.com/perone/Pyevolve - також дивіться блог - http://blog.christianperone.com - і цей пост - http://blog.christianperone.com/?p= 549
  5. esec (еволюційні обчислення в Python) - http://code.google.com/p/esec/
  6. Персик - http://code.google.com/p/peach/
  7. PyBrain (робить багато, не тільки NN) - http://pybrain.org/
  8. діон - http://dione.sourceforge.net/
  9. PyGEP (програмування генетичної експресії) - http://code.google.com/p/pygep/
  10. deap (Поширені еволюційні алгоритми) - http://code.google.com/p/deap/

Також дивіться (безкоштовно) вступну книгу про ГП відомих авторів ГП Полі, Ленґдона та Макфі:

Польовий посібник з генетичного програмування - http://www.gp-field-guide.org.uk/


Чи є у вас будь-які посилання на плюси і мінуси лінійки та дерева GP?
jb.

Я бачив кілька порівнянь, але не маю конкретних посилань. Ви можете подивитися, що Банжаф та Брамейер опублікували у 2000-х - вони зробили досить багато роботи над лінійним GP і опублікували книгу про LGP у 2007 році.
Грем Джонс

Гм ... чому вони не об'єднаються?
фонПетрушев

Я не впевнений, що ви маєте на увазі - чому люди з дерева та лінійні лікарі не об’єднуються? Немає релігійного розколу, вони просто різні аромати однієї ідеї (а є й інші, як, наприклад, Gene Expression Progamming (GEP) - gene-expression-programming.com ).
Грем Джонс

1
Я не кажу, що дерево GP - це зло чи що-небудь. Я просто хотів розгорнути власну імплементацію, а лінійна - це набагато простіше. Я працював прототипом Python приблизно за 4 години з нуля.
jb.

4

Якщо ви збираєтеся розвивати програму, ви, швидше за все, маніпулюєте синтаксичним деревом; таким чином, будь-яка програма, яку ви розробляєте, автоматично буде синтаксично правильною.

Є дві речі, про які ви хочете пам’ятати, вибираючи мову.

  1. Уникайте конструкцій низького рівня, які можуть спричинити збій розвинутої програми на деяких даних. Наприклад, арифметика вказівника. Якщо ви збираєтесь використовувати C або C ++ як мову для своїх розвинених програм, ви можете обмежити її версією без арифметики вказівника.
    Я би голосував проти мови складання з подібних причин, хоча віртуальні машини, такі як JVM та CLR, повинні забезпечити вам щось із захисної мережі.
  2. Підходить для великих наборів даних; якщо я правильно розумію ваше завдання, програмам виводу доведеться самі маніпулювати великими наборами даних.

Ймовірно, ви захочете використовувати цільову мову, з якою ви вже знайомі. Я сам не знайомий з Python, але AFAIK він відповідає вищевказаним критеріям, тому він повинен бути хорошим вибором для вашої мови перекладу.


1
Дивіться github.com/arturadib/slash-a --- цією мовою у вас немає маніпуляцій AST! Програма репрезентується як масив байт-коду, і оскільки кожен масив є правильною програмою, ви можете використовувати всі генетичні операції, які ви хочете.
jb.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.