paint-brush
জম্বি রাজ্যে ক্লাসিক মেশিন লার্নিং এবং পুনরাবৃত্ত নিউরাল নেটওয়ার্ক ব্যবহার করে মিশন জেনারেশনদ্বারা@evlko
3,703 পড়া
3,703 পড়া

জম্বি রাজ্যে ক্লাসিক মেশিন লার্নিং এবং পুনরাবৃত্ত নিউরাল নেটওয়ার্ক ব্যবহার করে মিশন জেনারেশন

দ্বারা evlko15m2024/05/01
Read on Terminal Reader

অতিদীর্ঘ; পড়তে

আমরা ক্লাসিক মেশিন লার্নিং এবং রোগুলাইক গেমের জন্য পৌনঃপুনিক নিউরাল নেটওয়ার্ক ব্যবহার করে মিশন তৈরি করার বড় চিত্রটি দেখব।
featured image - জম্বি রাজ্যে ক্লাসিক মেশিন লার্নিং এবং পুনরাবৃত্ত নিউরাল নেটওয়ার্ক ব্যবহার করে মিশন জেনারেশন
evlko HackerNoon profile picture
0-item
1-item

সম্ভবত আপনি পদ্ধতিগত স্তরের প্রজন্মের সাথে পরিচিত; ভাল, এই পোস্টে, এটা সব পদ্ধতিগত মিশন প্রজন্ম সম্পর্কে. আমরা ক্লাসিক মেশিন লার্নিং এবং রোগুলাইক গেমের জন্য পৌনঃপুনিক নিউরাল নেটওয়ার্ক ব্যবহার করে মিশন তৈরি করার বড় চিত্রের মধ্য দিয়ে হেঁটে যাব।


হাই সব! আমার নাম লেভ কোবেলেভ, এবং আমি MY.GAMES-এর একজন গেম ডিজাইনার। এই নিবন্ধে, আমি ধ্রুপদী ML এবং সাধারণ নিউরাল নেটওয়ার্কগুলি ব্যবহার করার আমার অভিজ্ঞতা শেয়ার করতে চাই কারণ আমি ব্যাখ্যা করি যে আমরা কীভাবে এবং কেন পদ্ধতিগত মিশন জেনারেশনে স্থির হয়েছি, এবং আমরা জম্বিতে প্রক্রিয়াটির বাস্তবায়নে গভীরভাবে ডুব দেব। অবস্থা.


দাবিত্যাগ: এই নিবন্ধটি শুধুমাত্র তথ্য/বিনোদনের উদ্দেশ্যে, এবং একটি নির্দিষ্ট সমাধান ব্যবহার করার সময়, আমরা আপনাকে একটি নির্দিষ্ট সংস্থান ব্যবহারের শর্তাবলী সাবধানে পরীক্ষা করার এবং আইনি কর্মীদের সাথে পরামর্শ করার পরামর্শ দিই!

মিশনের মূল বিষয় "বক্স": তরঙ্গ, স্পন এবং আরও অনেক কিছু

☝🏻 প্রথমত, কিছু পরিভাষা: “ এরিনাস ”, “ লেভেল ”, এবং “ অবস্থান ” এই প্রসঙ্গে সমার্থক, সেইসাথে “ ক্ষেত্র ”, “ জোন ” এবং “ স্পন এলাকা ”।


এখন, " মিশন " সংজ্ঞায়িত করা যাক। একটি মিশন একটি পূর্বনির্ধারিত ক্রম যেখানে শত্রুরা নির্দিষ্ট নিয়ম অনুসারে একটি অবস্থানে উপস্থিত হয় । যেমন উল্লেখ করা হয়েছে, জম্বি স্টেটে অবস্থানগুলি তৈরি হয়, তাই আমরা একটি "মঞ্চস্থ" অভিজ্ঞতা তৈরি করছি না। অর্থাৎ, আমরা পূর্বনির্ধারিত পয়েন্টে শত্রুদের রাখি না - আসলে, এই ধরনের কোন পয়েন্ট নেই। আমাদের ক্ষেত্রে, একটি শত্রু একটি প্লেয়ার বা একটি নির্দিষ্ট প্রাচীর কাছাকাছি কোথাও উপস্থিত হয়. আরও, গেমের সমস্ত ক্ষেত্রগুলি আয়তক্ষেত্রাকার, তাই যে কোনও মিশন তাদের যে কোনওটিতে খেলা যেতে পারে।


আসুন " স্পন " শব্দটি চালু করি। স্পনিং হল একটি মনোনীত অঞ্চলের পয়েন্টগুলিতে পূর্বনির্ধারিত পরামিতি অনুসারে একই ধরণের একাধিক শত্রুর উপস্থিতি। এক বিন্দু - এক শত্রু। যদি একটি এলাকার ভিতরে পর্যাপ্ত পয়েন্ট না থাকে, তাহলে এটি বিশেষ নিয়ম অনুযায়ী প্রসারিত হয়। এটা বোঝাও গুরুত্বপূর্ণ যে জোনটি তখনই নির্ধারিত হয় যখন একটি স্পন ট্রিগার হয়। এলাকাটি স্পন প্যারামিটার দ্বারা নির্ধারিত হয়, এবং আমরা নীচে দুটি উদাহরণ বিবেচনা করব: প্লেয়ারের কাছে একটি স্পন এবং একটি প্রাচীরের কাছে।


