Как зайти в Даркнет?!
25th January, 01:11
6
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
894
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
948
0
Очень долго работает Update запрос Oracle
27th January, 09:58
913
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
905
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
938
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1724
0
период по дням
25th October, 10:44
3955
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3720
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4613
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4381
0
Помогите пожалуйста решить задачи
24th November, 23:53
6086
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4350
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4396
0
Метода Крамера С++
23rd October, 11:55
4309
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2599
0
Генетическое программирование в C#
Я искал несколько хороших примеров генетического программирования для C#. кто-нибудь знает о хороших ресурсах онлайн/книг? Интересно, существует ли библиотека C# для эволюционного/генетического программирования?
После разработки моего собственного дидактического приложения для генетического программирования я нашел полную структуру генетического программирования под названием AForge.NET Genetics . Это часть библиотеки Aforge.NET . Она лицензирована под номером LGPL.
В прошлом году у MSDN была статья о генетическом программировании: генетические алгоритмы: выживание наиболее приспособленных с Windows формами
Я бы рекомендовал не создавать сборки на самом деле, если вам это абсолютно не нужно, особенно если вы только начинаете реализовывать генетический алгоритм.
Генетический алгоритм легче всего реализовать, когда целевой язык является функциональным и динамически типизированным. Именно поэтому большинство исследований генетических алгоритмов написано в LISP. В результате, если вы собираетесь реализовать его в C#,, вам, вероятно, лучше определить свой собственный мини - "древовидный язык", заставить алгоритм генерировать деревья и просто интерпретировать деревья, когда придет время запускать каждую итерацию алгоритма.
Я сделал такой проект, когда учился в колледже (реализация генетического алгоритма в C#), году, и это был мой подход.
Выполнение этого способа даст вам преимущество в том, что у вас есть только 1 представление для работы (представление AST), которое оптимально подходит как для выполнения, так и для шагов генетического алгоритма "reproduction".
Кроме того, если вы попытаетесь создать сборки, вы, вероятно, в конечном итоге добавите большое количество ненужной сложности в приложение. В настоящее время CLR не позволяет выгружать assembly из домена приложения, если только весь домен приложения не будет уничтожен. Это будет означать, что вам нужно будет создать отдельный домен приложения для каждой сгенерированной программы в каждой итерации алгоритма, чтобы избежать гигантской утечки памяти в ваше приложение. В общем, все это только добавило бы кучу дополнительного раздражения.
Интерпретируемые AST, с другой стороны, являются мусором, собираемым так же, как и любой другой объект, и поэтому вам не нужно будет возиться с несколькими доменами приложений. Если по соображениям производительности вы хотите кодировать конечный результат, вы можете добавить поддержку для этого позже. Однако я бы рекомендовал вам сделать это с помощью класса DynamicMethod . Это позволит вам преобразовать AST в скомпилированный делегат динамически во время выполнения. Это позволит вам развернуть один DLL, сохраняя при этом процесс генерации кода как можно более простым. Кроме того, экземпляры DynamicMethod являются мусорными коллекциями, поэтому вы можете использовать их как часть генетического алгоритма, чтобы ускорить процесс там.
Я видел хорошее обсуждение этого на высоком уровне на канале 9 от Майка Свенсона в http://channel9.msdn.com/posts/Charles/Algorithms-and-Data-Structures-Mike-Swanson-Genetic-Session-Scheduler/
Вы имеете в виду собственно генетическое программирование, а не генетические алгоритмы вообще?
Если это так, то C#/.net-не самый лучший язык для этого. Например, LISP всегда был опорой GP.
Однако, если вам это необходимо, вы, вероятно, захотите динамически генерировать CIL / MSIL. Вы можете сделать это с помощью System.Reflection.Emit, однако я бы рекомендовал Mono.Cecil . Ему не хватает хороших документов (как будто они у него есть).. Но он предлагает гораздо лучшее излучение и отражение assembly.
Другая проблема заключается в том, что загрузка кода и последующее его удаление в рамках .net менее чем тривиальны. По крайней мере, вы не можете выгружать сборки. Вы можете выгрузить Домены приложений, но вся работа по загрузке кода в отдельный домен приложений и вызову его извне может стать довольно запутанной. .NET 3.5's System.Addin вещи должны сделать это проще.
Если вы интересуетесь генетическими алгоритмами или эвристической оптимизацией в целом, вы можете взглянуть на HeuristicLab . Он разрабатывался в течение нескольких лет, 1.5 лет с тех пор, как мы выпустили новую версию. Он запрограммирован в C# 4 и имеет хороший GUI. Есть много уже доступных алгоритмов, таких как генетический алгоритм, генетическое программирование, стратегия эволюции, локальный поиск, поиск табу, оптимизация роя частиц, имитация отжига и многое другое. Есть также несколько проблем, реализованных как задача маршрутизации транспортного средства, коммивояжер, оптимизация реальных функций, рюкзак, квадратичная задача назначения, классификация, регрессия и многое другое. Есть также учебные пособия, и у нас есть встроенные буферы протоколов, чтобы вы могли общаться с внешними программами для оценки решения. Она лицензирована под GPL. В 2009 году программное обеспечение получило премию Microsoft innovation award от Microsoft Austria.
Мы также написали книгу на эту тему: генетические алгоритмы и генетическое программирование .
У меня есть бесплатный продукт, который может помочь. Структура генетического алгоритма .Net 4.0 представляет собой единый .Net 4.0 assembly с некоторыми вспомогательными статьями.
Я разветвил ECJ на C# .NET 4.0, если вы заинтересованы в полнофункциональной структуре эволюционных вычислений. Пакет включает в себя все из оригинального проекта ECJ Java, включая все рабочие образцы.
Я также написал 500 модульных тестов для проверки многих аспектов преобразования. Но нужно провести еще много тестов. В частности, аспекты распределенных вычислений не полностью проверены. Это потому, что я планирую перейти от простого использования сокетов ECJ к более надежной стратегии с использованием WCF и WF. Я также буду перерабатывать фреймворк, чтобы использовать TPL (параллельную библиотеку задач).
В любом случае, вы можете скачать начальную конвертацию здесь:
http://branecloud.codeplex.com
Я также нахожусь в процессе преобразования нескольких других фреймворков из Java в .NET, которые относятся к "synthetic intelligence" исследованиям (когда я могу найти время).
Бен
Сейчас я читаю практическое руководство по генетическому программированию (скачать бесплатно PDF). Он также доступен в мягкой обложке. Он обсуждает использование библиотеки, написанной в Java под названием TinyGP . Вы могли бы получить некоторый пробег от этого. Я еще не начал заниматься каким-либо реальным программированием, но надеюсь применить некоторые из концепций в C#.
Вы можете попробовать 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();
Книга Мэннинга "метапрограммирование в .NET"посвящена большому разделу о GP с помощью деревьев выражений.