ما الخوارزمية التي يجب أن أستخدمها ل "تحسين منظمة العفو الدولية"

StackOverflow https://stackoverflow.com/questions/1471171

سؤال

بادئ ذي بدء: هذا هو ليس سؤال حول كيفية جعل برنامج يلعب خمسة على التوالي. ذهبت هناك وقمت بذلك.

التفسير التمهيدي

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

  1. إذا كان المربع لديه بالفعل رمزية، فإن النتيجة هي 0 نظرا لأنها ستكون غير قانونية وضع رمزية جديدة في المربع.

  2. يمكن أن يكون كل مربع جزءا من ما يصل إلى 20 صفوف حائز مختلفة (5 أفقي، 5 عمودي، 10 قطري). درجة المربع هي مجموع درجة كل من هذه الصفوف.

  3. تعتمد درجة الصف على عدد الرموز الودية والعدو الموجودة بالفعل في الصف. أمثلة:

    • يجب أن يكون للصف بأربعة رموز ودية نتيجة لانهائية، لأنه إذا وضعت رمز رمزية هناك فزت في اللعبة.
    • النتيجة للصف مع أربعة العدو يجب أن تكون الرموز مرتفعة للغاية، حيث إذا كنت لا ضع رمزا هناك، سيفوز الخصم في دوره المقبل.
    • سوف يسجل الصف ذو الرموز الودية والعدو 0، لأن هذا الصف لا يمكن أن يكون جزءا من صف فائز.

نظرا لخوارزمية هذه، لقد أعلنت نوعا يسمى TBRAIN:

type
  TBrain = array[cFriendly..cEnemy , 0..4] of integer; 

يشير القيم الموجودة في المجموعة إلى درجة الصف بأي من الرموز الودية و 0 رموز عدو، أو 0 الرموز الودية ورموز العدو N. إذا كان هناك 5 رموز في صف واحد، فلا توجد نتيجة لأن الصف ممتلئ.

من السهل جدا تحديد القيم التي يجب أن تكون في الصفيف. يجب أن يكون الدماغ [0،4] (أربعة رموز ودية) "لا نهائي"، دعونا نسمي ذلك 1.000.000. VBRAIN [1،4] يجب أن يكون مرتفعا للغاية، ولكن ليس مرتفعا أن الدماغ يفضل حظر العديد من العدو يفوز بدلا من الفوز نفسه

Placcer على متن لوحة (غير محتملة):

  0123456789
 +----------
0|1...1...12
1|.1..1..1.2
2|..1.1.1..2
3|...111...2
4|1111.1111.
5|...111....
6|..1.1.1...
7|.1..1..1..
8|1...1...1.

يجب أن يضع اللاعب 2 رمزا له (9،4)، الفوز باللعبة، ليس في (4،4) على الرغم من أنه سينظر بعد ذلك، يجب أن يكون 8 صفوفا محتملة للاعب 1. Ergo، VBRAIN، VBRAIN [1،4] يجب أن يكون (VBRAIN [0،4] / 8) -1. العمل مثل هذا يمكننا العثور على القيم المثلى ل "المخ"، ولكن مرة أخرى، هذا هو ليس ما يهمني. أريد خوارزمية للعثور على أفضل القيم.

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

المشكلة الفعلية

هذا كل شيء للمقدمة، والآن إلى الجزء المثير للاهتمام (بالنسبة لي، على الأقل)

لدي اثنين من "العقول"، VBRAIN1 و VBRAIN2. كيف يجب أن تجعل هذه أفضل هذه أفضل؟ أتصور شيئا مثل هذا:

  1. تهيئة VBRAIN1 و VBRAIN2 مع قيم عشوائية.
  2. محاكاة لعبة بينهما.
  3. قم بتعيين القيم من الفائز إلى الخاسر، ثم تغيير واحد منهم بشكل عشوائي قليلا.

هذا لا يبدو العمل. العقول لا تحصل على أي ذاء. لماذا ا؟

هل يجب أن تضيف طريقة النتيجة بعض القيم العشوائية الصغيرة إلى النتيجة، بحيث تكون مباراتين بين نفس البلدين ستكون مختلفة؟ كم يجب أن تتغير القيم لكل تكرار؟ كيف يجب تهيئة "العقول"؟ مع القيم الثابتة؟ مع القيم العشوائية؟

أيضا، هل هذا لديه اى شى القيام به مع الجوارب العظمى أو الخوارزميات الوراثية على الإطلاق؟

ملاحظة: السؤال لا علاقة له بخمسة على التوالي. هذا مجرد شيء اختارته لأنني أستطيع أن أعلن "عقل" بسيطة للغاية للتجربة.

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

المحلول

بشكل عام، نعم يمكنك أن تجعل مخ أكثر ذكاء باستخدام تقنيات الخوارزميات الوراثية.

العشوائية، أو الطفرة، يلعب جزءا كبيرا على البرمجة الوراثية.

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

نصائح أخرى

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

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

إلقاء نظرة على تطور العصبي لزيادة التشريح (مرتب). الفتحة الهائلة التي تعني أساسا تطور الشباك العصبية - هيكلها (طوبولوجيا) وأوزان الاتصال. كتبت تطبيق .NET يسمى Sharpneat قد ترغب في إلقاء نظرة عليه. Sharpneat V1 لديه أيضا تجربة TIC-TAC-TOE.

http://sharpneat.sourceforge.net/

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