سؤال

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

على سبيل المثال ، إذا كان كروموسوم واحد هو:

["Hello", 4, "anotherString"]

أود أن يصبح شيئًا مثل:

0100100100101001010011110011

(هذه ليست ترجمة فعلية). إذن ... كيف يمكنني فعل هذا؟ ستحتوي الكروموسومات على نفس كمية الأوتار والأعداد الصحيحة ، ولكن يمكن أن تختلف هذه الأرقام من خوارزمية واحدة تم تشغيلها إلى آخر.

لكي أكون واضحًا ، ما أريد الحصول عليه هو تمثيل البت لكل عنصر في كروموسوم متسلسل.

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

شكرًا جزيلاً! مانويل

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

المحلول

يمكنك تحويل الأوتار والأعداد الصحيحة إلى البث (والعودة) مع بنية الوحدة ، وهذا بالضبط 8 بت بايت. إذا كنت تريد لسبب ما هذه الأذرع الثنائية كسلاسل نصية مكونة من 0 و 1 الشخصيات ، يمكنك طباعتها في شكل ثنائي ، بالطبع.

يحرر: نسيت أن تذكرك بكيفية تنسيق بايت في سلسلة نصية مكونة من 0 و 1 الشخصيات - في بيثون 2.6 أو أفضل:

>>> format(23, '08b')
'00010111'

والعودة من مثل هذه السلسلة إلى بايت ، بالطبع:

>>> int('00010111', 2)
23

نصائح أخرى

Converting everything into one concatenated string, and than applying genetic operations doesn't seem to be the best idea. Genetic operations can break here many things (especially if you have some constrains on individuals), additionally effectiveness of such solution is probably low. I would suggest different approach.

Try implementing individual using SuperGene concept (wiki). Example of applying it to GA is described here. Additionally as per this they say it improves overall GA performance.
In my opinion it will make design clearer. I would try this approach.

Once you describe exactly how the translation from strings to bitstrings should go, the "how" should be fairly easy. If the genetic algorithms should work on a bit-level then obviously a bit level string makes sense, but it is probably way slower than using numbers or character strings.

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