কীভাবে একটি শ্যুট-ইম-আপে বুদ্ধিমান শত্রু বাস্তবায়ন করবেন?


13

খুব সাধারণ শ্যুট-ইম-আপের কল্পনা করুন, এমন কিছু যা আমরা সবাই জানি:

শুট-ইম-আপ 1

আপনি প্লেয়ার (সবুজ)। আপনার চলাচল Xঅক্ষের মধ্যে সীমাবদ্ধ । আমাদের শত্রু (বা শত্রু) পর্দার শীর্ষে রয়েছে, তার চলাচলও Xঅক্ষের মধ্যে সীমাবদ্ধ । প্লেয়ার শত্রুতে গুলি (হলুদ) গুলি চালায়।

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

ভারী অঙ্কুর-ইম-আপ

দুটি ওজন রয়েছে: "বুলেট-ওজন" (ধূসর) হ'ল বুলেট দ্বারা চাপানো বিপদ। বুলেট শত্রুর কাছাকাছি, "বুলেট-ওজন" তত বেশি ( 0..1যেখানে 1 সর্বোচ্চ বিপদ)। বুলেটবিহীন লেনগুলির ওজন 0 থাকে The দ্বিতীয় ওজন হ'ল "দূরত্বের ওজন" (চুন-সবুজ)। প্রতিটি লেনের জন্য আমি 0.2চলাচলের ব্যয় যুক্ত করি (এই মানটি এখন স্বেচ্ছাচারী এবং এটি টুইট করা যেতে পারে)।

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

তাই আমি যা খুঁজছি তা এখানে:

অঙ্কুর-ইম-আপ সম্পূর্ণ ধ্বংস

  • বুলেট-ঝড়ের মধ্য দিয়ে কোনও উপায় খুঁজে পাওয়া উচিত, এমনকি এমন কোনও জায়গা নেই যেখানে বুলেটের হুমকি চাপানো হয় না।
  • শত্রু নির্ভরযোগ্যভাবে একটি অনুকূল (বা প্রায় অনুকূল) সমাধান বাছাই করে বুলেটগুলিকে ডজ করতে পারে।
  • অ্যালগরিদম বুলেট চলাচলের গতিতে ফ্যাক্টর করতে সক্ষম হওয়া উচিত (কারণ তারা বিভিন্ন গতিতে চলতে পারে)।
  • বিভিন্ন স্তরের অসুবিধা প্রয়োগ করা যেতে পারে (অতি বুদ্ধিমান শত্রুদের কাছে বোবা) যাতে অ্যালগরিদমটি টুইট করার উপায়।
  • অ্যালগরিদমকে বিভিন্ন গোলের অনুমতি দেওয়া উচিত, যেহেতু শত্রু কেবল গুলি থেকে বাঁচতে চায় না, সেও খেলোয়াড়কে গুলি করতে সক্ষম হবে। এর অর্থ হ'ল গুলি চালানোর সময় শত্রুরা প্লেয়ারকে গুলি করতে পারে এমন অবস্থানগুলি পছন্দ করা উচিত।

তাহলে আপনি কীভাবে এটিকে মোকাবেলা করবেন? এই ধারার অন্যান্য গেমগুলির বিপরীতে, আমি বোবা শত্রুদের পরিবর্তে কেবল কয়েকটি, তবে খুব "দক্ষ" শত্রু পেতে চাই।


2
আপনি কি স্টিয়ারিং আচরণের মতো কিছু ব্যবহার বিবেচনা করেছেন? আছে: বাধা পরিহার বিশেষভাবে জন্য এক red3d.com/cwr/steer/Obstacle.html
Tetrad

@ টেট্র্যাড আমি স্টিয়ারিং আচরণগুলি সম্পর্কে ভেবেছি .. এগুলিও কারণ তারা "প্লেয়ারকে গুলি করার চেষ্টা করুন" এবং যখন বিপদ এগিয়ে চলেছে তখন "এড়ানো" তেমন পরিবর্তন করা যায় nice আমি আশঙ্কা করি যে একটি 1 ডি (এটাই আমি মূলত যার সাথে ডিল করছি) এর সংস্করণ ভাল সিদ্ধান্ত নেওয়ার পক্ষে খুব বোকা হবে। আমি যদিও ভুল হতে পারে।
বাম্মজ্যাক

উত্তর:


8

আমি মনে করি আপনার বুনিয়াদি ধারণাটি দুর্দান্ত, তবে এটি অ্যানালগ নয়। আপনার মানটির একটি অ্যানালগ ক্ষেত্র প্রয়োজন যা পুরো স্ক্রীন জুড়ে চলে। সুতরাং, 1 ডি বিস্তারের গ্রেডিয়েন্ট, যেখান থেকে আপনি ফ্লাইতে line লাইনের একটি ঠিক বিন্দুতে একটি মান অর্জন করতে পারেন। বিচ্ছুরণ গ্রেডিয়েন্টগুলি সস্তা এবং একাধিক শত্রুরা একবারে ব্যবহার করতে পারে যেমন তারা পরিবেশটি বর্ণনা করে, এবং এটির সত্তার দৃষ্টিভঙ্গি নয় (কিছুটা রেডিওসিটি লাইটিংয়ের মতো) - সম্ভবত আপনি কেন আপনার প্রশ্নে আপনার দৃষ্টিভঙ্গি বেছে নিয়েছেন? । এই গ্রেডিয়েন্টটি তুলনামূলকভাবে মসৃণ হওয়া উচিত, যাতে শত্রু থেকে জৈব চলাচল শুরু হয় এবং স্পষ্টতই আপনার গেমস্টেটের মতো আপডেট হয়। সম্ভবত চলমান গড় ?

গ্রেডিয়েন্টটি একত্রিত হওয়া উচিত:

  • নৈকট্য
  • বেগ
  • বুলেট প্রস্থ
  • (allyচ্ছিকভাবে) লক্ষ্যগুলির অবস্থান (প্লেয়ার)

ডজিংয়ের জন্য, যখনই কোনও সমাধান বিদ্যমান তখনই আমাদের সঠিকভাবে সমাধান খুঁজে পেতে সক্ষম হতে হবে । যখনই শত্রুরা ডুবে যাওয়ার পক্ষে যথেষ্ট ব্যবধান থাকে তখনই এটি ঘটে। এটি হ'ল, আপনি কেবল যা করতে পারেন তা করতে পারেন, তাই ধীরে ধীরে এই পদ্ধতির সাথে অন্য কোনও পদ্ধতির চেয়ে খারাপ কাজ করবে না, আমি বলব।

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

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

আইআরএল, আমি আমার প্রারম্ভিক ডডজিং গতিতে, যতক্ষণ না জানি তার দূরত্বে প্রজেক্টাইলকে ডডিং করা বিরক্ত করব না, এটি এড়ানো কঠিন হয়ে উঠছে। ল্যাড হিসাবে পাথর নিক্ষেপ থেকে প্রথম হাতের অভিজ্ঞতা। এক্স দূরত্বের একটি বুলে গতিবেগের সাথে ভ্রমণ করা 2x দূরত্বের বুলেট হিসাবে 2y ভ্রমণ করে এমনই বিপদের রেটিং রয়েছে। সুতরাং এটি সঠিকভাবে ফ্যাক্টর করা প্রয়োজন।

শত্রুদের অসুবিধার জন্য অ্যালগরিদমকে টুইঙ্ক করার উপায়গুলি অন্তর্ভুক্ত

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

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


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

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

7

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

    E    
B  B**B
  B***B  B
 B***B   B
B**B** B 
 B**B**BB
B*****B B
      P

E = শত্রু
বি = বুলেট
পি = প্লেয়ার
* = পর্দার নীচে যাওয়ার বিকল্প path

বাজে একবার সফল পথে চক্রান্ত করার পরে প্রতিবারের জন্য পরবর্তী পদক্ষেপ নেওয়া দরকার। এর মতো পাথ সন্ধানের জন্য সম্ভবত ইতিমধ্যে কয়েকটি ভাল অ্যালগরিদম রয়েছে। যদি বাজে বুলেটের একই গতিতে চলে যায় তবে একটি উদাহরণ অ্যালগরিদম হতে পারে;

ব্যাডি থেকে শুরু করুন এবং নীচে বাম দিকে সরাসরি নীচে এবং ডানদিকে খালি জায়গায় নিরাপদ অবস্থানগুলি চিহ্নিত করুন। তারপরে আপনার সবেমাত্র তৈরি করা প্রতিটি সুরক্ষিত জায়গা বিবেচনা করুন এবং পুনরাবৃত্তি করুন। যদি কোনও সময়ে আপনি নীচে কোনও নিরাপদ জায়গা না পেয়ে থাকেন তবে স্থানটি নিরাপদ এবং ব্যাকট্র্যাক হিসাবে চিহ্নিত করুন।


1
আকর্ষণীয় পদ্ধতির। আমি আশঙ্কা করি যে পরিবেশটি এত তাড়াতাড়ি পরিবর্তিত হওয়ায় এবং সাধারণ "সন্ধানকারী অ্যালগরিদমগুলি ব্যবহার করা কঠিন কারণ তারা বিচ্ছিন্ন" মানচিত্রগুলি "দিয়ে সবচেয়ে ভাল কাজ করে।
বামমজ্যাক

এটি অত্যধিক ব্যয়বহুল হওয়া উচিত নয়, ভুলে যাবেন না যে আপনাকে প্রতি বারে নীচের সারিতে কেবল গণনা করতে হবে, আপনাকে পুরো জিনিসটি পুনরায় গণনা করতে হবে না।
কিওয়ারকি

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

আসলে, আমি @ বিম্মজ্যাকের সাথে একমত যদিও এই পদ্ধতিটি যৌক্তিকভাবে শক্ত, তবে প্রশ্নটিতে প্রস্তাবিত 1D পদ্ধতির চেয়ে এটি ব্যয়বহুল হবে। অকালীন অপটিমাইজেশন হতে পারে তবে আমি সেই পদ্ধতিকে আরও মার্জিত বলে মনে করি। সে সম্পর্কে বিস্তারিত জানার জন্য আমার উত্তরটি দেখুন।
ইঞ্জিনিয়ার

2
এটি সম্ভবত সঠিক উত্তর, তবে বাস্তবের উত্তর নয় । শত্রুটিকে কোনও পথ তৈরি করতে সময় নেওয়ার সময়, ক্ষেত্রটিতে আরও একটি গুলি থাকতে পারে পুরোপুরি পথটিকে অকার্যকর করে দেয়, অর্থ পথটি পুনরায় গণনা করা আবশ্যক। এবং পুনঃ গণন একটি কৌতুক । তদুপরি, আপনার সুরক্ষিত বিন্দুতে ব্যাকপ্রেজিটিংয়ের ধারণাটি এটিকে আরও ব্যয়বহুল করে তোলে! @ নিক উইগগিল আমি মনে করি না এটি অকালীন অপ্টিমাইজেশান, আপনি নিজেকে ক্রোটে লাথি মারবেন না তা নিশ্চিত করার জন্য কেবলমাত্র দূরদর্শিতা।
রায় দে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.