سؤال

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

نهجي هو بناء شبكة من 385 الخلايا العصبية: هناك ست قطع شطرنج فريدة من نوعها و 64 حقلا على اللوحة. لذلك لكل مجال نأخذ 6 الخلايا العصبية (1 لكل قطعة). إذا كان هناك قطعة بيضاء، فإن قيمة الإدخال هي 1. إذا كانت هناك قطعة سوداء، فإن القيمة هي -1. وإذا لم يكن هناك قطعة من هذا النوع في هذا المجال، فإن القيمة هي 0. بالإضافة إلى ذلك يجب أن يكون هناك خلاص عصبي واحد للاعب للتحرك. إذا كان بدوره أبيض، فإن قيمة الإدخال هي 1 وإذا كان دورها الأسود، فإن القيمة هي -1.

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

لذلك سيكون من الرائع إذا كنت تستطيع مساعدتي في تنفيذ الشبكة العصبية في لغة ترميز (أفضل سيكون دلفي، وإلا كود الزائفة). شكرا مقدما!

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

المحلول

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

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

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

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

نصائح أخرى

في حال وجدت شخص ما بشكل عشوائي هذه الصفحة. بالنظر إلى ما نعلمه الآن، ما يقترح المرجع نفسه بالتأكيد. في الواقع تمكنا من القيام بذلك للحصول على لعبة ذات مساحة أكبر بكثير - تذهب ( https://deepmind.com/alpha-go. ).

لا أرى لماذا لا يمكنك الحصول على شبكة عصبية لتقييم ثابت إذا قمت أيضا ببعض Lookahead الكلاسيكية Mini Max مع تشذيب ألفا بيتا. تستخدم الكثير من محركات الشطرنج MiniMax مع مقيم ثابت من BrainDead يضيف فقط القطع أو أي شيء؛ لا يهم كثيرا إذا كان لديك مستويات ما يكفي من minimax. لا أعرف كم من التحسن الذي سيجعله الشبكة ولكن هناك القليل من الخسارة. التدريب سيكون صعبة على الرغم من. أقترح استخدام محرك يتطلع إلى الأمام العديد من التحركات (ويأخذ الكثير من وحدة المعالجة المركزية وما إلى ذلك) لتدريب المقيم الخاص بمحرك يتطلع إلى الأمام. وبهذه الطريقة، ينتهي بك مع محرك لا يتطلب الكثير من وحدة المعالجة المركزية (نأمل).

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

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

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

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

حاولت بناء وتدريب آن للعب TIC-TAC-Toe عندما كنت في 16 عاما أو نحو ذلك ... وفشلت. أود أن أقترح تجربة مثل هذه اللعبة البسيطة أولا.

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

خياراتك كما أراهم هي:

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

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

مع الخيار الثاني، يمكنك دائما إطعام تسلسلات الطائرة من ألعاب Grandmaster والأمل، هناك تغطية كافية لتطوير حل.

نظرا لتعقيد المشكلة، أود أن أرم أكبر شبكة (أي: الكثير من العقد الداخلية) في ذلك وأنا أمكن دون إبطاء التدريب أكثر من اللازم.

من الممكن، ولكن ليس تافهة بأي وسيلة.

https://erikbern.com/2017/11/29/deep-lening-for-chess/

لتدريب وظيفة التقييم الخاصة به، استخدم الكثير من قوة الحوسبة للقيام بذلك.

لتلخيص عموما، يمكنك الذهاب حول هذا الموضوع على النحو التالي. وظيفة التقييم الخاصة بك هي FeedForward NN. دع حسابات مصفوفة تؤدي إلى إخراج العددية تقييم مدى جودة التحرك. ومتجه المدخلات للشبكة هي حالة اللوحة هي الدولة المجلس التي تمثلها جميع القطع الموجودة على اللوحة، لذلك قل البيدق الأبيض هو 1، فارس أبيض هو 2 ... ومساحة فارغة هي 0. ومثال ومثال مجلس إدارة الدولة هو ببساطة سلسلة من 0 12's. يمكن تدريب هذا التقييم باستخدام ألعاب Grandmaster (متوفرة في قاعدة بيانات FICS على سبيل المثال) للعديد من الألعاب، مما يقلل من فقدان المعلمات الحالية هو أعلى التقييم وهو أعلى تقييم وما الذي يتحرك الجهان المحدد (الذي يجب أن يكون لديه أعلى تقييم). هذا بالطبع يفترض أن يتحرك Grandmaster صحيحة ودمسية.

جاء هنا ليقول ما قاله سيلاس. باستخدام خوارزمية Minimax، يمكنك أن تتوقع أن تكون قادرا على النظر إلى الأمام N يتحرك. باستخدام تشذيب Alpha-Beta، يمكنك توسيع ذلك إلى التحركات من الناحية النظرية 2 * N، ولكن أكثر واقعية يتحرك 3 * n / 4. الشبكات العصبية مناسبة حقا هنا.

ربما على الرغم من أن الخوارزمية الوراثية يمكن استخدامها.

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

يجب أن تعطي طبقة الإخراج (في شكل ما) القطعة للتحرك، والموقع للانتقال إلى.

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

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

قراءة Blondie24: http://www.amazon.co.uk/blondie24-playing-kaufmann-artificial-intelligence/dp/1558607838..

يتعامل مع لعبة الداما بدلا من الشطرنج ولكن المبادئ هي نفسها.

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