AI

إتقان الاستراتيجية التعاونية: دليل لتعلم التعزيز متعدد الوكلاء

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

التحدي الجوهري: عدم الثبات

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

إعداد البيئة

قبل الغوص في خوارزميات التدريب، نحتاج إلى بيئة قوية. تُعد مكتبة PettingZoo معياراً صناعياً لتعلم التعزيز متعدد الوكلاء، حيث توفر واجهة موحدة لمختلف البيئات، بما في ذلك السيناريوهات الشهيرة مثل "simple_spread" أو "multi_jockey". تتعامل مع مزامنة البيئات المتوازية وتدير مساحات الملاحظة/الإجراءات للوكلاء المتعددين بسلاسة.

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

import gymnasium as gym
import pettingzoo

# Initialize a simple cooperative environment
env = pettingzoo.mpe.simple_spread_v3.env()
env.reset(seed=42)

# Example of extracting observation for an agent
agent_name = env.agents[0]
observation, info = env.observe(agent_name)

# Observation typically contains:
# 1. Agent's own position and velocity
# 2. Positions of other agents (relative to self)
# 3. Positions of objects to cover (relative to self)

print(f"Observation shape for {agent_name}: {observation.shape}")
print(f"Available actions: {env.action_space(agent_name)}")

تصميم المعمارية: ممثل-ناقد بأوزان مشتركة

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

فيما يلي تنفيذ مبسط لشبكة MLP مشتركة لرؤوس الممثل والناقد باستخدام PyTorch.

import torch
import torch.nn as nn
import torch.nn.functional as F

class MultiAgentNetwork(nn.Module):
    def __init__(self, obs_dim, act_dim, hidden_dim=64):
        super(MultiAgentNetwork, self).__init__()
        
        # Shared feature extractor
        self.shared_layers = nn.Sequential(
            nn.Linear(obs_dim, hidden_dim),
            nn.ReLU(),
            nn.Linear(hidden_dim, hidden_dim),
            nn.ReLU()
        )
        
        # Actor head (policy)
        self.actor_head = nn.Linear(hidden_dim, act_dim)
        
        # Critic head (value function)
        self.critic_head = nn.Linear(hidden_dim, 1)

    def forward(self, obs):
        features = self.shared_layers(obs)
        log_probs = self.actor_head(features)
        values = self.critic_head(features)
        return log_probs, values

ديناميكيات التدريب: تقدير الميزة

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

def compute_gae(rewards, values, next_values, dones, gamma=0.99, lam=0.95):
    advantages = torch.zeros_like(rewards)
    lastgaelam = 0
    for t in reversed(range(len(rewards))):
        if t == len(rewards) - 1:
            nextnonterminal = 1.0 - dones[t]
            nextvalues = next_values[t]
        else:
            nextnonterminal = 1.0 - dones[t]
            nextvalues = values[t + 1]
            
        delta = rewards[t] + gamma * nextvalues * nextnonterminal - values[t]
        advantages[t] = lastgaelam = delta + gamma * lam * nextnonterminal * lastgaelam
        
    returns = advantages + values
    return returns, advantages

الخاتمة

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

Share: