أهلا ومرحبا بكم في هذا البرنامج التعليمي.
حسنًا ، لقد حسبنا الكون وأضفناه إلى قائمة الكون.
والآن ما سنفعله هو إجراء سحب عشوائي لإجراء وفقًا لتوزيع احتمالات المجموعة
القصوى.
لذلك دعونا نفعل هذا.
هذه هي الخطوة التالية.
ما زلنا في الحلقة لأننا ما زلنا نعمل على الخطوات هنا.
وهكذا تعرف الآن كيف تلعب العمل.
سنقدم أولاً متغيرًا للإجراء المسمى الإجراء ، ثم نأخذ توزيعنا
للاحتمالات وسنستخدم الدالة المتعددة العادية لأخذ سحب عشوائي من توزيع الاحتمالات
هذا.
ثم نضيف تلك البيانات.
لذا من المهم ملاحظة أن الإجراء سيكون في الواقع موترًا بقيمة واحدة فقط.
لكن لا يجب أن ترى هذا كقيمة بسيطة.
يجب أن ترى هذا على أنه موتر للأبعاد ، واحدًا تلو الآخر يحتوي على هذه القيمة للإجراء.
وهذا لأنه غير مضغوط.
والآن لا نزال في نفس حلقة for ، سنحصل على احتمالية السجل المرتبطة بالإجراء الذي تم لعبه
للتو.
ولذا أقوم بتحديث احتمالية السجل الخاصة بي هنا عن طريق أخذ السابقة ، مشكلة السجل السابقة التي قمنا
بحسابها هنا.
ثم سأستخدم طريقة التجميع التي سأقوم بإدخال واحد بها والإجراء الذي تم عرضه لأننا
نريد الحصول على احتمالية السجل المرتبط بهذا الإجراء.
وكوسيطة ثانية هنا ، سأقوم بإدخال عملي ، لكن يجب أن يكون ذلك كمتغير كما هو مطلوب بواسطة دالة getter
وأن دالة التجميع تقوم فقط بفهرسة العدد الصحيح للموتر.
حسنا.
حتى الآن ، حصلنا للتو على خاصية السجل المرتبطة بالإجراء الذي تم عرضه.
والآن الخطوة التالية هي إلحاق ما حصلنا عليه بالقائمة هنا.
لذلك حصلنا على القيمة.
هذا ما حصلنا عليه هنا كمخرج للنموذج.
ثم حصلنا أيضًا على دعامة السجل.
لذلك سنقوم بإضافة خاصية السجل إلى قائمة أدوات السجل.
لقد قمنا بالفعل بإلحاق الإنتروبيا بقائمة الإنتروبيا.
لذلك نحن بخير والمكافآت ، سنحصل عليها بعد ذلك.
لذلك سنلحق الآن القيمة وخاصية السجل بقائمة القيم وقائمة خصائص السجل.
هيا بنا نقوم بذلك.
نأخذ قائمة قيمنا.
نضيف أننا نستخدم وظيفة الإلحاق ونضيف القيمة التي أرجعها النموذج للتو.
في احسن الاحوال.
ثم نفس الشيء بالنسبة لمسائل السجل.
لقد حصلنا للتو على مجسات السجل الجديدة الخاصة بنا وسنقوم بإلحاقها بقائمة مشكلات السجل.
وهكذا في وظيفة الإلحاق هذه ، قمنا بإدخال log الخاص بخاصية log الخاصة بنا والتي تم حسابها للتو هنا.
حسنا.
لذلك تم تحديث قوائمنا الآن بشكل جيد.
إذن ما سنفعله الآن هو تشغيل الإجراء ، لأنه في الواقع هنا ، اخترنا الإجراء من
خلال سحب عشوائي من توزيع الاحتمالات هذا هنا.
لكننا في الواقع لم نلعبها بعد ، وسنلعبها الآن حتى نتمكن من الوصول إلى الحالة الجديدة
وبالتالي الحصول على الإرسال الجديد وتشغيله.
سنأخذ بيئتنا لأننا نلعب العمل في بيئتنا.
ثم سنستخدم طريقة الخطوة وداخلنا نحدد الإجراء الذي تم تحديده لتشغيله.
وللقيام بذلك ، نتخذ الإجراء الخاص بنا ونضيف ذلك المقعد لأن هذا هو ما تتوقعه دالة الخطوة.
لكن هذا يعود.
في الواقع الحالة الجديدة وكذلك المكافأة الجديدة ، لأنه من خلال الوصول إلى حالة جديدة ، نحصل على مكافأة جديدة ونحصل
أيضًا على قيمة جديدة لإنجازها لمعرفة ما إذا كانت اللعبة قد انتهت أم لا.
حسنا.
وبهذا ، نلعب الإجراء ، ونصل إلى الحالة الجديدة ونحصل على المكافأة الجديدة.
ونعرف ما إذا كنا قد انتهينا من اللعبة.
وبالحديث عن الانتهاء من اللعبة ، حسنًا ، سنضيف شيئًا هنا للتأكد
من أن الوكيل ليس عالقًا في حالة ما.
وللقيام بذلك ، سنقوم بتحديث متغير الرتق بالطريقة التالية.
حسنًا ، سيكون الأمر متساويًا ، أو سنضيف شرطًا يقول إن حلقة اللعبة لا ينبغي أن تستمر
كثيرًا من الوقت.
وسترى في الوظيفة الرئيسية أنه سيكون هناك حد أقصى لطول الحلقة والذي سيساوي
10000.
ولا نريد أن تستمر الحلقة لأكثر من 10000 وحدة.
سنضيف هنا طول الحلقة ، وهو طول الحلقة ، وسنكتب
الشرط أكبر من Max.
طول الحلقة.
هناك نذهب.
وفي الواقع الحد الأقصى لطول الحلقة ، نحصل عليه من معلماتنا.
لذلك أقوم بإضافة معلمات نقطة معلمات نقطة الحد الأقصى لطول الحلقة.
هذا يعني أنه إذا انتهت اللعبة أو كان طول الحلقة أكبر من الحد الأقصى لطول مجموعة الحلقة ، والذي
سيساوي 10000 ، حسنًا ، ستنتهي اللعبة وسنبدأ لعبة جديدة.
لذلك هذا مجرد إجراء احترازي.
وبالحديث عن الاحتياط ، سنضيف احتياطيًا آخر.
إنها تثبيت المكافأة بين ناقص واحد و زائد واحد.
لقد حصلنا بالفعل على المكافأة هنا ، لكننا نريد التأكد من أن المكافأة بين ناقص واحد و زائد
واحد.
وللقيام بذلك ، نحتاج ببساطة إلى تحديث المكافأة من خلال القيام بذلك ، واتخاذ الحد الأقصى
، ثم أخذ رجال المكافآت.
و واحد.
وهنا نأخذ الحد الأقصى للمكافأة واحدًا وناقصًا واحدًا.
وبهذا نتأكد من أن المكافأة تقع بين ناقص واحد زائد واحد.
حسنا.
لذلك احتياطي آخر.
والآن نريد فقط التحقق مما إذا كانت اللعبة قد اكتملت ، وفي هذه الحالة سنعيد تشغيل البيئة.
ولماذا نحتاج إلى التحقق من ذلك الآن؟
هذا لأننا وصلنا للتو إلى حالة جديدة.
لقد مررنا للتو إرسال جديد.
لذلك نحن بحاجة إلى التحقق من ذلك بعد اجتياز هذا الإرسال الجديد أثناء عدم انتهاء اللعبة.
لذلك إذا تم ذلك مرة أخرى ، إذا تم ذلك ، فسنقوم في هذه الحالة بإعادة تشغيل البيئة عن طريق
ضبط طول الحلقة على صفر وسيتم أيضًا تهيئة الحالة وإعادة تهيئتها.
نأخذ بيئتنا ونستخدم وظيفة إعادة الضبط.
اوك.
الآن نخرج من هذه الحالة.
كان هذا مجرد فحص.
والآن ما سنفعله هو منذ أن وصلنا إلى حالة جديدة ، حسنًا ، هذه الحالة الجديدة الآن ثم بواسطة
راي ، لأن تذكر ، الحالات هي الصور المدخلة التي تم إجراؤها في الأصل بواسطة المصفوفات.
والآن ما يتعين علينا القيام به هو تحويل الحالة الجديدة إلى موتر شعلة.
لذلك سنقوم بتحديث حالتنا وسنستخدم مكتبة الشعلة وبالطبع الدالة from
numpy لتحويل هذه المصفوفة المعقدة ، ونذكر الصور المدخلة إلى موتر شعلة.
في احسن الاحوال.
والآن آخر شيء يتعين علينا القيام به قبل الخروج من حلقة for هذه ، وهي الحلقة في خطواتنا.
حسنًا ، هذا بالطبع لإلحاق المكافأة بقائمة المكافآت.
هذا هو آخر شيء يجب تحديثه.
قمنا بتحديث جميع القوائم هنا باستثناء المكافأة.
لذلك سنفعل ذلك الآن.
نأخذ مكافآتنا ونستخدم وظيفة الإلحاق لإلحاق المكافأة الأخيرة التي تم استلامها للتو.
في احسن الاحوال.
وقبل أن نخرج من الحلقة ، نحتاج فقط إلى إجراء فحص أخير للتحقق من ذلك.
إذا تم ذلك ، فنحن نريد إيقاف الاستكشاف.
ولذا سنضيف هنا فاصلًا ، مما يعني أنه إذا تم ذلك ، فإننا نوقف الاستكشاف وننتقل مباشرة
إلى الخطوة التالية ، والتي ستكون تحديث النموذج المشترك.
والآن انتهينا من حلقة for هذه.
الآن بعد أن قام الوكيل بالاستكشاف ، سيقوم بتحديث النموذج المشترك وسنتولى ذلك في البرنامج
التعليمي التالي.
حتى ذلك الحين ، استمتع.
أنا.