سؤال

لقد كنت أبحث عن بعض الوراثية الأمثلة البرمجية C#.أي شخص يعرف من على الانترنت جيدة/كتاب الموارد ؟ أتساءل عما إذا كان هناك C# مكتبة هناك التطورية الوراثية البرمجة ؟

هل كانت مفيدة؟

المحلول

بعد وضع بلدي الوراثية البرمجة التعليمية التطبيق, وجدت الوراثية الكاملة إطار البرمجة يسمى AForge.NET علم الوراثة.انها جزء من Aforge.NET مكتبة.هو المرخص لها بموجب LGPL.

نصائح أخرى

MSDN مقالا العام الماضي عن البرمجة الجينية: الخوارزميات الجينية:البقاء للأصلح مع نماذج Windows

أنصح ضد توليد الجمعيات إلا إذا كنت بحاجة على الإطلاق, خاصة إذا كنت بدأت للتو مع تنفيذ الخوارزمية الجينية.

الخوارزمية الجينية هو أسهل لتنفيذ عندما لغة الهدف هو وظيفي وحيوي كتبته.عموما لماذا معظم الخوارزمية الجينية البحث هو مكتوب في اللثغة.ونتيجة لذلك ، إذا كنت تنوي تنفيذه في C#, ربما كنت أفضل حالا تحديد الخاصة بك مصغرة "شجرة اللغة" ، وجود خوارزمية توليد الأشجار فقط تفسير الأشجار عندما يحين الوقت لتشغيل كل تكرار الخوارزمية.

