سؤال

أريد استخدام GA لتحديد المسار الأمثل من A إلى B، مرضية معينة (الطول وعدد المنعطفات، إلخ)

مثال على المسار هو: أعلى 4، اليسار 8، أسفل 3، اليمين 3، أسفل 1، اليسار 10، أعلى 4، اليسار 1، أعلى 3

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

هل لدى أي شخص فكرة جيدة كيف تفعل شيئا كهذا؟

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

المحلول

لست متأكدا بالضبط ما هي مشكلة التمثيل الخاصة بك، لذلك أظن أن لديك هذه السؤال من سوء فهم سلسلة كروموسوم GA. من الناحية النظرية، لا يجب إعادة توحيد سلسلة الكروموسوم بشكل صريح على حدود عدد صحيح إذا كنت تأخذ الخطوة الإضافية لترسيم الجينات الفردية الخاصة بك، والتي ستتيح لك إعادة التوصيل على أساس جين جين. هذا يحل مشكلة جين متغير طول، مثل "مسار" الخاص بك. تعد جينات متغيرة الطول المتغيرة لمسألة إضافة متغير آخر لطريقة الطفرة، وتحديدا "استخدم هذا العنصر أو Nuke هذا العنصر" بالإضافة إلى "عنصر الاستخدام من A أو عنصر من B" إذا كان الجين الخاص بك غير قابل للكسر في منفصلة العناصر، كما هو المسار الخاص بك هو.

نصائح أخرى

يبدو أنك تريد حقا أن تستخدم شيئا مثل خوارزمية التحسين, ، والتي يتم استخدامها بشكل شائع (إلى تأثير جيد) لاستدلاع المسار. يمكنك تحديد أي وظيفة إرهابية تحبها من أجل الحصول على حل التباين.

أود استخدام U، D، L، R ....

لذلك "أعلى 4، اليسار 8، أسفل 3، اليمين 3، أسفل 1، اليسار 10، أعلى 4، اليسار 1، أعلى 3" سيكون:

uuuullllllllldddrrrrrdlllllllllllluuuuluuu.

سيكون من الأسهل بكثير تربية سلاسل مثل هذا.

بالنسبة ل (15 حرفا) و B (3 chars)، ستكون وظيفة تربية بلدي بين A & B:

  • اختر الطول المطلوب عشوائيا (Len) بين 1 و Max (Len (A)، Len (B)) {بين 1 و 15}
  • اختر نقطة تقسيم عشوائية بين 1 ولين.
  • اختر ما إذا كنت تريد O أو B للذهاب بشكل عشوائي أولا.
  • خذ الشخصيات الأولى من واحد للذهاب أولا، والأحرف الأخيرة (Len-s) من الآخر.

يمكن GA التعامل مع الكروموسومات مع طول متغير. يمكن أن يكون الفرد الفعلي معقدا للغاية. على سبيل المثال، يمكن أن يحتوي على بعض عدد البتات الطول الثابت، سلسلة الأحرف (بدون طول ثابت)، وربما بعض مجموعة من أزواج أرقام معقدة مقدز. بالإضافة إلى ذلك، يجب دائما الحفاظ على أزواج أرقام معقدة بعض الظروف. يمكن القيام به، ولكن يحصل الفرد الأكثر تعقيدا، والعمليات الوراثية الأكثر تعقيدا تحصل (مثل العبور، طفرة). ربما ستأخذ وظيفة اللياقة البدنية بعض خطوط التعليمات البرمجية. ولكن لا يزال ممكنا.

ربما كما هو مقترح يمكنك اختيار تمثيل المسار المشفرة الأرقام، ولكن لا يزال من الممكن القيام به مع مثالك مشفرة أسامة العسيري اقترحت: uuuullllllllldddrrrrrdlllllllllllluuuuluuu..
للعبور:

  • دع مشغل التحور اقرأ Lenght1 الحالي من الفرد المعطى،
  • توليد رقمين عشوائيين X1، Y1، كلا X1، Y1 = <lenght1 و x1! = y1 (هذه هي نقاط القطع الخاصة بك للفرد 1)،
  • افعل نفس الشيء بالنسبة للفرد 2، والآن لديك زوجان (x1، y1) و (x2، y2)،
  • نسخ من الفرد 1 ما هو بين x1 و y1، وأدخلها في الفرد 2 بين القيم x2 و y2. إصدار جديد من الفرد 2 قد يغير طوله كرقم من الجينات بين X1Y1 و X2Y2 مختلفة، ولكن هذا موافق،
  • ما كان في الإصدار الأصلي من الفرد 2 بين X2Y2 يجب إدراجها في إصدار جديد من الفرد 1 بين X1Y1 (سوف تتغير طوله أيضا)،

لنوضح:
الوالد a: uuuullllllllldddrrrdllllllllllllllllluuuuuuuuu
الوالد ب: drrrrluludddr
تولد أزواج عشوائية Paira (4،18)، PURB (0،5) على افتراض أنك تعول الجينات من 0 أنت مبادلة بعد السلاسل:
Uuuullllllllldddrrd.lllllllllluuuuu.
drrrrl.uludddr.
لذلك بعد الصليب عليك
Uuuudrrrrl.lllllllllluuuuu.
llllllllldddrrd.uludddr.
الآن أنت فقط صادرت عبرت. يمكنك استخدام وجهة نظر واحدة أيضا أو مضاعفة النقاط.

كما هو الحال بالنسبة للطفرة:

  • توليد عدد بين 0 وطول الفرد،
  • توليد عدد بين 1-4 وتحديث هذا الجين. (إذا تم إنشاء 1 تغييره إلى U، 2-D، 3-L، 4-R)

أنت فقط فعلت طفرة. يمكنك أيضا التحور أكثر من جين واحد.

ولكن كما قلت، هناك إمكانيات أخرى.

بالنسبة لي هذا يبدو مشابها تماما مبيعات السفر مشكلة, ، هل تحتوي هذه الصفحة على بعض المعلومات المفيدة؟

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