في الآونة الأخيرة ، تم تحديث المكوِّن الإضافي لوحدات ml. بالنسبة لأولئك الذين لا يعرفون ، هذا البرنامج المساعد مفتوح المصدر هو بيئة لتدريب وكلاء في الوحدة. يمكن تدريبهم باستخدام التعلم المعزز أو التعلم المقلد أو التطور العصبي أو طرق التعلم الآلي الأخرى باستخدام Python API. كما يوفر عددًا من الخوارزميات الحديثة (استنادًا إلى TensorSlow) التي تسمح لك بإنشاء شخصيات NPC أكثر ذكاءً لألعابك.
ما الذي تحتاجه لتطبيق تعلُّم الآلة في Unity؟
قم بتنزيل هذا البرنامج المساعد
هنا . ستحتاج إلى مجلد envonment الوحدة. قبل ذلك ، قم بإنشاء مشروع فارغ. في المجلد Assets ، أضف محتويات المجلد Assets مع envonment بالوحدة. قم بذلك مع ProjectSettings. يرجى ملاحظة أنه إذا قمت بإضافة هذا البرنامج المساعد إلى مشروع موجود ، قم أولاً بإنشاء مشروع فارغ ، واتبع الخطوات أعلاه وقم بإنشاء حزمة (Assets-ExportPackage) ثم قم باستيرادها ببساطة إلى مشروعك الحالي. يعد ذلك ضروريًا حتى لا تفقد إعدادات ProjectSettings الحالية في مشروعك.
سأوضح تنفيذ التعلم الآلي باستخدام مثال لعبة كرة القدم (هذا المشهد موجود بالفعل في المكون الإضافي). لديها فريقان ، الأزرق والأحمر. كل فريق لديه مهاجم وحارس مرمى.
دعنا نعود إلى البرنامج المساعد نفسه. من أجل أن يعمل على المسرح ، نحتاج إلى كائن واحد على الأقل من الأكاديمية ، والدماغ والوكيل. يمكن رؤية مخطط التفاعل أدناه.

يقع كائن الأكاديمية وفروعها GoalieBrain و StrikerBrain على المسرح. كما نرى من الرسم البياني ، قد يكون لكل أكاديمية العديد من المخ ، ولكن يجب أن يكون لكل أكاديمية أكاديمية واحدة.
الوكيل - هذه هي كائنات لعبتنا التي نريد تدريبها.

بعد ذلك ، انتقل إلى الرمز. إن فئة SoccerAcademy ، التي تمت إضافتها إلى GameObject Academy ، موروثة من فئة Academy ، قبل ذلك يجب عليك إضافة مساحة اسم باستخدام MLAgents. بعد ذلك ، يجب علينا تجاوز الأساليب
public override void AcademyReset() { } public override void AcademyStep() { }
وإضافة روابط تم إنشاؤها بواسطة Brain
public Brain brainStriker; public Brain brainGoalie;
إضافة مكون الدماغ إلى GoalieBrain و StrikerBrain وتعيينهم إلى Academy

ترث فئة AgentSoccer من كرة القدم. أضفه إلى كل لاعب وحدد الدماغ الذي سيتم استخدامه.

في البرنامج النصي AgentSoccer ، نصف منطق اللاعبين. في طريقة CollectObservations () الملغاة ، نضيف قائمة بالأشعة التي ستساعد اللاعبين على مراقبة اللعب والاستجابة له.
public override void CollectObservations() { float rayDistance = 20f; float[] rayAngles = { 0f, 45f, 90f, 135f, 180f, 110f, 70f }; string[] detectableObjects; if (team == Team.red) { detectableObjects = new string[] { "ball", "redGoal", "blueGoal", "wall", "redAgent", "blueAgent" }; } else { detectableObjects = new string[] { "ball", "blueGoal", "redGoal", "wall", "blueAgent", "redAgent" }; } AddVectorObs(rayPer.Perceive(rayDistance, rayAngles, detectableObjects, 0f, 0f)); AddVectorObs(rayPer.Perceive(rayDistance, rayAngles, detectableObjects, 1f, 0f)); }
طريقة AgentAction التي تم تجاوزها هي تناظرية للتحديث. في ذلك ، نسمي طريقة النقل ونوزع المكافآت.
public override void AgentAction(float[] vectorAction, string textAction) {
إذا لمسنا الكرة ، ادفعها
void OnCollisionEnter(Collision c) { float force = 2000f * kickPower; if (c.gameObject.tag == "ball") { Vector3 dir = c.contacts[0].point - transform.position; dir = dir.normalized; c.gameObject.GetComponent<Rigidbody>().AddForce(dir * force); } }
أوامر إعادة تعيين عند اكتمال الهدف
public override void AgentReset() { if (academy.randomizePlayersTeamForTraining) { ChooseRandomTeam(); } if (team == Team.red) { JoinRedTeam(agentRole); transform.rotation = Quaternion.Euler(0f, -90f, 0f); } else { JoinBlueTeam(agentRole); transform.rotation = Quaternion.Euler(0f, 90f, 0f); } transform.position = area.GetRandomSpawnPos(team.ToString(), agentRole.ToString()); agentRB.velocity = Vector3.zero; agentRB.angularVelocity = Vector3.zero; area.ResetBall(); }
خيارات التدريب
يمكنك تدريب الوكلاء من محرر الوحدة ، وكذلك استخدام
TensorFlow . أما الوحدة فيجب تحديد العقوبة والمكافأة لكل دماغ في الأكاديمية.

من المفيد أيضًا إخبار Brain عن TypeBrain من خلال تعيين القيمة على External. كما أنها تأتي في الأنواع التالية:
- خارجي - حيث يتم اتخاذ القرارات باستخدام Python API. هنا ، تتم إعادة توجيه الملاحظات والمكافآت التي تم إنشاؤها بواسطة Brain إلى Python API من خلال اتصال خارجي. ثم تُرجع Python API الإجراء المناسب الذي يجب على الوكيل اتخاذه.
- داخلي - حيث يتم اتخاذ القرارات باستخدام نموذج TensorFlow المدمج. يمثل نموذج TensorFlow المتداخل سياسة علمية ، ويستخدم Brain هذا النموذج مباشرةً لتحديد الإجراء لكل وكيل.
- لاعب - حيث يتم اتخاذ القرارات باستخدام لوحة المفاتيح الحقيقية أو إدخال وحدة التحكم. هنا ، يتحكم اللاعب البشري في الوكيل ، ولا يتم استخدام الملاحظات والمكافآت التي يجمعها الدماغ للتحكم في الوكيل.
- ارشادي - حيث يتم اتخاذ القرارات باستخدام سلوك مشفر. هذا مشابه لكيفية تعريف معظم سلوك الشخصيات حاليًا ويمكن أن يكون مفيدًا لتصحيح الأخطاء أو مقارنة كيفية مقارنة الوكيل بقواعد مشفرة بالوكيل الذي تم تدريب سلوكه.