فعلت مثل هذا المشروع عندما كنت في الكلية (تنفيذ الخوارزمية الجينية في C#) و كان ذلك هو النهج الذي أخذت.

هذه الطريقة سوف تعطيك ميزة وجود سوى 1 في التمثيل للعمل مع (AST التمثيل) التي هي مناسبة بشكل مثالي ل على حد سواء تنفيذ الخوارزمية الجينية "الاستنساخ" الخطوات.

بدلا من ذلك, إذا كنت تحاول إنشاء جمعيات كنت على الارجح في نهاية المطاف إضافة كمية كبيرة من لزوم لها التعقيد إلى التطبيق.حاليا ، CLR لا تسمح الجمعية إلى تفريغها من التطبيق المجال إلا التطبيق بأكمله المجال هو تدميرها.هذا يعني أنك سوف تحتاج إلى زيادة منفصلة التطبيق المجال لكل ولدت البرنامج في كل تكرار الخوارزمية إلى تجنب إدخال عملاق تسرب الذاكرة في التطبيق الخاص بك.في العام, كل شيء سيكون مجرد إضافة حفنة من خارج تهيج.

تفسير AST ، من ناحية أخرى ، يتم تحصيل القمامة تماما مثل أي كائن آخر ، حتى أنك لن تحتاج إلى قرد حولها مع التطبيق متعددة المجالات.إذا لأسباب تتعلق بالأداء تريد رمز الجيل النتيجة النهائية يمكنك إضافة الدعم في وقت لاحق.ومع ذلك أنا سوف نوصي أن يمكنك أن تفعل ذلك باستخدام DynamicMethod فئة.وسوف تسمح لك لتحويل AST في تجميع مندوب بشكل حيوي في وقت التشغيل.التي سوف تمكنك من نشر واحد DLL مع الحفاظ على رمز جيل الأشياء بسيطة قدر الإمكان.أيضا ، DynamicMethod حالات القمامة تحصيلها حتى يمكن أن ينتهي في توظيف لهم كجزء من الخوارزمية الجينية لتسريع الامور هناك أيضا.

كنت قد تكون قادرة على تنفيذ الوراثية البرمجة باستخدام LINQ التعبير الأشجار-أنه من المرجح أن تولد شيئا قابلة للاستخدام من عشوائية IL جيل.

رأيت عالية المستوى الجيد مناقشة على channel9 مايك سوانسون في http://channel9.msdn.com/posts/Charles/Algorithms-and-Data-Structures-Mike-Swanson-Genetic-Session-Scheduler/

تعني الفعلية الوراثية البرمجة بدلا من الخوارزميات الجينية بشكل عام ؟

إذا كان الأمر كذلك, C#/.صافي ليس أفضل لغة في ذلك.اللثغة ، على سبيل المثال ، كان دائما عماد GP.

ومع ذلك, إذا كنت لا بد ، ربما كنت تريد الذهاب إلى توليد حيوي CIL / MSIL.هل يمكن أن تفعل هذا باستخدام النظام.انعكاس.تنبعث منها, ومع ذلك أنصح أحادية.سيسيل.فإنه يفتقر إلى مستندات جيدة (كما لو انعكاس تنبعث منهم)..ولكنه يقدم أفضل بكثير الجمعية الانبعاثات والتفكير.

وثمة مسألة أخرى هي أن أقل من تافهة لتحميل الكود وبعد ذلك التخلص من ذلك في .net framework.على الأقل لا يمكنك تفريغ التجمعات.يمكنك تفريغ appdomains ، ولكن الأعمال كلها من تحميل التعليمات البرمجية في سياق منفصل appdomain ، داعيا خارجيا يمكن أن تحصل فوضى..NET framework 3.5 النظام.الدين الاشياء ينبغي جعل هذا أسهل.

إذا كنت مهتما في الخوارزميات الجينية أو ارشادي الأمثل في العامة قد ترغب في إلقاء نظرة على HeuristicLab.يتم تطويره منذ عدة سنوات ، 1.5 سنوات منذ أن صدر الإصدار الجديد.يتم برمجتها في C# 4 و لطيفة واجهة المستخدم الرسومية.هناك العديد من الخوارزميات المتاحة بالفعل مثل الخوارزمية الجينية الوراثية البرمجة تطور استراتيجية البحث المحلي ، تابو البحث سرب الجسيمات الأمثل, محاكاة الصلب وأكثر من ذلك.هناك أيضا العديد من المشاكل تنفيذها مثل السيارة التوجيه المشكلة بائع السفر الحقيقي وظيفة الأمثل, حقيبة, الدرجة الثانية احالة المشكلة, تصنيف, الانحدار, وغيرها الكثير.هناك دروس أيضا و لدينا بروتوكول مخازن متكامل بحيث يمكنك التواصل مع البرامج الخارجية من أجل حل التقييم.هو المرخص لها بموجب الترخيص.في عام 2009 البرنامج تلقت مايكروسوفت جائزة الابتكار من مايكروسوفت النمسا.

لقد كتب أيضا كتابا عن هذا الموضوع: الخوارزميات الجينية و الوراثية البرمجة.

لدي منتج الحرة التي قد تساعد. الخوارزمية الجينية الإطار .Net 4.0 هو واحد .Net 4.0 الجمعية مع دعم بعض المواد.

أنا أقرأ دليل ميداني الوراثية البرمجة الآن (PDF مجانا تحميل).بل هو أيضا متاح في كتاب ورقي الغلاف.أنه تناقش استخدام مكتبة مكتوب في جاوة يسمى TinyGP.قد تحصل على بعض الأميال من ذلك.أنا لم تكن قد بدأت تفعل أي البرمجة الفعلية ولكن أنا على أمل أن يطبق بعض المفاهيم في C#.

لقد متشعب محكمة العدل الأوروبية إلى C# .NET 4.0 إذا كنت مهتما في كامل المواصفات التطورية حساب الإطار.حزمة تشمل كل شيء من الأصل العدل الأوروبية جافا المشروع ، بما في ذلك كل من عمل العينات.

كتبت أيضا 500 وحدة الاختبارات للتحقق من جوانب كثيرة من عملية التحويل.ولكن العديد من الفحوصات اللازمة.ولا سيما توزيع حساب الجوانب يتم اختبارها بشكل كامل.هذا لأنني تخطط لتحويل من محكمة العدل الأوروبية بسيطة استخدام مآخذ أكثر قوة استراتيجية استخدام صندوق رأس المال العامل و WF.أنا أيضا إعادة صياغة الإطار إلى الاستفادة من TPL (مهمة موازية المكتبة).

على أي حال, يمكنك تحميل التحويل الأولي هنا:

http://branecloud.codeplex.com

أنا أيضا في عملية تحويل عدة أطر أخرى من جافا .الشبكة التي تتصل "الاصطناعية الاستخبارات" البحوث (عندما أجد الوقت).

بن

يمكنك محاولة GeneticSharp.

كان لديه كل الكلاسيكي GA العمليات ، مثل اختيار, كروس, طفرة, وإنهاء الإلحاق.

انها جدا الموسعة ، يمكنك تحديد الخاصة بك الكروموسومات اللياقة البدنية وظيفة السكان استراتيجية الجيل و كل استشهد العمليات المذكورة أعلاه أيضا.

ويمكن استخدامه في العديد من التطبيقات ، مثل C# مكتبات وحدة ألعاب 3D ، هناك عينات تشغيله في GTK# التطبيق و الوحدة 3D لعبة الداما.

كما أنها تعمل في الفوز و 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();

مانينغ الكتاب:"Metaprogramming في .صافي"يخصص قسم كبير على سباق الجائزة الكبرى عن طريق التعبير الأشجار.

أنا الحفاظ على ميناء محكمة العدل الأوروبية في C#.انه لشيء رائع.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top