Сведения о вопросе

HEIGTH

02:53, 13th August, 2020

Генетическое программирование в C#

Просмотров: 917   Ответов: 13

Я искал несколько хороших примеров генетического программирования для C#. кто-нибудь знает о хороших ресурсах онлайн/книг? Интересно, существует ли библиотека C# для эволюционного/генетического программирования?



  Сведения об ответе

LIZA

07:03, 7th August, 2020

После разработки моего собственного дидактического приложения для генетического программирования я нашел полную структуру генетического программирования под названием AForge.NET Genetics . Это часть библиотеки Aforge.NET . Она лицензирована под номером LGPL.


  Сведения об ответе

SSESION

06:04, 14th August, 2020

В прошлом году у MSDN была статья о генетическом программировании: генетические алгоритмы: выживание наиболее приспособленных с Windows формами


  Сведения об ответе

VERSUION

12:34, 6th August, 2020

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

Генетический алгоритм легче всего реализовать, когда целевой язык является функциональным и динамически типизированным. Именно поэтому большинство исследований генетических алгоритмов написано в LISP. В результате, если вы собираетесь реализовать его в C#,, вам, вероятно, лучше определить свой собственный мини - "древовидный язык", заставить алгоритм генерировать деревья и просто интерпретировать деревья, когда придет время запускать каждую итерацию алгоритма.