প্রথম ধরনের স্পন প্লেয়ারের কাছাকাছি । প্লেয়ারের কাছাকাছি উপস্থিতি একটি সেক্টরের মাধ্যমে নির্দিষ্ট করা হয়, যা দুটি ব্যাসার্ধ দ্বারা বর্ণনা করা হয়: বাহ্যিক এবং অভ্যন্তরীণ (R এবং r), সেক্টরের প্রস্থ (β), খেলোয়াড়ের সাপেক্ষে ঘূর্ণনের কোণ (α) এবং শত্রুর চেহারার কাঙ্ক্ষিত দৃশ্যমানতা (বা অদৃশ্যতা)। একটি সেক্টরের অভ্যন্তরে শত্রুদের জন্য প্রয়োজনীয় সংখ্যক পয়েন্ট রয়েছে - এবং তারা সেখান থেকে এসেছে!

দ্বিতীয় ধরনের স্প্যান দেয়ালের কাছাকাছি । যখন একটি স্তর তৈরি হয়, প্রতিটি দিক একটি ট্যাগ দিয়ে চিহ্নিত করা হয় - একটি মূল দিক। প্রস্থান সহ প্রাচীর সর্বদা উত্তরে থাকে। একটি দেয়ালের কাছাকাছি শত্রুর উপস্থিতি ট্যাগ দ্বারা নির্দিষ্ট করা হয়, এটি থেকে দূরত্ব (o), দৈর্ঘ্য (a), একটি অঞ্চলের প্রস্থ (b), এবং শত্রুর উপস্থিতির পছন্দসই দৃশ্যমানতা (বা অদৃশ্যতা)। একটি জোনের কেন্দ্র প্লেয়ারের বর্তমান অবস্থানের সাপেক্ষে নির্ধারিত হয়।

স্পন ঢেউয়ে আসে। একটি তরঙ্গ হল যে পদ্ধতিতে স্পন প্রদর্শিত হয়, যথা তাদের মধ্যে বিলম্ব – আমরা একযোগে সমস্ত শত্রুদের সাথে খেলোয়াড়দের ধাক্কা দিতে চাই না। তরঙ্গগুলি মিশনে একত্রিত হয় এবং নির্দিষ্ট যুক্তি অনুসারে একে অপরের পরে চালু হয়। উদাহরণস্বরূপ, প্রথমটির 20 সেকেন্ড পরে একটি দ্বিতীয় তরঙ্গ চালু করা যেতে পারে (অথবা যদি এর ভিতরের 90% এর বেশি জম্বি মারা যায়)। সুতরাং, একটি সম্পূর্ণ মিশনকে একটি বড় বাক্স হিসাবে বিবেচনা করা যেতে পারে, এবং সেই বাক্সের ভিতরে, মাঝারি আকারের বাক্স (তরঙ্গ) রয়েছে এবং তরঙ্গের ভিতরে আরও ছোট বাক্স (স্পন) রয়েছে।

সুতরাং, মিশনে সঠিকভাবে কাজ করার আগে, আমরা ইতিমধ্যে কিছু নিয়ম সংজ্ঞায়িত করেছি:


  1. ক্রমাগত ক্রিয়াকলাপের অনুভূতি বজায় রাখতে, দৃশ্যমান পয়েন্টগুলিতে প্লেয়ারের কাছাকাছি নিয়মিত জম্বিগুলি ঘন ঘন জন্মানোর বিষয়টি নিশ্চিত করুন।
  2. প্রস্থান হাইলাইট করার জন্য বা একটি নির্দিষ্ট দিক থেকে প্লেয়ারকে ধাক্কা দেওয়ার জন্য, প্রাথমিকভাবে দেয়ালের কাছাকাছি দূরপাল্লার যুদ্ধের শত্রুদের জন্ম দেওয়ার চেষ্টা করুন
  3. উপলক্ষ্যে, প্লেয়ারের সামনে বিশেষ শত্রুদের জন্ম দেয়, তবে অদৃশ্য পয়েন্টে।
  4. প্লেয়ার থেকে X মিটারের বেশি দূরে শত্রুদের জন্ম দেবেন না
  5. একই সময়ে X এর বেশি শত্রুদের জন্ম দেবেন না


এক পর্যায়ে, আমাদের প্রায় একশ মিশন প্রস্তুত ছিল, কিন্তু কিছুক্ষণ পরে, আমাদের তাদের আরও বেশি প্রয়োজন। অন্যান্য ডিজাইনার এবং আমি আরও একশ মিশন তৈরি করতে অনেক সময় এবং প্রচেষ্টা ব্যয় করতে চাইনি, তাই আমরা মিশন তৈরির জন্য একটি দ্রুত এবং সস্তা পদ্ধতির সন্ধান শুরু করেছি।

মিশন জেনারেশন

মিশন পচন

সমস্ত জেনারেটর কিছু নিয়ম অনুসারে কাজ করে এবং আমাদের ম্যানুয়ালি তৈরি করা মিশনগুলিও নির্দিষ্ট সুপারিশ অনুসারে সম্পন্ন হয়েছিল। সুতরাং, আমরা মিশনের মধ্যে নিদর্শন সম্পর্কে একটি অনুমান নিয়ে এসেছি, এবং সেই নিদর্শনগুলি জেনারেটরের নিয়ম হিসাবে কাজ করবে।


✍🏻 কিছু শর্ত যা আপনি পাঠ্যটিতে পাবেন:

  • ক্লাস্টারিং হল একটি প্রদত্ত সংগ্রহকে নন-ওভারল্যাপিং সাবসেটে (ক্লাস্টার) ভাগ করার কাজ, যাতে অনুরূপ বস্তু একই ক্লাস্টারের অন্তর্গত, এবং বিভিন্ন ক্লাস্টারের বস্তুগুলি উল্লেখযোগ্যভাবে আলাদা হয়।

  • শ্রেণীগত বৈশিষ্ট্যগুলি এমন ডেটা যা একটি সসীম সেট থেকে একটি মান নেয় এবং একটি সংখ্যাসূচক উপস্থাপনা থাকে না। উদাহরণস্বরূপ, স্প্যান ওয়াল ট্যাগ: উত্তর, দক্ষিণ, ইত্যাদি।

  • শ্রেণীবদ্ধ বৈশিষ্ট্যগুলির কোডিং হল পূর্বে নির্দিষ্ট কিছু নিয়ম অনুসারে শ্রেণীবদ্ধ বৈশিষ্ট্যগুলিকে একটি সংখ্যাসূচক উপস্থাপনায় রূপান্তর করার একটি পদ্ধতি। উদাহরণস্বরূপ, উত্তর → 0, দক্ষিণ → 1, ইত্যাদি।

  • সাধারণীকরণ হল পরিসরের পার্থক্য সম্পর্কে তথ্য না হারিয়ে কিছু সাধারণ স্কেলে আনার জন্য সংখ্যাসূচক বৈশিষ্ট্যগুলিকে প্রিপ্রসেস করার একটি পদ্ধতি। তারা ব্যবহার করা যেতে পারে, উদাহরণস্বরূপ, বস্তুর সাদৃশ্য গণনা করতে। পূর্বে উল্লিখিত হিসাবে, বস্তুর সাদৃশ্য ক্লাস্টারিং সমস্যাগুলিতে একটি মূল ভূমিকা পালন করে।


ম্যানুয়ালি এই সমস্ত নিদর্শনগুলির জন্য অনুসন্ধান করা অত্যন্ত সময়সাপেক্ষ হবে, তাই আমরা ক্লাস্টারিং ব্যবহার করার সিদ্ধান্ত নিয়েছি। এখানেই মেশিন লার্নিং কাজে আসে, কারণ এটি এই কাজটি ভালভাবে পরিচালনা করে।


ক্লাস্টারিং কিছু এন-ডাইমেনশনাল স্পেসে কাজ করে এবং ML বিশেষ করে সংখ্যার সাথে কাজ করে। তাই সমস্ত স্পন ভেক্টর হয়ে যাবে:

  • শ্রেণীগত ভেরিয়েবল কোডেড ছিল
  • সমস্ত ডেটা স্বাভাবিক করা হয়েছিল


সুতরাং, উদাহরণস্বরূপ, যে স্প্যানটিকে "2 মিটার, 10 প্রস্থ এবং 5 দৈর্ঘ্যের একটি ইন্ডেন্টেশন সহ উত্তরের প্রাচীরে 10 জন জম্বি শুটার" হিসাবে বর্ণনা করা হয়েছিল তা ভেক্টর [0.5, 0.25, 0.2' হয়ে উঠেছে। , 0.8, …, 0.5] (← এই সংখ্যাগুলি বিমূর্ত)।


অতিরিক্তভাবে, নির্দিষ্ট শত্রুদের বিমূর্ত প্রকারে ম্যাপ করে শত্রুদের সেটের শক্তি হ্রাস করা হয়েছিল। শুরুর জন্য, এই ধরনের ম্যাপিং একটি নির্দিষ্ট ক্লাস্টারে একটি নতুন শত্রুকে বরাদ্দ করা সহজ করে তোলে। এটি নিদর্শনগুলির সর্বোত্তম সংখ্যা হ্রাস করাও সম্ভব করেছে এবং ফলস্বরূপ, প্রজন্মের নির্ভুলতা বৃদ্ধি করেছে – তবে পরবর্তীতে আরও বেশি।

ক্লাস্টারিং অ্যালগরিদম


অনেক ক্লাস্টারিং অ্যালগরিদম আছে: K-Means, DBSCAN, বর্ণালী, শ্রেণীবিন্যাস ইত্যাদি। এগুলি সবই ভিন্ন ধারণার উপর ভিত্তি করে কিন্তু তাদের লক্ষ্য একই: ডেটাতে ক্লাস্টার খুঁজে বের করা। নীচে, আপনি নির্বাচিত অ্যালগরিদমের উপর নির্ভর করে একই ডেটার জন্য ক্লাস্টার খোঁজার বিভিন্ন উপায় দেখতে পাচ্ছেন।

কে-মিনস অ্যালগরিদম স্পনের ক্ষেত্রে সেরা পারফর্ম করেছে।


এখন, যারা এই অ্যালগরিদম সম্পর্কে কিছুই জানেন না তাদের জন্য একটি ছোট ডিগ্রেশন (কোন কঠোর গাণিতিক যুক্তি থাকবে না যেহেতু এই নিবন্ধটি গেমের বিকাশ সম্পর্কে এবং ML-এর মূল বিষয়গুলি সম্পর্কে নয়)। K-মানে প্রতিটি বৈশিষ্ট্য থেকে বর্গ দূরত্বের যোগফলকে তার নির্ধারিত ক্লাস্টারের গড় মান পর্যন্ত কমিয়ে দিয়ে K ক্লাস্টারে ডেটা বিভক্ত করে। গড় বর্গাকার দূরত্বের ইন্ট্রাক্লাস্টার যোগফল দ্বারা প্রকাশ করা হয়।


এই পদ্ধতি সম্পর্কে নিম্নলিখিত বোঝা গুরুত্বপূর্ণ:

  • এটি ক্লাস্টারগুলির একই আকার নিশ্চিত করে না — আমাদের জন্য, এটি কোনও সমস্যা ছিল না কারণ একটি মিশনের মধ্যে ক্লাস্টারগুলির বিতরণ অসম হতে পারে।
  • এটি ডেটার অভ্যন্তরে ক্লাস্টারের সংখ্যা নির্ধারণ করে না, তবে এটির জন্য একটি ইনপুট হিসাবে একটি নির্দিষ্ট K সংখ্যা প্রয়োজন, অর্থাৎ, ক্লাস্টারগুলির পছন্দসই সংখ্যা। কখনও কখনও, এই সংখ্যা অগ্রিম নির্ধারিত হয়, এবং কখনও কখনও, এটি হয় না। অধিকন্তু, ক্লাস্টারগুলির "সেরা" সংখ্যা খুঁজে পাওয়ার জন্য কোন সাধারণভাবে গৃহীত পদ্ধতি নেই।


আসুন আরেকটু বিস্তারিতভাবে সেই দ্বিতীয় পয়েন্টটি দেখি।

ক্লাস্টার সংখ্যা

কনুই পদ্ধতি প্রায়ই ক্লাস্টারগুলির সর্বোত্তম সংখ্যা নির্বাচন করতে ব্যবহৃত হয়। ধারণাটি খুবই সহজ: আমরা অ্যালগরিদম চালাই এবং 1 থেকে N পর্যন্ত সমস্ত K চেষ্টা করি, যেখানে N হল কিছু যুক্তিসঙ্গত সংখ্যা। আমাদের ক্ষেত্রে, এটি ছিল 10 - আরও ক্লাস্টার খুঁজে পাওয়া অসম্ভব। এখন, আসুন প্রতিটি ক্লাস্টার (WSS বা SS নামে পরিচিত একটি স্কোর) এর মধ্যে বর্গক্ষেত্র দূরত্বের যোগফল খুঁজে বের করা যাক। আমরা এই সমস্তগুলি একটি গ্রাফে প্রদর্শন করব এবং একটি বিন্দু নির্বাচন করব যার পরে y-অক্ষের মান উল্লেখযোগ্যভাবে পরিবর্তন হওয়া বন্ধ করে।


ব্যাখ্যা করার জন্য, আমরা একটি সুপরিচিত ডেটাসেট ব্যবহার করব, আইরিস ফুল ডেটা সেট . আসুন K এর সাথে 1 থেকে 10 পর্যন্ত অ্যালগরিদম চালাই এবং দেখুন কিভাবে উপরের অনুমানটি K-এর উপর নির্ভর করে পরিবর্তিত হয়। আনুমানিক K=3 এ, অনুমানটি অনেক পরিবর্তন হওয়া বন্ধ করে — এবং আসল ডেটাসেটে ঠিক কতগুলি ক্লাস ছিল।

আপনি যদি কনুই দেখতে না পান তবে আপনি সিলুয়েট পদ্ধতি ব্যবহার করতে পারেন, তবে এটি নিবন্ধের সুযোগের বাইরে।


উপরের এবং নীচের সমস্ত গণনা পাইথনে এমএল এবং ডেটা বিশ্লেষণের জন্য স্ট্যান্ডার্ড লাইব্রেরি ব্যবহার করে করা হয়েছিল: পান্ডা, নম্পি, সিবোর্ন এবং স্কলারন। আমি কোডটি ভাগ করছি না কারণ নিবন্ধটির মূল উদ্দেশ্য প্রযুক্তিগত বিবরণে যাওয়ার পরিবর্তে ক্ষমতাগুলিকে চিত্রিত করা।


প্রতিটি ক্লাস্টার বিশ্লেষণ


ক্লাস্টারগুলির সর্বোত্তম সংখ্যা পাওয়ার পরে, তাদের প্রত্যেকটি বিশদভাবে অধ্যয়ন করা উচিত। আমাদের দেখতে হবে এতে কী কী স্পন অন্তর্ভুক্ত করা হয়েছে এবং তারা কী মান নেয়। পরবর্তী প্রজন্মের ব্যবহারের জন্য প্রতিটি ক্লাস্টারের জন্য আমাদের নিজস্ব সেটিংস তৈরি করা যাক। পরামিতি অন্তর্ভুক্ত:


  • সম্ভাব্যতা গণনা করার জন্য শত্রুর ওজন। উদাহরণস্বরূপ, একটি সাধারণ জম্বি = 5, এবং একটি হেলমেট সহ একটি জম্বি = 1। অতএব, একটি সাধারণের সম্ভাবনা 5/6, এবং একটি হেলমেট সহ একটি জম্বি 1/6। ওজন কাজ করা আরো সুবিধাজনক.
  • মান সীমা, উদাহরণস্বরূপ, জোন বা এর প্রস্থের ঘূর্ণনের সর্বনিম্ন এবং সর্বাধিক কোণ। প্রতিটি প্যারামিটার তার নিজস্ব সেগমেন্ট দ্বারা বর্ণনা করা হয়, যার যেকোনো মান সমানভাবে সম্ভাব্য।
  • শ্রেণীগত মান, উদাহরণস্বরূপ, একটি প্রাচীর ট্যাগ বা পয়েন্ট দৃশ্যমানতা, শত্রু সেটিংস হিসাবে বর্ণনা করা হয়, এবং এটি ওজনের মাধ্যমে।


আসুন ক্লাস্টার সেটিংস বিবেচনা করা যাক, যাকে মৌখিকভাবে বর্ণনা করা যেতে পারে "একটু দূরত্বে প্লেয়ারের কাছাকাছি কোথাও এবং সম্ভবত দৃশ্যমান বিন্দুতে সরল শত্রুদের জন্ম।"


ক্লাস্টার 1 টেবিল

শত্রুদের

টাইপ

r

আর-ব-দ্বীপ

ঘূর্ণন

প্রস্থ

দৃশ্যমানতা

zombie_common_3_5=4, zombie_heavy=1

প্লেয়ার

10-12

1-2

0-30

30-45

দৃশ্যমান=9, অদৃশ্য=1


এখানে দুটি দরকারী কৌশল আছে:


  • এটি নির্দিষ্ট শত্রুর একটি নির্দিষ্ট সংখ্যা নয়, তবে একটি অংশ যা থেকে তার সংখ্যা নির্বাচন করা হবে। এটি একই শত্রুর সাথে বিভিন্ন ক্লাস্টারে কিন্তু বিভিন্ন পরিমাণে কাজ করতে সহায়তা করে।
  • এটি বাইরের ব্যাসার্ধ (R) নির্দিষ্ট করা হয় না, কিন্তু ব-দ্বীপ (R-ডেল্টা) অভ্যন্তরীণ ব্যাসার্ধ (r) এর সাথে সম্পর্কিত, যাতে R > r নিয়মটিকে সম্মান করা হয়। এইভাবে, R-ডেল্টা এলোমেলো r, r+R-delta > r-এর সাথে যেকোন R-delta > 0 যোগ করা হয়, যার মানে সবকিছুই ভালো।


এটি প্রতিটি ক্লাস্টারের সাথে করা হয়েছিল, এবং তাদের মধ্যে 10 টিরও কম ছিল, তাই এটি বেশি সময় নেয়নি৷


ক্লাস্টারিং সম্পর্কে কিছু আকর্ষণীয় জিনিস


আমরা শুধুমাত্র এই বিষয়ে একটু স্পর্শ করেছি, কিন্তু এখনও অধ্যয়ন করার জন্য অনেক আকর্ষণীয় জিনিস আছে। এখানে রেফারেন্স জন্য কিছু নিবন্ধ আছে; তারা ডেটা, ক্লাস্টারিং এবং ফলাফল বিশ্লেষণের সাথে কাজ করার প্রক্রিয়াগুলির একটি ভাল বিবরণ প্রদান করে।



একটি মিশনের জন্য সময়


স্পন নিদর্শন ছাড়াও, আমরা প্রজন্মের সময় এই পরামিতি ব্যবহার করার জন্য এটির সমাপ্তির প্রত্যাশিত সময়ে একটি মিশনের মধ্যে শত্রুদের মোট স্বাস্থ্যের নির্ভরতা অধ্যয়ন করার সিদ্ধান্ত নিয়েছি।


ম্যানুয়াল মিশন তৈরির প্রক্রিয়ায়, কাজটি ছিল অধ্যায়ের জন্য একটি সমন্বিত গতি তৈরি করা — মিশনের একটি ক্রম: সংক্ষিপ্ত, দীর্ঘ, সংক্ষিপ্ত, আবার সংক্ষিপ্ত এবং আরও অনেক কিছু। আপনি যদি খেলোয়াড়ের প্রত্যাশিত ডিপিএস এবং তার সময় জানেন তবে আপনি কীভাবে একটি মিশনের মধ্যে শত্রুদের সম্পূর্ণ স্বাস্থ্য পেতে পারেন?


💡 লিনিয়ার রিগ্রেশন হল একটি রৈখিক নির্ভরশীলতা ফাংশন সহ একটি ভেরিয়েবলের উপর অন্য বা একাধিক ভেরিয়েবলের নির্ভরতা পুনর্গঠনের একটি পদ্ধতি। নীচের উদাহরণগুলি একটি পরিবর্তনশীল থেকে একচেটিয়াভাবে রৈখিক রিগ্রেশন বিবেচনা করবে: f(x) = wx + b।


আসুন নিম্নলিখিত পদগুলি প্রবর্তন করি:

  • HP মিশনে শত্রুদের মোট স্বাস্থ্য
  • ডিপিএস হল প্রতি সেকেন্ডে প্লেয়ারের প্রত্যাশিত ক্ষতি
  • অ্যাকশন টাইম হল খেলোয়াড় মিশনে শত্রুদের ধ্বংস করতে কত সেকেন্ড ব্যয় করে
  • বিনামূল্যের সময় হল অতিরিক্ত সময় যার মধ্যে খেলোয়াড়, উদাহরণস্বরূপ, লক্ষ্য পরিবর্তন করতে পারে
  • প্রত্যাশিত মিশন সময় কর্ম এবং বিনামূল্যে সময়ের যোগফল


সুতরাং, HP = DPS * কর্ম সময় + বিনামূল্যে সময়। একটি ম্যানুয়াল অধ্যায় তৈরি করার সময়, আমরা প্রতিটি মিশনের প্রত্যাশিত সময় রেকর্ড করেছি; এখন, আমাদের কর্ম সময় খুঁজে বের করতে হবে।


আপনি যদি প্রত্যাশিত মিশনের সময় জানেন তবে আপনি কর্ম সময় গণনা করতে পারেন এবং বিনামূল্যে সময় পেতে প্রত্যাশিত সময় থেকে বিয়োগ করতে পারেন: বিনামূল্যে সময় = মিশন সময় - কর্ম সময় = মিশন সময় - HP * DPS। এই সংখ্যাটি তখন মিশনে শত্রুদের গড় সংখ্যা দিয়ে ভাগ করা যেতে পারে এবং আপনি প্রতি শত্রুর জন্য বিনামূল্যে সময় পাবেন। অতএব, যা অবশিষ্ট থাকে তা হল প্রত্যাশিত মিশনের সময় থেকে শত্রু প্রতি খালি সময় পর্যন্ত একটি রৈখিক রিগ্রেশন তৈরি করা।

উপরন্তু, আমরা মিশন সময় থেকে কর্ম সময়ের ভাগের একটি রিগ্রেশন তৈরি করব।


আসুন গণনার একটি উদাহরণ দেখি এবং কেন এই রিগ্রেশনগুলি ব্যবহার করা হয় তা দেখুন:

  1. দুটি সংখ্যা লিখুন: মিশনের সময় এবং ডিপিএস 30 এবং 70 হিসাবে
  2. মিশন টাইম থেকে অ্যাকশন টাইমের ভাগের রিগ্রেশন দেখুন এবং উত্তর পান, 0.8
  3. 30*0.8=6 সেকেন্ড হিসাবে কর্ম সময় গণনা করুন
  4. 6*70=420 হিসাবে HP গণনা করুন
  5. মিশন টাইম থেকে শত্রু প্রতি ফ্রি সময়ের রিগ্রেশন দেখুন এবং উত্তর পান, যা 0.25 সেকেন্ড।


এখানে একটি প্রশ্ন: কেন আমাদের শত্রুর জন্য অবসর সময় জানতে হবে? আগেই উল্লেখ করা হয়েছে, স্পনগুলি সময় অনুসারে সাজানো হয়। তাই, i-th স্পনের সময়কে (i-1) তম স্পনের কর্ম সময়ের যোগফল এবং এর মধ্যে ফাঁকা সময় হিসাবে গণনা করা যেতে পারে।


এবং এখানে আরেকটি প্রশ্ন আসে: অ্যাকশন টাইম এবং ফ্রি টাইমের ভাগ কেন স্থির নয়?


আমাদের খেলায়, একটি মিশনের অসুবিধা তার সময়কালের সাথে সম্পর্কিত। অর্থাৎ, সংক্ষিপ্ত মিশনগুলি সহজ, এবং দীর্ঘগুলি আরও কঠিন। অসুবিধার পরামিতিগুলির মধ্যে একটি হল শত্রু প্রতি বিনামূল্যে সময়। উপরের গ্রাফে বেশ কয়েকটি সরল রেখা রয়েছে এবং তাদের একই ঢাল সহগ (w), কিন্তু একটি ভিন্ন অফসেট (b) রয়েছে। সুতরাং, অসুবিধা পরিবর্তন করার জন্য, অফসেট পরিবর্তন করাই যথেষ্ট: b বাড়ানো গেমটিকে সহজ করে তোলে, হ্রাস করা আরও কঠিন করে তোলে এবং নেতিবাচক সংখ্যাগুলি অনুমোদিত। এই বিকল্পগুলি আপনাকে অধ্যায় থেকে অধ্যায়ে অসুবিধা পরিবর্তন করতে সহায়তা করে।


আমি বিশ্বাস করি যে সমস্ত ডিজাইনারদের রিগ্রেশনের সমস্যাটি অনুসন্ধান করা উচিত, কারণ এটি প্রায়শই অন্যান্য প্রকল্পগুলিকে বিনির্মাণে সহায়তা করে:



নতুন মিশন তৈরি করা হচ্ছে


সুতরাং, আমরা জেনারেটরের নিয়মগুলি খুঁজে বের করতে পেরেছি এবং এখন আমরা প্রজন্মের প্রক্রিয়াতে যেতে পারি।


আপনি যদি বিমূর্তভাবে চিন্তা করেন, তাহলে যেকোনো মিশনকে সংখ্যার ক্রম হিসাবে উপস্থাপন করা যেতে পারে, যেখানে প্রতিটি সংখ্যা একটি নির্দিষ্ট স্পন ক্লাস্টার প্রতিফলিত করে। উদাহরণস্বরূপ, মিশন: 1, 2, 1, 1, 2, 3, 3, 2, 1, 3। এর মানে হল যে নতুন মিশন তৈরির কাজটি নতুন সংখ্যাসূচক ক্রম তৈরিতে নেমে আসে। প্রজন্মের পর, আপনাকে ক্লাস্টার সেটিংস অনুসারে প্রতিটি সংখ্যাকে পৃথকভাবে "প্রসারিত" করতে হবে।


মৌলিক পদ্ধতির


যদি আমরা একটি ক্রম উৎপন্ন করার একটি তুচ্ছ পদ্ধতি বিবেচনা করি, তাহলে আমরা অন্য কোনো স্পন অনুসরণ করে একটি নির্দিষ্ট স্পনের পরিসংখ্যানগত সম্ভাবনা গণনা করতে পারি। উদাহরণস্বরূপ, আমরা নিম্নলিখিত চিত্রটি পাই:

ডায়াগ্রামের শীর্ষটি একটি ক্লাস্টার যা এটির দিকে নিয়ে যায়, একটি শীর্ষবিন্দু, এবং প্রান্তের ওজন হল পরবর্তী হওয়ার ক্লাস্টার সম্ভাবনা।


এই ধরনের একটি গ্রাফের মধ্য দিয়ে হাঁটা, আমরা একটি ক্রম তৈরি করতে পারি। যাইহোক, এই পদ্ধতির কিছু অসুবিধা রয়েছে। এর মধ্যে রয়েছে, উদাহরণস্বরূপ, স্মৃতির অভাব (এটি কেবল বর্তমান অবস্থা জানে) এবং একটি রাজ্যে "আটকে যাওয়ার" সম্ভাবনা যদি এটির নিজের পরিণত হওয়ার উচ্চ পরিসংখ্যানগত সম্ভাবনা থাকে।


✍🏻 যদি আমরা এই গ্রাফটিকে একটি প্রক্রিয়া হিসাবে বিবেচনা করি তবে আমরা একটি সাধারণ মার্কভ চেইন পাই।


পৌনঃপুনিক নিউরাল নেটওয়ার্ক


আসুন নিউরাল নেটওয়ার্কগুলির দিকে ফিরে যাই, যথা পুনরাবৃত্ত নেটওয়ার্কগুলি যেহেতু তাদের মৌলিক পদ্ধতির অসুবিধা নেই৷ এই নেটওয়ার্কগুলি ন্যাচারাল ল্যাঙ্গুয়েজ প্রসেসিং টাস্কে অক্ষর বা শব্দের মতো সিকোয়েন্সের মডেলিং এ ভালো। এটিকে খুব সহজভাবে বলতে গেলে, নেটওয়ার্কটি পূর্ববর্তীগুলির উপর ভিত্তি করে ক্রমটির পরবর্তী উপাদানটির পূর্বাভাস দিতে প্রশিক্ষিত।

এই নেটওয়ার্কগুলি কীভাবে কাজ করে তার একটি বিবরণ এই নিবন্ধের সুযোগের বাইরে, কারণ এটি একটি বিশাল বিষয়। পরিবর্তে, আসুন প্রশিক্ষণের জন্য কী প্রয়োজন তা দেখি:


  • L দৈর্ঘ্যের N ক্রমগুলির একটি সেট
  • প্রতিটি N অনুক্রমের উত্তর হল a এক-গরম ভেক্টর, অর্থাৎ, C-1 শূন্য এবং এক 1 নিয়ে গঠিত C দৈর্ঘ্যের একটি ভেক্টর, উত্তর নির্দেশ করে।
  • C হল উত্তরের সেটের শক্তি।


N=2, L=3, C=5 সহ একটি সাধারণ উদাহরণ। আসুন 1, 2, 3, 4, 1 ক্রমটি নেওয়া যাক এবং এর ভিতরে L+1 দৈর্ঘ্যের অনুগামীগুলি সন্ধান করুন: [1, 2, 3, 4], [2, 3, 4, 1]। আসুন ক্রমটিকে L অক্ষরের একটি ইনপুট এবং একটি উত্তর (লক্ষ্য)-তে ভাগ করি - (L+1)তম অক্ষর*।* উদাহরণস্বরূপ, [1, 2, 3, 4] → [1, 2, 3] এবং [ 4]। আমরা উত্তরগুলিকে এক-হট ভেক্টরে এনকোড করি, [4] → [0, 0, 0, 0, 1]।

এর পরে, আপনি টেনসরফ্লো বা পাইটর্চ ব্যবহার করে পাইথনে একটি সাধারণ নিউরাল নেটওয়ার্ক স্কেচ করতে পারেন। আপনি নীচের লিঙ্কগুলি ব্যবহার করে এটি কীভাবে করা হয় তা দেখতে পারেন। যা অবশিষ্ট থাকে তা হল উপরে বর্ণিত ডেটাতে প্রশিক্ষণ প্রক্রিয়া শুরু করা, অপেক্ষা করুন এবং... তারপর আপনি উৎপাদনে যেতে পারেন!


মেশিন লার্নিং মডেলের নির্দিষ্ট মেট্রিক্স থাকে, যেমন নির্ভুলতা। নির্ভুলতা সঠিকভাবে দেওয়া উত্তরগুলির অনুপাত দেখায়। যাইহোক, এটিকে সতর্কতার সাথে দেখতে হবে কারণ ডেটাতে শ্রেণীগত ভারসাম্যহীনতা থাকতে পারে। যদি কোনটি না থাকে (বা প্রায় কোনটিই নয়), তবে আমরা বলতে পারি যে মডেলটি ভাল কাজ করে যদি এটি এলোমেলো উত্তরগুলির চেয়ে ভাল ভবিষ্যদ্বাণী করে, অর্থাৎ, নির্ভুলতা > 1/C; 1 এর কাছাকাছি হলে, এটি দুর্দান্ত কাজ করে।


আমাদের ক্ষেত্রে, মডেলটি ভাল নির্ভুলতা দেখিয়েছে। এই ফলাফলগুলির একটি কারণ হল ছোট সংখ্যক ক্লাস্টার যা শত্রুদের তাদের ধরন এবং তাদের ভারসাম্যের সাথে ম্যাপ করার জন্য ধন্যবাদ অর্জিত হয়েছিল।


আগ্রহীদের জন্য এখানে আরএনএন-এর আরও উপকরণ রয়েছে:


জেনারেশন প্রক্রিয়া

জেনারেটর সেটআপ


প্রশিক্ষিত মডেল সহজ ক্রমিক , তাই আপনি এটিকে ইঞ্জিনে একটি সম্পদ হিসাবে ব্যবহার করতে পারেন, আমাদের ক্ষেত্রে, ইউনিটি। তদনুসারে, জেনারেটর একটি API এর মাধ্যমে মডেলটি অ্যাক্সেস করে এবং পুনরাবৃত্তিমূলকভাবে একটি ক্রম তৈরি করে। ফলাফল প্রসারিত এবং একটি পৃথক CSV ফাইলে সংরক্ষণ করা হয়.


মডেলের সাথে ইন্টারঅ্যাক্ট করতে, ইউনিটিতে একটি কাস্টম উইন্ডো তৈরি করা হয়েছে যেখানে গেম ডিজাইনাররা সমস্ত প্রয়োজনীয় মিশন প্যারামিটার সেট করতে পারে:

  • নাম
  • সময়কাল
  • উপলব্ধ শত্রু, শত্রুরা ধীরে ধীরে প্রদর্শিত হয়
  • মিশনে তরঙ্গের সংখ্যা এবং তাদের জুড়ে স্বাস্থ্য বিতরণ
  • শত্রু-নির্দিষ্ট ওজন সংশোধক, যা নির্দিষ্ট শত্রুদের আরও প্রায়ই নির্বাচন করতে সাহায্য করে, উদাহরণস্বরূপ, নতুনগুলি
  • ইত্যাদি


সেটিংসে প্রবেশ করার পরে, যা বাকি থাকে তা হল একটি বোতাম টিপুন এবং প্রয়োজনে সম্পাদনা করা যেতে পারে এমন একটি ফাইল পান৷ হ্যাঁ, আমি আগে থেকেই মিশন তৈরি করতে চেয়েছিলাম, খেলার সময় নয়, যাতে সেগুলিকে টুইক করা যায়।

প্রজন্মের পর্যায়

আসুন প্রজন্মের প্রক্রিয়াটি দেখুন:


  1. মডেলটি ইনপুট হিসাবে একটি ক্রম গ্রহণ করে এবং একটি উত্তর তৈরি করে — সম্ভাব্যতার একটি ভেক্টর যা i-th ক্লাস্টার পরবর্তী হবে। অ্যালগরিদম পাশা রোল করে, যদি সংখ্যাটি ত্রুটির সম্ভাবনার চেয়ে বেশি হয়, তাহলে আমরা সবচেয়ে সম্ভাব্য একটি গ্রহণ করি, অন্যথায় এলোমেলো। এই কৌশলটি একটু সৃজনশীলতা এবং বৈচিত্র্য যোগ করে।
  2. একটি নির্দিষ্ট সংখ্যক পুনরাবৃত্তি না হওয়া পর্যন্ত প্রক্রিয়া চলতে থাকে। এটি ম্যানুয়ালি তৈরি যে কোনো মিশনে স্পনের সংখ্যার চেয়ে বেশি।
  3. ক্রম চলতে থাকে; অর্থাৎ, প্রতিটি সংখ্যা ক্লাস্টারের সংরক্ষিত ডেটা অ্যাক্সেস করে এবং তাদের থেকে এলোমেলো মান গ্রহণ করে।
  4. ডেটার অভ্যন্তরে স্বাস্থ্যকে সংক্ষিপ্ত করা হয়, এবং প্রত্যাশিত স্বাস্থ্যের চেয়ে বড় সবকিছুকে ক্রম থেকে বাদ দেওয়া হয় (এর গণনা উপরে আলোচনা করা হয়েছিল)
  5. স্পনগুলি নির্দিষ্ট স্বাস্থ্য বন্টনের উপর নির্ভর করে তরঙ্গগুলিতে বিভক্ত হয় এবং তারপরে দলে বিভক্ত হয় (যাতে একাধিক শত্রু একবারে উপস্থিত হয়), এবং তাদের উপস্থিতির সময়টি স্পনের পূর্ববর্তী গ্রুপের কর্মের যোগফল এবং বিনামূল্যের সময় হিসাবে দেওয়া হয়।
  6. মিশন প্রস্তুত!


উপসংহার

সুতরাং, এটি একটি ভাল টুল যা আমাদেরকে কয়েকবার মিশন তৈরির গতি বাড়াতে সাহায্য করেছে। উপরন্তু, এটি কিছু ডিজাইনারকে "লেখকের ব্লক" এর ভয় কাটিয়ে উঠতে সাহায্য করেছে, তাই বলতে গেলে, এখন থেকে আপনি কয়েক সেকেন্ডের মধ্যে একটি প্রস্তুত সমাধান পেতে পারেন।


প্রবন্ধে, মিশন জেনারেশনের উদাহরণ ব্যবহার করে, আমি দেখানোর চেষ্টা করেছি কিভাবে ক্লাসিক্যাল মেশিন লার্নিং পদ্ধতি এবং নিউরাল নেটওয়ার্ক গেম ডেভেলপমেন্টে সাহায্য করতে পারে। আজকাল জেনারেটিভ এআই-এর দিকে একটি বিশাল প্রবণতা রয়েছে - তবে মেশিন লার্নিংয়ের অন্যান্য শাখাগুলি সম্পর্কে ভুলবেন না, কারণ তারাও অনেক কিছু করতে সক্ষম।


এই নিবন্ধটি পড়ার জন্য সময় দেওয়ার জন্য ধন্যবাদ! আমি আশা করি আপনি উত্পন্ন অবস্থানে মিশনের পদ্ধতি এবং মিশনের প্রজন্ম উভয়ের ধারণা পেয়েছেন। নতুন জিনিস শিখতে ভয় পাবেন না, নিজেকে বিকাশ করুন এবং ভাল গেম তৈরি করুন!


shabbyrtist দ্বারা চিত্রিত