Какой язык использовать для генетического программирования

15

В рамках задания мне нужно будет написать алгоритм генетического программирования , который будет предсказывать уровни загрязнения атмосферы. Поскольку у меня нет опыта, может кто-нибудь указать мне указатели на предложения языков программирования, на которых будут написаны развитые программы .

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

Мой инструктор предложил Лисп, но мне не нравится эта идея - во-первых, мне нужно поработать над каким-то абстрактным синтаксическим деревом, во-вторых, надежное выполнение кроссоверов на древовидной структуре может быть адским беспорядком.

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

Дополнительные замечания:

  • Я бы хотел избежать манипуляций с АСТ!
  • Эта проблема сложная (возможно, не такая сложная, как прогнозирование стоимости акций). Это связано с тем, что (скорее всего) нам не хватает входной информации (есть некоторые скрытые параметры). Создание модели, которая имеет лучшую производительность, чем модель, которая возвращает среднее значение, является некоторой проблемой (средние модели имеют MAPE 35%), большинство моделей имеют MAPE около 25%, лучше всего 20%.
  • Я хотел бы иметь язык, который управляет наборами данных со многими функциями, предполагая, что я не уверен, какие из них важны. (Слэш / А имеет здесь недостаток - в этом языке входные функции читаются последовательно - поэтому некоторые функции будут использоваться с большей вероятностью).
  • Я хотел бы иметь возможность программировать это на Python, поэтому библиотеки Python были бы хороши, но я могу делать привязки для C / C ++ (без Java, без Matlab и т. Д.).

Я осознаю, что это вопрос опроса, поэтому, если это рано для такого вопроса, пожалуйста, закройте его, но я чувствую, что он достаточно конкретен.

ДБ.
источник

Ответы:

14

Ваша проблема с загрязнителями, вероятно, вообще не нуждается в большом количестве языков. Это похоже на символическую регрессию, а не на проблему управления, и в этом случае вы могли бы просто использовать стандартное дерево GP с функциями и несколькими полезными константами в качестве набора терминалов и соответствующих операторов в наборе функций. Система GP отсеет ненужные функции, и есть методы для обработки очень больших наборов данных. Как правило, указывайте наименьший набор функций, который, по вашим оценкам, может решить проблему, и при необходимости расширяйте его осторожно.

Вам нужно будет выбрать между древовидной и линейной ГП на ранней стадии. Лисп - дерево, Слэш / А - линейный. Читайте оба, чтобы понять плюсы и минусы, но из того, что вы написали, я бы предложил простую древовидную систему 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 году, я думаю.
Грэм Джонс
Хм ... почему эти люди не объединяются?
фон Петрушев
Я не уверен, что вы имеете в виду - почему люди из дерева и линейного ГП не объединяются? Здесь нет религиозного разделения, это просто разные разновидности одной и той же идеи (и есть и другие, такие как Progamming Gene Expression (GEP) - gene-expression-programming.com ).
Грэм Джонс
1
Я не говорю, что дерево GP зло или что-то другое. Я просто хотел накатить свою собственную реализацию, а с линейной гораздо проще. Я работал с прототипом Python примерно за 4 часа с нуля.
JB.
4

Если вы собираетесь развивать программу, вы все равно можете манипулировать синтаксическим деревом; таким образом, любая программа, которую вы развиваете, автоматически будет синтаксически правильной.

Есть две вещи, которые вы должны иметь в виду при выборе языка.

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

Возможно, вы захотите использовать целевой язык, с которым вы уже знакомы. Я сам не знаком с Python, но AFAIK соответствует приведенным выше критериям, поэтому он должен быть хорошим выбором для вашего целевого языка.

SL Barth - Восстановить Монику
источник
1
Смотрите github.com/arturadib/slash-a --- на этом языке у вас нет манипуляций с AST! Программа представлена ​​в виде массива байт-кода, и, поскольку каждый массив является правильной программой, вы можете использовать любые генетические операции, которые вам нужны.
JB.