Решение для бедных:
var checkLoad = function() {
document.readyState !== "complete" ? setTimeout(checkLoad, 11) : alert("loaded!");
};
checkLoad();
Добавил этот, немного лучше, я предполагаю, собственный объем и нерекурсивный
(function(){
var tId = setInterval(function() {
if (document.readyState == "complete") onComplete()
}, 11);
function onComplete(){
clearInterval(tId);
alert("loaded!");
};
})()
После разработки моего собственного дидактического приложения по генетическому программированию я нашел полную структуру генетического программирования под названием AForge.NET Genetics . Это часть библиотеки Aforge.NET . Он под лицензией LGPL.
Я поддерживаю порт ECJ в C#. Это является большим.
Я читаю Полевое Руководство А по Генетическому Программированию прямо сейчас (бесплатная загрузка PDF). Это также доступно как книга в мягкой обложке. Это диски использование библиотеки, записанной в Java, названном TinyGP. Вы могли бы вытащить некоторый пробег из этого. Я не начал делать любое фактическое программирование, но надеюсь, применяет некоторые понятия в C#.
Вы имеете в виду фактическое генетическое программирование, в противоположность генетическим алгоритмам в целом?
Если так, C#/.net не является лучшим языком для него. LISP, например, всегда был оплотом GP.
Однако, если Вы должны, Вы, вероятно, собираетесь хотеть динамично генерировать CIL / MSIL. Вы могли сделать это использование Система. Отражение. Испустите , однако я рекомендовал бы Моно. Cecil. Это испытывает недостаток в хороших документах (как будто отражение испускает, имеет их).. Но это предлагает намного лучшую эмиссию блока и отражение.
Другая проблема - то, что это менее, чем тривиально, чтобы загрузить код, и позже избавиться от него, в .net платформе. По крайней мере, Вы не можете разгрузить блоки. Можно разгрузить appdomains, но целый бизнес загружающегося кода в отдельный appdomain и вызов его внешне могут стать довольно грязными..NET 3.5's Система. Дополнительный материал должен сделать это легче.
Я видел хорошее высокоуровневое обсуждение его на channel9 Mike Swanson в http://channel9.msdn.com/posts/Charles/Algorithms-and-Data-Structures-Mike-Swanson-Genetic-Session-Scheduler/
Вы могли бы быть в состоянии реализовать генетическое программирование с помощью деревьев выражений LINQ - оно, более вероятно, генерирует что-то применимое, чем случайное поколение IL.
Я рекомендовал бы против фактической генерации блоков, если Вы абсолютно не должны, особенно если Вы просто начинаете с реализацией генетического алгоритма.
генетический алгоритм является самым легким реализовать, когда выходной язык функционален и с динамическим контролем типов. Это обычно, почему большая часть исследования генетического алгоритма записана в LISP. В результате, если Вы собираетесь реализовать его в C#, Вы - вероятно, более обеспеченное определение Вашего собственного мини-"древовидного языка", наличие алгоритма генерируют деревья и просто интерпретацию деревьев, когда это прибывает время для выполнения каждого повторения алгоритма.
я сделал проект как это, когда я был в колледже (реализация генетического алгоритма в C#), и это было подходом, который я проявил.
Выполнение его тот путь даст Вам преимущество только наличия 1 представления для работы с (представление AST), который оптимально подходит и для выполнения и для шагов "воспроизведения" генетического алгоритма.
, С другой стороны, при попытке генерировать блоки, Вы, вероятно, собираетесь закончить тем, что добавили большую сумму ненужной сложности к приложению. В настоящее время CLR не позволяет блоку быть разгруженным от домена App, если домен целого приложения не уничтожается. Это означало бы, что необходимо будет вращать домен отдельного приложения для каждой сгенерированной программы в каждом повторении алгоритма, чтобы не вводить гигантскую утечку памяти в приложение. В целом все это просто добавило бы набор дополнительного раздражения.
Интерпретируемый AST, с другой стороны, является предметом коллекционирования мусора точно так же, как любой другой объект, и таким образом, Вам не было бы нужно обезьяне вокруг с несколькими доменами приложения. Если, для производительности обосновывает, что Вы хотите генералу кода конечный результат, можно добавить поддержку этого позже. Однако я, Вы рекомендовали бы сделать то использование класс DynamicMethod . Это позволит Вам преобразовывать AST в скомпилированного делегата динамично во времени выполнения. Это позволит Вам развернуть единственный DLL при сохранении материала генерации кода максимально простым. Кроме того, экземпляры DynamicMethod являются предметом коллекционирования мусора, таким образом, Вы могли закончить тем, что наняли их как часть генетического алгоритма для ускорения вещей там также.
MSDN имел статью в прошлом году о генетическом программировании: Генетические алгоритмы: Естественный отбор с Windows Forms