
প্রকল্পের সংক্ষিপ্ত পরিচিতি
Ultimate SFighterAI হলো <《স্ট্রিট ফাইটার 2: চ্যাম্পিয়ন স্পেশাল এডিশন》>-কে লক্ষ্য করে তৈরি একটি ডিপ রিইনফোর্সমেন্ট লার্নিং প্রকল্প। এতে Ryu-কে খেলোয়াড় চরিত্র হিসেবে ব্যবহার করে PPO অ্যালগরিদমের মাধ্যমে NatureCNN মডেল প্রশিক্ষণ দেওয়া হয় এবং প্রশিক্ষণের পরিসর সব 12টি স্ট্রিট ফাইটার স্তর পর্যন্ত বিস্তৃত করা হয়েছে।
মডেলের সিদ্ধান্তের ইনপুট সম্পূর্ণভাবে গেমের RGB পিক্সেল থেকে আসে; চরিত্রের অবস্থান, অ্যাকশন স্টেট বা স্বাস্থ্য সরাসরি পড়া হয় না। প্রশিক্ষণ পরিবেশ কেবল মেমরি ভেরিয়েবলের agent_hp এবং enemy_hp ব্যবহার করে পুরস্কার গণনা ও জয়-পরাজয় নির্ধারণ করে।
প্রকল্পটিতে প্রশিক্ষণ সম্পন্ন মডেলের ওজন এবং প্রশিক্ষণ রেকর্ড দেওয়া আছে। তাই আপনি সরাসরি AI-এর লড়াই দেখতে, পরীক্ষা পুনরুৎপাদন করতে, সমান্তরাল পরিবেশের সংখ্যা পরিবর্তন করতে অথবা বিদ্যমান মডেলের ভিত্তিতে আরও প্রশিক্ষণ চালিয়ে যেতে পারেন।
মূল বৈশিষ্ট্য ও বাস্তবায়নের দিক
- সব 12টি স্তর সমর্থিত: প্রতিটি স্তর পৃথক সিমুলেটরে চালানো যায় এবং একই NatureCNN মডেল যৌথভাবে প্রশিক্ষিত হয়।
- শুধু দৃষ্টিনির্ভর সিদ্ধান্ত: মডেল প্রক্রিয়াকৃত গেমের দৃশ্য দেখে চলাফেরা, আক্রমণ ও বিশেষ কৌশল নির্বাচন করে।
- 27টি বিচ্ছিন্ন অ্যাকশন: নিরপেক্ষ অবস্থা, চলাফেরা, সাধারণ আক্রমণ, বসে আক্রমণ, এবং বাম ও ডানমুখী Hadouken, Tatsumaki Senpuu Kyaku ও Shoryuken-সহ বিভিন্ন অ্যাকশন অন্তর্ভুক্ত।
- PPO রিইনফোর্সমেন্ট লার্নিং: প্রকল্পটি Stable-Baselines3-এর PPO অ্যালগরিদমের ওপর ভিত্তি করে প্রশিক্ষিত হয়।
- বিভিন্ন মূল্যায়ন মোড: স্তরভিত্তিক সেভ লোড করে পরীক্ষা, তিন রাউন্ডের মধ্যে দুই জয়, একক KO মূল্যায়ন এবং প্রথম স্তর থেকে ধারাবাহিকভাবে এগিয়ে যাওয়া সমর্থিত।
- প্রশিক্ষিত মডেল: ডিফল্ট ওজন
logs/trained_models/ppo_ryu.zip-এ রয়েছে। - প্রশিক্ষণ ভিজ্যুয়ালাইজেশন: পুরস্কারের পরিবর্তন ও মডেল আপডেটের রেকর্ড দেখতে TensorBoard ব্যবহার করা যায়।
- একাধিক ডিভাইস সমর্থন: প্রশিক্ষণ ও ইনফারেন্স প্যারামিটারে
auto,cpu,cudaএবংmpsসমর্থিত।
দৃশ্য প্রক্রিয়াকরণ
মূল গেমের দৃশ্য মাঝখান থেকে ক্রপ করা, গতিশীল অগ্রভাগ শনাক্ত করা এবং রিসাইজ করার পর 84×84×3 মডেল ইনপুটে রূপান্তরিত হয়। গতিশীল অগ্রভাগ শনাক্ত করতে t-16, t-8 এবং t—এই তিন সময়ের গ্রেস্কেল পার্থক্য ব্যবহার করা হয়; পটভূমির উজ্জ্বলতা 0.35 দিয়ে গুণ করে R, G ও B তিনটি চ্যানেলে একত্র করা হয়। এই প্রক্রিয়া মডেলকে চরিত্রের চলাফেরা ও আক্রমণ বুঝতে সহায়তা করে।
পুরস্কার ব্যবস্থা
পুরস্কার মূলত উভয় পক্ষের স্বাস্থ্য পরিবর্তন, নকডাউন ফলাফল এবং সময়ের খরচ দিয়ে গঠিত। ক্ষতির পুরস্কার এভাবে গণনা করা হয়:
0.01 × (3 × প্রতিপক্ষের হারানো স্বাস্থ্য − নিজের হারানো স্বাস্থ্য)
প্রতিপক্ষকে নকডাউন করার পুরস্কার:
0.01 × (176 + নিজের অবশিষ্ট স্বাস্থ্য)
নিজে নকডাউন হলে শাস্তি:
0.01 × (176 + প্রতিপক্ষের অবশিষ্ট স্বাস্থ্য)
এছাড়া প্রতিবার অ্যাকশন বাস্তবে সম্পাদিত হলে সময়ের জন্য শাস্তি কাটা হয়; ডিফল্ট মান 0.0005।
প্রকল্প ডিরেক্টরির বিবরণ
data/: 12টি স্তরের প্রারম্ভিক সেভ, গেমের মেমরি ভেরিয়েবল সংজ্ঞা এবং দৃশ্য কনফিগারেশন সংরক্ষণ করে।main/train.py: সব স্তরে সমান্তরাল প্রশিক্ষণ ও পুনরায় প্রশিক্ষণ পরিচালনা করে।main/test.py: স্তরভিত্তিক পরীক্ষা ও ধারাবাহিক অগ্রগতির মূল্যায়ন পরিচালনা করে।main/env_utils.py: ROM কনফিগারেশন ও পরিবেশ নির্মাণ পরিচালনা করে।main/custom_wrappers.py: দৃশ্য প্রক্রিয়াকরণ, অ্যাকশন ম্যাপিং ও পুরস্কার গণনা বাস্তবায়ন করে।logs/trained_models/ppo_ryu.zip: প্রকল্পে দেওয়া প্রশিক্ষণ সম্পন্ন মডেল।logs/: প্রশিক্ষণ প্রক্রিয়ার TensorBoard রেকর্ড ধারণ করে।requirements.txt: Python নির্ভরতার তালিকা।
ইনস্টলেশন ও পরিবেশ কনফিগারেশন
প্রথম ধাপ: Python পরিবেশ প্রস্তুত করা
প্রকল্পটি Python 3.10 ব্যবহারের পরামর্শ দেয়। README-তে নথিভুক্ত যাচাইকৃত পরিবেশ হলো macOS, Apple Silicon এবং Python 3.10.20; CPU ও Apple MPS পথও যাচাই করা হয়েছে। অন্যান্য প্ল্যাটফর্মের জন্য Stable-Retro এবং PyTorch-এর অফিসিয়াল ইনস্টলেশন নির্দেশনা অনুসরণ করুন।
প্রকল্পের মূল ডিরেক্টরিতে ভার্চুয়াল পরিবেশ তৈরি ও সক্রিয় করে নির্ভরতাগুলো ইনস্টল করুন:
python3.10 -m venv .venv
source .venv/bin/activate
python -m pip install -r requirements.txt
Windows ব্যবহারকারীরা ভার্চুয়াল পরিবেশ সক্রিয় করতে নিচের কমান্ড ব্যবহার করতে পারেন:
.venv\Scripts\activate
Anaconda ব্যবহার করেও Python 3.10 পরিবেশ তৈরি করে requirements.txt-এর নির্ভরতাগুলো ইনস্টল করা যায়। প্রকল্পটির প্রধান নির্ভরতাগুলোর মধ্যে রয়েছে Gymnasium, Stable-Retro এবং Stable-Baselines3।
দ্বিতীয় ধাপ: গেমের ROM প্রস্তুত করা
Stable-Retro গেমের ROM সরবরাহ করে না এবং এই প্রকল্পেও ROM অন্তর্ভুক্ত নেই। 《স্ট্রিট ফাইটার 2: চ্যাম্পিয়ন স্পেশাল এডিশন》-এর মার্কিন সংস্করণের সমর্থিত ROM বৈধ উপায়ে সংগ্রহ করুন।
ROM সংগ্রহের পর পরিবেশ ভেরিয়েবলের মাধ্যমে এর পরম পথ দিতে পারেন। macOS বা Linux-এ চালান:
export SF2_ROM_PATH="/absolute/path/to/your/rom.md"
Windows PowerShell-এ ব্যবহার করুন:
$env:SF2_ROM_PATH = "C:\path\to\your\rom.md"
অন্যভাবে ROM-টি প্রকল্পের ডিফল্ট অবস্থানে রাখতে পারেন:
data/street-fighter-ii-special-champion-edition-usa.md
প্রশিক্ষণ ও পরীক্ষা প্রোগ্রাম স্বয়ংক্রিয়ভাবে ROM ইমপোর্ট করবে। বর্তমান Python পরিবেশের Stable-Retro-তে ROM আগে থেকেই ইমপোর্ট করা থাকলে সরাসরি চালানো যাবে।
তৃতীয় ধাপ: স্তরের ডেটা যাচাই করা
data/ ডিরেক্টরির 12টি .state ফাইল 1 থেকে 12 নম্বর স্তরের প্রারম্ভিক অবস্থা সংরক্ষণ করে। data.json এবং scenario_full_frame.json গেমের মেমরি ভেরিয়েবল ও দৃশ্য কনফিগারেশন সংজ্ঞায়িত করে। প্রোগ্রাম সরাসরি এই ফাইলগুলো পড়ে; এগুলো Stable-Retro-এর ইনস্টলেশন ডিরেক্টরিতে কপি করার প্রয়োজন নেই।
প্রশিক্ষিত মডেল চালানো
সব 12টি স্তর স্তরভিত্তিক পরীক্ষা
পরিবেশ কনফিগারেশন সম্পন্ন হলে প্রকল্পের মূল ডিরেক্টরিতে চালান:
python -m main.test --episodes 1
প্রোগ্রামটি ধারাবাহিকভাবে 1 থেকে 12 নম্বর স্তরের প্রারম্ভিক সেভ লোড করবে এবং প্রতিটি স্তরে ডিফল্টভাবে তিন রাউন্ডের মধ্যে দুই জয়ের নিয়ম ব্যবহার করবে। --episodes 1 একটি পূর্ণ মূল্যায়ন চক্র নির্দেশ করে; প্যারামিটারটি বাদ দিলে ডিফল্টভাবে 10টি চক্র পরীক্ষা করা হবে।
কোনো স্তরে ব্যর্থ হলেও প্রোগ্রাম পরবর্তী স্তরগুলোর পরীক্ষা চালিয়ে যাবে। টার্মিনালে প্রতিটি স্তরের জয়-পরাজয়, পুরস্কার, স্তরভিত্তিক জয়ের হার এবং একটি মূল্যায়ন চক্রে 12টি স্তরই জয়ের অনুপাত দেখানো হবে।
মূল্যায়নে মনোযোগ দিতে দৃশ্য বন্ধ করা
লড়াই দেখার প্রয়োজন না হলে রেন্ডারিং বন্ধ করে স্পষ্টভাবে CPU ইনফারেন্স ব্যবহার করতে পারেন:
python -m main.test --episodes 1 --no-render --device cpu
রেন্ডারিং বন্ধ করলে ব্যাচ মূল্যায়নের সময় ডিসপ্লের অতিরিক্ত খরচ কমে।
প্রথম স্তর থেকে ধারাবাহিকভাবে এগিয়ে যাওয়া
AI-কে গেমের নিজস্ব প্রক্রিয়া অনুসরণ করে পরবর্তী প্রতিপক্ষের বিরুদ্ধে লড়াই করতে দেখতে চালান:
python -m main.test --episodes 1 --no-load-level-saves
এই মোডে কেবল শুরুতে প্রথম স্তরের সেভ লোড করা হয়; এরপর গেম স্বাভাবিকভাবে স্তরগুলো এগিয়ে নেয়। একবার ব্যর্থ হলেই সেই চেষ্টা শেষ হয়। প্রোগ্রাম ইতিমধ্যে চ্যালেঞ্জ করা স্তরগুলোর জয়ের হার এবং সম্পূর্ণ গেম শেষ করার হার দেখাবে।
স্তরভিত্তিক পরীক্ষায় “সব জয়” বলতে 12টি পৃথক স্তরের সেভে মডেল মূল্যায়ন পাস করেছে বোঝায়; “সম্পূর্ণ গেম শেষ করার হার” বলতে একটি ধারাবাহিক প্রক্রিয়ায় মডেলকে 12টি স্তরই শেষ করতে হবে বোঝায়। দুটি বিষয়ের অর্থ আলাদা।
প্রচলিত পরীক্ষার প্যারামিটার
--model-path PATH: PPO মডেল নির্দিষ্ট করে; ডিফল্ট হলোlogs/trained_models/ppo_ryu.zip।--episodes N: স্তরভিত্তিক মূল্যায়নের চক্র বা ধারাবাহিক অগ্রগতির চেষ্টার সংখ্যা নির্ধারণ করে; ডিফল্ট মান10।--no-render: গেমের দৃশ্য বন্ধ করে।--no-load-level-saves: প্রতিটি স্তরের সেভ লোড না করে প্রথম স্তর থেকে ধারাবাহিকভাবে চ্যালেঞ্জ করে।--reset-round: স্তরভিত্তিক পরীক্ষায় ডিফল্ট তিন রাউন্ডের মধ্যে দুই জয়ের বদলে একক KO-কে মূল্যায়নের একক হিসেবে ব্যবহার করে।--device auto/cpu/cuda/mps: মডেল ইনফারেন্সের ডিভাইস নির্বাচন করে; ডিফল্ট মানauto।--speed N: প্রদর্শিত ফ্রেমের সংখ্যা কমিয়ে ভিজ্যুয়ালাইজেশন দ্রুত করে; ডিফল্ট মান4।
নিজের মডেল প্রশিক্ষণ
ছোট পরিসরের কনফিগারেশন দিয়ে শুরু করা
ডিফল্ট প্রশিক্ষণ কনফিগারেশনে প্রচুর সম্পদ প্রয়োজন। প্রথমবার চালানোর সময় প্রতিটি স্তরে একটি করে সিমুলেটর চালু করে ছোট ব্যাচ ব্যবহার করার পরামর্শ দেওয়া হয়:
python -m main.train --envs-per-level 1 --batch-size 256 --log-dir runs/ryu
প্রকল্পটিতে 12টি স্তর থাকায় --envs-per-level 1 মোট 12টি সমান্তরাল সিমুলেটর চালায়। ROM, পরিবেশ নির্মাণ, ডিভাইস এবং লগ আউটপুট সঠিকভাবে কাজ করছে নিশ্চিত করে ধীরে ধীরে সমান্তরাল পরিবেশের সংখ্যা বাড়ান।
ডিফল্ট প্রশিক্ষণ পরিসর বোঝা
সরাসরি python -m main.train চালালে প্রতিটি স্তরে ডিফল্টভাবে 64টি সিমুলেটর চালু হয়, অর্থাৎ মোট 768টি সমান্তরাল পরিবেশ। ডিফল্ট n-steps=128-এর সঙ্গে একটি PPO আপডেটে 98,304টি নমুনা সংগ্রহ হয় এবং সম্পূর্ণ প্রশিক্ষণের লক্ষ্য 7 কোটি ধাপ।
ডিফল্ট কনফিগারেশনের জন্য পর্যাপ্ত CPU ও মেমরি দরকার; সাধারণ কম্পিউটারে প্রথম পরীক্ষার জন্য এটি উপযুক্ত নয়। বাস্তব হার্ডওয়্যার অনুযায়ী
--envs-per-level,--batch-sizeঅথবা মোট প্রশিক্ষণ ধাপ কমান।
প্রচলিত প্রশিক্ষণ প্যারামিটার
--envs-per-level N:প্রতি লেভেলে সমান্তরাল পরিবেশের সংখ্যা; উল্লেখ না করলে প্রতি লেভেলে 64টি।--total-timesteps N:এই প্রশিক্ষণের মোট ধাপের সংখ্যা; পুনরায় প্রশিক্ষণের সময় অতিরিক্ত ধাপ বোঝায়, ডিফল্ট মান700000000।--n-steps N:প্রতিটি সিমুলেটর একবার আপডেটের আগে যে সংখ্যক ধাপ সংগ্রহ করে, ডিফল্ট মান128।--batch-size N:PPO আপডেট ব্যাচের আকার, ডিফল্ট মান8192।--n-epochs N:প্রতিটি ব্যাচের নমুনা ডেটার প্রশিক্ষণ পর্বের সংখ্যা, ডিফল্ট মান3।--learning-rate N:লার্নিং রেট, ডিফল্ট মান0.0002।--device auto/cpu/cuda/mps:প্রশিক্ষণ ডিভাইস নির্বাচন করে, ডিফল্ট মানmps।--log-dir PATH:মডেল ও প্রশিক্ষণ কার্ভের আউটপুট ডিরেক্টরি, ডিফল্টlogs/ALL_MOTION_SIMULTANEOUS।
প্রাক-প্রশিক্ষিত ওজন ব্যবহার করে পুনরায় প্রশিক্ষণ
প্রকল্পটি প্রদত্ত PPO ওজন থেকে পুনরায় প্রশিক্ষণ সমর্থন করে। নিচের কমান্ডটি আরও ১০ লক্ষ ধাপ প্রশিক্ষণ চালিয়ে ফলাফল একটি নতুন ডিরেক্টরিতে লিখবে:
python -m main.train \
--resume-model logs/trained_models/ppo_ryu.zip \
--envs-per-level 1 --batch-size 256 \
--total-timesteps 1000000 --log-dir runs/ryu-resume
পুনরায় প্রশিক্ষণের সময় --total-timesteps পুরোনো মডেলের প্রশিক্ষণ ধাপসহ মোট লক্ষ্য নয়, বরং এইবার অতিরিক্ত চালানো প্রশিক্ষণ ধাপের সংখ্যা বোঝায়।
প্রশিক্ষণ কার্ভ দেখতে TensorBoard ব্যবহার
প্রকল্পে প্রশিক্ষণের রেকর্ড অন্তর্ভুক্ত রয়েছে। TensorBoard চালু করুন:
tensorboard --logdir=logs
এরপর ব্রাউজারে http://localhost:6006/ খুললে পুরস্কারের পরিবর্তন এবং মডেল আপডেট-সংক্রান্ত কার্ভ দেখা যাবে।
নিজের প্রশিক্ষণে তৈরি লগ দেখতে শুধু ডিরেক্টরিটি পরিবর্তন করুন:
tensorboard --logdir=runs/ryu
উন্নত ব্যবহারের পরামর্শ
- বড় পরিসরে যাওয়ার আগে যাচাই করুন: প্রথমে প্রতি লেভেলে একটি পরিবেশ ব্যবহার করে অল্প সময়ের প্রশিক্ষণ চালান। ROM আমদানি, সেভ ফাইল পড়া এবং লগ লেখা সঠিকভাবে হচ্ছে নিশ্চিত হওয়ার পর সমান্তরাল সিমুলেটরের সংখ্যা বাড়ান।
- প্ল্যাটফর্ম অনুযায়ী ডিভাইস নির্ধারণ করুন: Apple Silicon-এ
mpsচেষ্টা করা যায়, NVIDIA GPU-সমর্থিত পরিবেশেcudaবেছে নেওয়া যায়; অন্যথায়cpuবাautoব্যবহার করুন। README-তে macOS Apple Silicon পরিবেশ যাচাই করা হয়েছে; অন্যান্য প্ল্যাটফর্মে PyTorch ও Stable-Retro-এর প্রয়োজনীয়তা অনুযায়ী কনফিগার করতে হবে। - দুই ধরনের মূল্যায়ন আলাদা রাখুন: প্রতি লেভেলের আলাদা সেভ ফাইল পরীক্ষা বিভিন্ন প্রতিপক্ষের পারফরম্যান্স বিশ্লেষণের জন্য উপযোগী, আর ধারাবাহিকভাবে লেভেল পার হওয়া সম্পূর্ণ গেমের প্রবাহের কাছাকাছি। ফলাফল প্রতিবেদনের সময় কোন মোড ব্যবহার করা হয়েছে তা উল্লেখ করুন।
- রেন্ডারিং ছাড়া ব্যাচ মূল্যায়ন ব্যবহার করুন: একাধিক রাউন্ডের পরিসংখ্যান সংগ্রহের সময়
--no-renderযোগ করুন; কৌশলের পারফরম্যান্স দেখার সময় রেন্ডারিং চালু করুন। - পরীক্ষাগুলো আলাদা ডিরেক্টরিতে সংরক্ষণ করুন: বিভিন্ন প্যারামিটার সমন্বয়ের জন্য
--log-dirব্যবহার করে আলাদা ডিরেক্টরি তৈরি করুন। এতে প্রশিক্ষণের রেকর্ড পরস্পর ওভাররাইট হবে না এবং TensorBoard-এ তুলনা করা সহজ হবে। - সম্পূর্ণ কমান্ড অপশন দেখুন: প্রশিক্ষণ ও পরীক্ষার উভয় স্ক্রিপ্টেই সহায়তা তথ্য দেওয়া আছে।
python -m main.train --help
python -m main.test --help
মডিউল পদ্ধতির পাশাপাশি প্রকল্পটি সরাসরি স্ক্রিপ্ট চালানোও সমর্থন করে:
python main/train.py
python main/test.py
উপসংহার
Ultimate SFighterAI দেখায় কীভাবে পিক্সেল ইনপুট, অ্যাকশন ম্যাপিং, পুরস্কার গঠন, PPO এবং একাধিক লেভেলের সমান্তরাল পরিবেশ একত্র করে একটি সম্পূর্ণ ফাইটিং গেম এজেন্ট তৈরি করা যায়। শুরু করার সবচেয়ে নির্ভরযোগ্য পথ হলো প্রথমে ROM কনফিগার করে প্রাক-প্রশিক্ষিত মডেল চালানো, এরপর কম সমান্তরালতা ব্যবহার করে প্রশিক্ষণ পুনরুৎপাদন করা, এবং শেষে পুনরায় প্রশিক্ষণ, ডিভাইস নির্বাচন ও TensorBoard বিশ্লেষণের মাধ্যমে ধাপে ধাপে পরীক্ষার পরিসর বাড়ানো।
প্রকল্পটি Apache License 2.0-এর অধীনে প্রকাশিত এবং Gymnasium, Stable-Retro ও Stable-Baselines3-এর মতো ওপেন সোর্স উপাদান ব্যবহার করে।
