آموزش Doomformer؛ اجرای شبکه‌های عصبی و هوش مصنوعی درون بازی DOOM

بررسی و آموزش ابزار متن‌باز Doomformer که شبکه‌های عصبی و مدل‌های هوش مصنوعی را به نقشه‌های بازی کلاسیک DOOM کامپایل می‌کند.

🎧 خلاصه صوتی مقاله (پادکست ۲ دقیقه‌ای):

فرصت مطالعه ندارید؟ چکیده این مطلب را همین‌جا گوش دهید:

اجرای بازی‌های کلاسیک همیشه جذاب بوده است، اما چه می‌شود اگر به جای اجرا کردن بازی روی سخت‌افزارهای عجیب‌وغریب، خودِ بازی را به عنوان یک کامپیوتر و موتور پردازشی به کار بگیریم؟ ابزار متن‌باز Doomformer دقیقا همین کار را به شیوه‌ای خیره‌کننده انجام می‌دهد. این پروژه جذاب، یک کامپایلر هوشمند است که شبکه‌های عصبی عدد صحیح (Integer Neural Network) را مستقیماً به نقشه‌های بازی DOOM تبدیل می‌کند. در این معماری عجیب، عروسک‌های وودو (Voodoo Dolls) محاسبات ریاضی را انجام می‌دهند، سطوح روشنایی و ارتفاع زمین مقادیر را نگه می‌دارند و تمامی خروجی‌ها با کتابخانه معروف NumPy و تلورانس صفر مقایسه و راستی‌آزمایی می‌شوند.

آموزش Doomformer؛ اجرای شبکه‌های عصبی و هوش مصنوعی درون بازی DOOM
eight MNIST test digits and what DOOM read: 7 2 1 0 4 9 6 3, all exact

آشنایی با قابلیت‌ها و نحوه‌ی کارکرد Doomformer

ایده‌ی اصلی پشت این ابزار استفاده از مکانیک‌های داخلی موتور بازی برای شبیه‌سازی لایه‌های هوش مصنوعی است. برای مثال، هر مقدار عددی معادل تعداد مشخصی از عروسک‌های وودو است، وزن‌ها خطوطی روی زمین هستند که با عبور هر عروسک مقدار وزن را اضافه می‌کنند، و مجموع آن‌ها به عنوان سطوح روشنایی یا ارتفاع بخش‌های مختلف نقشه ذخیره می‌شود. این ابزار قادر است کارهای شگفت‌انگیزی انجام دهد؛ از جمله تشخیص ارقام دست‌نویس MNIST (حتی اگر ارقام را روی نقشه بکشید)، گرفتن تصمیمات منطقی، و اجرای مدل‌های ترنسفورمر مینیاتوری بدون نیاز به پایتون در زمان اجرا.

ویژگیمقدار / مشخصات
زبان برنامه‌نویسیپایتون (Python 3.11+)
لایسنسMIT (رایگان و متن‌باز)
سیستم‌عامل‌های پشتیبانی‌شدهلینوکس و macOS
وضعیت دسترسی برای ایرانبدون محدودیت (دسترسی آزاد به مخزن گیت‌هاب)

نصب و راه‌اندازی سریع

برای شروع کار با این ابزار جذاب، به پایتون نسخه 3.11 یا بالاتر روی سیستم عامل لینوکس یا macOS نیاز دارید. دستور نصب مخزن مستقیماً از طریق ابزار pip انجام می‌شود. ابتدا مطمئن شوید ابزارهای کامپایلر و پکیج‌های لازم مانند cmake و gcc را روی سیستم خود نصب کرده‌اید (برای مثال در توزیع فدورا با دستور sudo dnf install git cmake gcc gcc-c++ make).

سپس دستور نصب زیر را در ترمینال وارد کنید:

pip install git+https://github.com/mottopanikeiku/doomformer
doomformer hello             # اجرای یک مدل شبکه عصبی کوچک و بررسی مقادیر
doomformer draw --digit 7    # رسم رقم ۷ توسط کاراکتر بازی و خواندن آن توسط نقشه

دستور اول یک شبکه عصبی کوچک چندلایه (MLP) را اجرا کرده و تک‌تک مقادیر آن را راستی‌آزمایی می‌کند. دستور دوم باعث می‌شود تفنگ‌دار بازی روی زمین حرکت کرده، رقم ۷ را ترسیم کند و سطح نقشه عدد مربوطه را بخواند و روی نمایشگر دیجیتال نشان دهد.

ساخت و کامپایل شبکه عصبی اختصاصی

شما می‌توانید مدل‌های شبکه عصبی خود را به کمک کتابخانه NumPy و ماژول‌های این ابزار بسازید و آن‌ها را درون نقشه بازی کامپایل کنید. کد زیر یک مدل ساده‌ی دودویی (AND و OR) را پیاده‌سازی و کامپایل می‌کند:

import numpy as np
import doomformer as df

# تعریف یک شبکه عصبی با ۲ ورودی و ۲ خروجی عدد صحیح
net = df.MLP(
    weights=[np.array([[1, 1], [1, 1]]), np.array([[1, 0], [0, 1]])],
    biases=[np.array([-1, 0]), np.array([0, 0])],
    thresholds=[np.array([1]), np.array([1])],
    signed_input=False,
)

with df.compile(net) as brain:
    for x in ([0, 0], [1, 0], [1, 1]):
        # محاسبات توسط عروسک‌های وودو انجام شده و با مرجع مقایسه می‌شود
        print(x, "->", brain(np.array(x)).tolist())
    
    # ضبط و خروجی گرفتن از عملکرد عروسک‌ها به صورت فایل گیف
    brain.record([np.array([0, 1]), np.array([1, 1])], "dolls.gif")

در کد بالا، شیء df.MLP وزن‌ها و بایاس‌ها را دریافت می‌کند. سپس متد df.compile آن را به نقشه‌ی بازی تبدیل می‌کند تا در حین اجرای ورودی‌ها، پردازش‌ها به جای پردازنده مرکزی توسط مکانیک‌های داخلی موتور بازی انجام شده و نتایج با دقت کامل بازگردانده شوند.

مقیاس‌پذیری و اجرای هم‌زمان بازی‌ها

هنگامی که پروژه‌های بزرگتری مانند پردازش تمامی ۱۰,۰۰۰ رقم آزمون MNIST مد نظر باشد، اجرای تک‌تک آن‌ها زمان‌بر خواهد بود. این ابزار از اجرای موازی پشتیبانی می‌کند تا بتوانید نقشه‌ها را روی چندین فرآیند یا حتی خوشه‌های پردازشی پخش کنید:

# اجرای تمامی ۱۰,۰۰۰ رقم به صورت نقشه‌های کاشی‌کاری شده با ۶ کارگر موازی
doomformer mnist --tiles --all --workers 6

# نصب افزونه‌ی توزیع‌شده و راه‌اندازی کلاستر
pip install "doomformer[ray]"
ray start --head
doomformer mnist --all --ray --record mnist.json

با استفاده از پارامترهای بالا، پردازش داده‌های حجیم به بخش‌های کوچک‌تر تقسیم شده و در زمان بسیار کوتاه‌تری نتیجه‌ی نهایی حاصل می‌شود.

پرسش‌های متداول

آیا برای اجرای این ابزار به فایل‌های اصلی بازی DOOM نیاز است؟

بله، برای بخش‌هایی که نیاز به اجرای مستقیم نقشه در موتورهای بازی دارند، به فایل‌های استاندارد آزاد مثل Freedoom یا فایل‌های IWAD نیاز خواهید داشت.

دقت محاسبات هوش مصنوعی درون بازی چقدر است؟

تمام مقادیر خروجی با مرجع عددی NumPy و با تلورانس صفر مقایسه می‌شوند؛ یعنی محاسبات انجام‌شده توسط عروسک‌های وودو دقیقاً با مقادیر ریاضی شبکه عصبی برابری می‌کند.

آیا این ابزار روی سیستم‌عامل ویندوز قابل اجراست؟

مخزن اصلی پروژه به‌صورت رسمی برای سیستم‌عامل‌های لینوکس و macOS بهینه‌سازی و مستند شده است.

جمع‌بندی

پروژه‌ی Doomformer یکی از خلاقانه‌ترین و جذاب‌ترین نمونه‌های محاسبات عجیب‌وغریب (Esoteric Computing) و تلفیق هوش مصنوعی با بازی‌های ویدیویی قدیمی است. این ابزار نشان می‌دهد که مکانیک‌های یک بازی تیراندازی اول شخص دهه‌ی نودی چقدر قدرتمند و تورینگ-کامل هستند. اگر به حوزه‌ی معماری کامپایلرها، شبکه‌های عصبی عدد صحیح و کارهای پژوهشی خلاقانه علاقه دارید، بررسی مستندات و اجرای نمونه‌های این مخزن تجربه‌ای بی‌نظیر و شگفت‌انگیز برای شما خواهد بود.

مشاهده‌ی پروژه در GitHub

پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *