문제

저는 C#에 대한 몇 가지 좋은 유전 프로그래밍 예제를 찾고 있었습니다.좋은 온라인/도서 자료를 아는 사람이 있나요?진화/유전 프로그래밍을 위한 C# 라이브러리가 있는지 궁금하십니까?

도움이 되었습니까?

해결책

개발 후 나만의 유전 프로그래밍 교훈적 응용 프로그램, 저는 다음과 같은 완전한 유전 프로그래밍 프레임워크를 발견했습니다. AForge.NET 유전학.그것은의 일부입니다 Aforge.NET 라이브러리.LGPL에 따라 라이센스가 부여되었습니다.

다른 팁

MSDN에는 작년에 유전 프로그래밍에 관한 기사가 있었습니다. 유전 알고리즘:Windows Forms를 사용한 적자생존

꼭 필요한 경우가 아니면, 특히 유전자 알고리즘 구현을 이제 막 시작한 경우에는 실제로 어셈블리를 생성하지 않는 것이 좋습니다.

유전자 알고리즘은 대상 언어가 기능적이고 동적으로 입력될 때 구현하기 가장 쉽습니다.이것이 일반적으로 대부분의 유전 알고리즘 연구가 LISP로 작성되는 이유입니다.결과적으로 C#으로 구현하려는 경우 자신만의 미니 "트리 언어"를 정의하고, 알고리즘이 트리를 생성하도록 하고, 알고리즘의 각 반복을 실행할 때 트리를 해석하는 것이 더 나을 것입니다. .

나는 대학에 다닐 때 이와 같은 프로젝트(C#으로 유전 알고리즘을 구현하는 것)를 수행했고 그것이 내가 취한 접근 방식이었습니다.

그렇게 하면 실행 및 유전자 알고리즘 "재생" 단계 모두에 최적으로 적합한 1개의 표현(AST 표현)만 사용할 수 있다는 이점이 있습니다.

또는 어셈블리를 생성하려고 하면 결국 앱에 불필요한 복잡성이 많이 추가될 수 있습니다.현재 CLR은 전체 앱 도메인이 삭제되지 않는 한 앱 도메인에서 어셈블리를 언로드하는 것을 허용하지 않습니다.이는 앱에 대규모 메모리 누수가 발생하는 것을 방지하기 위해 알고리즘을 반복할 때마다 생성된 각 프로그램에 대해 별도의 앱 도메인을 가동해야 함을 의미합니다.일반적으로 모든 것이 짜증을 더할 뿐입니다.

반면에 해석된 AST는 다른 개체와 마찬가지로 가비지 수집이 가능하므로 여러 앱 도메인을 가지고 애쓰지 않아도 됩니다.성능상의 이유로 최종 결과를 코드 생성하려는 경우 나중에 이에 대한 지원을 추가할 수 있습니다.하지만 다음을 사용하여 그렇게 하는 것이 좋습니다. 동적 방법 수업.이를 통해 런타임에 AST를 컴파일된 대리자로 동적으로 변환할 수 있습니다.그러면 코드 생성 작업을 최대한 단순하게 유지하면서 단일 DLL을 배포할 수 있습니다.또한 DynamicMethod 인스턴스는 가비지 수집이 가능하므로 이를 유전자 알고리즘의 일부로 사용하여 작업 속도를 높일 수도 있습니다.

LINQ 식 트리를 사용하여 유전 프로그래밍을 구현할 수도 있습니다. 이는 무작위 IL 생성보다 사용 가능한 항목을 생성할 가능성이 더 높습니다.

나는 Mike Swanson이 채널9에서 이에 대한 좋은 고급 토론을 보았습니다. http://channel9.msdn.com/posts/Charles/Algorithms-and-Data-Structures-Mike-Swanson-Genetic-Session-Scheduler/

일반적인 유전자 알고리즘이 아닌 실제 유전자 프로그래밍을 의미합니까?

그렇다면 C#/.net은 이에 가장 적합한 언어가 아닙니다.예를 들어 LISP는 항상 GP의 중심이었습니다.

그러나 꼭 필요한 경우에는 CIL/MSIL을 동적으로 생성하고 싶을 것입니다.당신은 이것을 사용하여 이것을 할 수 있습니다 시스템.반사.방출, 하지만 나는 추천하고 싶다 모노.세실.좋은 문서가 부족합니다(리플렉션 방출에 문서가 있는 것처럼)..그러나 훨씬 더 나은 어셈블리 방출 및 반사를 제공합니다.

또 다른 문제는 .net 프레임워크에서 코드를 로드하고 나중에 폐기하는 것이 쉽지 않다는 것입니다.최소한 어셈블리를 언로드할 수는 없습니다.appdomain을 언로드할 수 있지만 별도의 appdomain에 코드를 로드하고 외부에서 호출하는 전체 비즈니스가 꽤 복잡해질 수 있습니다..NET 3.5의 System.Addin 기능을 사용하면 이 작업이 더 쉬워집니다.

일반적으로 유전자 알고리즘이나 경험적 최적화에 관심이 있다면 다음을 살펴보는 것이 좋습니다. 휴리스틱랩.새 버전을 출시한 지 1.5년, 수년에 걸쳐 개발되었습니다.C# 4로 프로그래밍되었으며 멋진 GUI를 가지고 있습니다.유전 알고리즘, 유전 프로그래밍, 진화 전략, 지역 검색, 금기 검색, 입자 군집 최적화, 시뮬레이션 어닐링 등과 같은 많은 알고리즘이 이미 사용 가능합니다.또한 차량 경로 문제, 순회 판매원, 실제 기능 최적화, 배낭, 2차 할당 문제, 분류, 회귀 등과 같은 여러 가지 문제가 구현되어 있습니다.튜토리얼도 있으며 프로토콜 버퍼가 통합되어 있어 솔루션 평가를 위해 외부 프로그램과 통신할 수 있습니다.GPL에 따라 라이센스가 부여됩니다.2009년에 이 소프트웨어는 Microsoft Austria의 Microsoft 혁신상을 받았습니다.

우리는 또한 이 주제에 관한 책을 썼습니다: 유전 알고리즘과 유전 프로그래밍.

도움이 될 수 있는 무료 제품이 있습니다. 유전 알고리즘 프레임워크 .Net 4.0 일부 지원 문서가 포함된 단일 .Net 4.0 어셈블리입니다.

내가 읽고있다 유전자 프로그래밍에 대한 현장 가이드 지금 당장(무료 PDF 다운로드)단행본으로도 이용 가능합니다.Java로 작성된 라이브러리의 사용에 대해 설명합니다. 타이니GP.그것으로 약간의 마일리지를 얻을 수도 있습니다.실제 프로그래밍을 시작하지는 않았지만 C#의 일부 개념을 적용하고 싶습니다.

모든 기능을 갖춘 Evolutionary Computation 프레임워크에 관심이 있다면 ECJ를 C# .NET 4.0으로 포크했습니다.패키지에는 모든 작업 샘플을 포함하여 원본 ECJ Java 프로젝트의 모든 것이 포함되어 있습니다.

또한 변환의 여러 측면을 확인하기 위해 500개의 단위 테스트를 작성했습니다.하지만 더 많은 테스트가 필요합니다.특히 분산 계산 측면은 완전히 테스트되지 않았습니다.그 이유는 ECJ의 단순한 소켓 사용에서 WCF 및 WF를 사용하는 보다 강력한 전략으로 전환할 계획이기 때문입니다.또한 TPL(Task Parallel Library)을 활용하기 위해 프레임워크를 재작업할 예정입니다.

어쨌든 여기에서 초기 변환을 다운로드할 수 있습니다.

http://branecloud.codeplex.com

나는 또한 "합성 지능" 연구와 관련된 여러 다른 프레임워크를 Java에서 .NET으로 변환하는 과정에 있습니다(시간을 찾을 수 있을 때).

당신은 시도 할 수 있습니다 GeneticSharp.

여기에는 선택, 교차, 돌연변이, 재삽입 및 종료와 같은 모든 고전적인 GA 작업이 포함됩니다.

확장성이 매우 뛰어나므로 자신만의 염색체, 적합성 기능, 인구 생성 전략 및 위에 인용된 모든 작업을 정의할 수 있습니다.

C# 라이브러리 및 Unity 3D 게임과 같은 다양한 종류의 앱에서 사용할 수 있습니다. GTK# 앱 그리고 유니티 3D 체커 게임.

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에 대한 큰 섹션을 제공합니다.

C#에서 ECJ 포트를 유지 관리합니다.훌륭해요.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top