Я сделал такой проект, когда учился в колледже (реализация генетического алгоритма в C#), году, и это был мой подход.

Выполнение этого способа даст вам преимущество в том, что у вас есть только 1 представление для работы (представление AST), которое оптимально подходит как для выполнения, так и для шагов генетического алгоритма "reproduction".

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

Интерпретируемые AST, с другой стороны, являются мусором, собираемым так же, как и любой другой объект, и поэтому вам не нужно будет возиться с несколькими доменами приложений. Если по соображениям производительности вы хотите кодировать конечный результат, вы можете добавить поддержку для этого позже. Однако я бы рекомендовал вам сделать это с помощью класса DynamicMethod . Это позволит вам преобразовать AST в скомпилированный делегат динамически во время выполнения. Это позволит вам развернуть один DLL, сохраняя при этом процесс генерации кода как можно более простым. Кроме того, экземпляры DynamicMethod являются мусорными коллекциями, поэтому вы можете использовать их как часть генетического алгоритма, чтобы ускорить процесс там.


  Сведения об ответе

crush

16:05, 8th August, 2020

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


  Сведения об ответе

DAAA

01:07, 21st August, 2020

Я видел хорошее обсуждение этого на высоком уровне на канале 9 от Майка Свенсона в http://channel9.msdn.com/posts/Charles/Algorithms-and-Data-Structures-Mike-Swanson-Genetic-Session-Scheduler/


  Сведения об ответе

прога

06:50, 25th August, 2020

Вы имеете в виду собственно генетическое программирование, а не генетические алгоритмы вообще?

Если это так, то C#/.net-не самый лучший язык для этого. Например, LISP всегда был опорой GP.

Однако, если вам это необходимо, вы, вероятно, захотите динамически генерировать CIL / MSIL. Вы можете сделать это с помощью System.Reflection.Emit, однако я бы рекомендовал Mono.Cecil . Ему не хватает хороших документов (как будто они у него есть).. Но он предлагает гораздо лучшее излучение и отражение assembly.

Другая проблема заключается в том, что загрузка кода и последующее его удаление в рамках .net менее чем тривиальны. По крайней мере, вы не можете выгружать сборки. Вы можете выгрузить Домены приложений, но вся работа по загрузке кода в отдельный домен приложений и вызову его извне может стать довольно запутанной. .NET 3.5's System.Addin вещи должны сделать это проще.


  Сведения об ответе

FAriza

11:11, 17th August, 2020

Если вы интересуетесь генетическими алгоритмами или эвристической оптимизацией в целом, вы можете взглянуть на HeuristicLab . Он разрабатывался в течение нескольких лет, 1.5 лет с тех пор, как мы выпустили новую версию. Он запрограммирован в C# 4 и имеет хороший GUI. Есть много уже доступных алгоритмов, таких как генетический алгоритм, генетическое программирование, стратегия эволюции, локальный поиск, поиск табу, оптимизация роя частиц, имитация отжига и многое другое. Есть также несколько проблем, реализованных как задача маршрутизации транспортного средства, коммивояжер, оптимизация реальных функций, рюкзак, квадратичная задача назначения, классификация, регрессия и многое другое. Есть также учебные пособия, и у нас есть встроенные буферы протоколов, чтобы вы могли общаться с внешними программами для оценки решения. Она лицензирована под GPL. В 2009 году программное обеспечение получило премию Microsoft innovation award от Microsoft Austria.

Мы также написали книгу на эту тему: генетические алгоритмы и генетическое программирование .


  Сведения об ответе

lats

10:49, 17th August, 2020

У меня есть бесплатный продукт, который может помочь. Структура генетического алгоритма .Net 4.0 представляет собой единый .Net 4.0 assembly с некоторыми вспомогательными статьями.


  Сведения об ответе

LAST

01:44, 13th August, 2020

Я разветвил ECJ на C# .NET 4.0, если вы заинтересованы в полнофункциональной структуре эволюционных вычислений. Пакет включает в себя все из оригинального проекта ECJ Java, включая все рабочие образцы.

Я также написал 500 модульных тестов для проверки многих аспектов преобразования. Но нужно провести еще много тестов. В частности, аспекты распределенных вычислений не полностью проверены. Это потому, что я планирую перейти от простого использования сокетов ECJ к более надежной стратегии с использованием WCF и WF. Я также буду перерабатывать фреймворк, чтобы использовать TPL (параллельную библиотеку задач).

В любом случае, вы можете скачать начальную конвертацию здесь:

http://branecloud.codeplex.com

Я также нахожусь в процессе преобразования нескольких других фреймворков из Java в .NET, которые относятся к "synthetic intelligence" исследованиям (когда я могу найти время).

Бен


  Сведения об ответе

appple

21:10, 8th August, 2020

Сейчас я читаю практическое руководство по генетическому программированию (скачать бесплатно PDF). Он также доступен в мягкой обложке. Он обсуждает использование библиотеки, написанной в Java под названием TinyGP . Вы могли бы получить некоторый пробег от этого. Я еще не начал заниматься каким-либо реальным программированием, но надеюсь применить некоторые из концепций в C#.


  Сведения об ответе

FAriza

13:31, 17th August, 2020

Вы можете попробовать GeneticSharp .

Он имеет все классические операции GA, такие как селекция, кроссовер, мутация, повторное внедрение и прекращение.

Он очень расширяем, вы можете определить свои собственные хромосомы, фитнес-функцию, стратегию генерации популяции и все перечисленные выше операции.

Он может быть использован во многих видах приложений, таких как библиотеки C# и игры Unity 3D, есть примеры запуска его в приложении GTK# и игре Unity 3D checkers.

Он также работает в Win и OSX.

Вот базовый пример использования библиотеки:

var selection = new EliteSelection();
var crossover = new OrderedCrossover();
var mutation = new ReverseSequenceMutation();
var fitness = new YourFitnessFunction();
var chromosome = new YourChromosome();
var population = new Population (50, 70, chromosome);

var ga = new GeneticAlgorithm(population, fitness, selection, crossover, mutation);

ga.Start();


  Сведения об ответе

PAGE

16:31, 7th August, 2020

Книга Мэннинга "метапрограммирование в .NET"посвящена большому разделу о GP с помощью деревьев выражений.


  Сведения об ответе

LAST

21:06, 1st October, 2020

Я поддерживаю порт ECJ в C#. это здорово.


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться