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

Решение для бедных:

var checkLoad = function() {   
    document.readyState !== "complete" ? setTimeout(checkLoad, 11) : alert("loaded!");   
};  

checkLoad();  

View Fiddle

Добавил этот, немного лучше, я предполагаю, собственный объем и нерекурсивный

(function(){
    var tId = setInterval(function() {
        if (document.readyState == "complete") onComplete()
    }, 11);
    function onComplete(){
        clearInterval(tId);    
        alert("loaded!");    
    };
})()

Показать Fiddle

59
задан Jon Seigel 17 May 2010 в 03:14
поделиться

8 ответов

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

28
ответ дан 24 November 2019 в 18:23
поделиться

Я поддерживаю порт ECJ в C#. Это является большим.

1
ответ дан mmcdole 24 November 2019 в 18:23
поделиться

Я читаю Полевое Руководство А по Генетическому Программированию прямо сейчас (бесплатная загрузка PDF). Это также доступно как книга в мягкой обложке. Это диски использование библиотеки, записанной в Java, названном TinyGP. Вы могли бы вытащить некоторый пробег из этого. Я не начал делать любое фактическое программирование, но надеюсь, применяет некоторые понятия в C#.

3
ответ дан Jason Jackson 24 November 2019 в 18:23
поделиться

Вы имеете в виду фактическое генетическое программирование, в противоположность генетическим алгоритмам в целом?

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

Однако, если Вы должны, Вы, вероятно, собираетесь хотеть динамично генерировать CIL / MSIL. Вы могли сделать это использование Система. Отражение. Испустите , однако я рекомендовал бы Моно. Cecil. Это испытывает недостаток в хороших документах (как будто отражение испускает, имеет их).. Но это предлагает намного лучшую эмиссию блока и отражение.

Другая проблема - то, что это менее, чем тривиально, чтобы загрузить код, и позже избавиться от него, в .net платформе. По крайней мере, Вы не можете разгрузить блоки. Можно разгрузить appdomains, но целый бизнес загружающегося кода в отдельный appdomain и вызов его внешне могут стать довольно грязными..NET 3.5's Система. Дополнительный материал должен сделать это легче.

4
ответ дан mgsloan 24 November 2019 в 18:23
поделиться

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

6
ответ дан denis phillips 24 November 2019 в 18:23
поделиться

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

10
ответ дан Curt Hagenlocher 24 November 2019 в 18:23
поделиться

Я рекомендовал бы против фактической генерации блоков, если Вы абсолютно не должны, особенно если Вы просто начинаете с реализацией генетического алгоритма.

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

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

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

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

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

14
ответ дан Scott Wisniewski 24 November 2019 в 18:23
поделиться

MSDN имел статью в прошлом году о генетическом программировании: Генетические алгоритмы: Естественный отбор с Windows Forms

24
ответ дан Judah Gabriel Himango 24 November 2019 в 18:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: