বামন দুর্গের কমান্ড অর্ডারিং আর্কিটেকচার


21

এআইয়ের জন্য কমান্ড অর্ডারিং সিস্টেমটি কার্যকর করার সবচেয়ে মার্জিত উপায় কী? উদাহরণস্বরূপ বামন দুর্গে যখন আপনি কাঠ কাটার জন্য বনাঞ্চল চিহ্নিত করেন, তখন বামনগুলি নিম্নলিখিত ক্রমটি করেন:

  1. গাছে যাও
  2. গাছ কাটা
  3. মজুদ কাঠ বিতরণ
  4. অন্য গাছে যান
  5. ইত্যাদি

আমার কাছে ইতিমধ্যে একটি স্ট্যাক কমান্ড রয়েছে যা কাজ করছে না। 1 যা নিষ্ক্রিয় অবস্থা থেকে গাছের গন্তব্য টলে পৌঁছায়।

আমি যে বিষয়ে ভীত হই তা হ'ল আমি যখন এই জাতীয় আরও অর্ডার তৈরি করি তখন এটি কীভাবে অগোছালো হয়ে উঠবে:

একটি বাড়ি তৈরি করুন

  1. মজুদ করতে যান
  2. নির্মাণ এলাকায় কাঠ আনুন
  3. মজুদ ফিরে যান
  4. নির্মাণের জায়গায় পাথর আনুন
  5. অ্যানিমেট বিল্ডিং স্প্রাইট

রোপণ

  1. মজুদ করতে যান
  2. খামারের প্লটে বীজ আনুন

বানানোর

  1. মজুদ করতে যান
  2. স্থির করার জন্য উদ্ভিদ আনুন
  3. প্রাণবন্ত স্প্রাইট

সুতরাং আমার প্রশ্নটি হল, আমি কীভাবে বামন দুর্গের মতো কমান্ড অর্ডারিং সিস্টেমটি প্রয়োগ করব এবং একই সাথে স্প্যাগেটি কোড এড়িয়ে চলব? আমার কি অধ্যয়ন করার দরকার আছে এমন কোনও ডেটা স্ট্রাকচার আছে? আমার কি পৃথক এক্সএমএল ফাইলে কমান্ড সিক্যুয়েন্স স্থাপন করা দরকার?


1
বামন দুর্গ আসলে এই ধরনের সিস্টেম নেই। বামনকে একবারে একটি কাজ বরাদ্দ করা হয় এবং অলস বামনরা কিছু করার জন্য সন্ধান করবে। ("আরে, কাটার জন্য একটি গাছ চিহ্নিত আছে - আমার এটি কেটে ফেলা উচিত!" / "আরে, স্টকপাইলে কিছু কাঠ নেই - আমার এটি নেওয়া উচিত!")
ব্যবহারকারী 253751

1
বামনকে প্লেয়ার দ্বারা কিছু বরাদ্দ করা হয় না, তবে সিস্টেম দ্বারা "কার্যভার দেওয়া" হয়, যা ঠিক উপরে আর্কিটেকচার জেড টি। অর্ডার তৈরি করুন এবং সিস্টেমটি সেই অর্ডারটি সম্পাদন করার জন্য পৃথক উপাদানগুলির কার্যগুলি নিযুক্ত করে।
Attackfarm

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

@ অ্যাটাকফর্ম সিস্টেম সমস্ত কাজ আগে থেকেই সিদ্ধান্ত নেয় না; বা এটি একই বামনকে একাধিক কাজ বরাদ্দ করে না। প্রথমদিকে একটি কাজ বরাদ্দ করা হয় এবং এটি শেষ হলে এটি অন্য কার্যটি উপলব্ধ করার পরিণতি লাভ করে।
ব্যবহারকারী 253751

উত্তর:


27

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

কাঠ কাটা

  • আমি কি কাঠ বহন করছি, এবং মজুদে রাখছি? হ্যাঁ : ফেলে দিন
  • আমি কি কাঠ বহন করছি? হ্যাঁ : স্টকপাইলে যান
  • আমি কি গাছে আছি? হ্যাঁ : এটি কাটা
  • সর্বোপরি নয় : একটি গাছে যান

এর সুবিধাগুলি হ'ল:

  • বাস্তবায়নের জন্য খুব সহজ
  • নমনীয় - আপনি নিখরচায় এই তালিকাটি পচন করতে পারেন, আইটেম যুক্ত করতে পারেন, আইটেমগুলি সরিয়ে ফেলতে পারেন, আইটেমগুলিকে একত্রিত করতে পারেন
  • কোন রাষ্ট্র - আপনি যে কোনো অবস্থায় যে কোন বামন জন্য উপর থেকে এই তালিকা চালাতে পারেন, এবং বামন ঠিক কাজ কি করতে হবে টি এম

অসুবিধা:

  • লুপগুলিতে আটকা পড়া সহজ, যেহেতু কোনও রাজ্য নেই এবং আটকে যাওয়ার বিষয়ে কোনও সচেতনতা নেই

যৌক্তিকভাবে, আপনি এই আদেশগুলি একটি ফ্লো চার্ট হিসাবে উপস্থাপন করতে পারেন, যা প্রতিবার উপরে থেকে চালানো হয় এবং আপনি যা করেন তা নির্ভর করে আপনি প্রতিটি পদক্ষেপে হ্যাঁ / না উত্তর দিয়েছেন কিনা তার উপর। আপনি কোডে বা এক্সএমএলের মতো কোনও বাহ্যিক ফাইলে এটি প্রয়োগ করবেন না।


2
এতে স্থিতি ওভাররাইড কমান্ডগুলিকে ছাড়িয়ে দেওয়ার সুবিধাও রয়েছে, আমি কি ক্ষুধার্ত? যদি হ্যাঁ সবকিছু ফেলে দেয় এবং কাঠ খাওয়ার কাজের অনুরূপ খাওয়ার সাথে "খাওয়ার" জন্য কার্য সেট করে
ratchet freak

7
@ratchetfreak "আমি জানি আমার দুর্গের নিরাপত্তা আমার উপর এই দৈত্যের বিরুদ্ধে লড়াই করার উপর নির্ভর করে যাতে এটি বেসামরিক লোকদের উপর আক্রমণ না করে, তবে গোশ, আমার পেট সবেমাত্র বেড়েছে!" সে বিষয়ে এটিকে খুব বেশি ডিএফ এর মতো না করার চেষ্টা করুন: পি
কর্নেল থার্টি টু

আমি মনে করি এটি কী ব্যবহার করে (বা কমপক্ষে ব্যবহৃত হয়েছে) এর সাথে মিলে যায় যা প্ল্যানপ্যাকডের বাগড আর্টিক্টটিকে মঞ্জুরি দেয় (এটি একটি নিষিদ্ধ আইটেমটির কারণে হয়েছিল, যার ফলে লুপিং হয়েছিল)
ডারট্রেક્ટર

3
@ColonelThirtyTwo কোথায় funযে? ;)
লাসে

আমি দৃ strongly়ভাবে এই জন্য ঘোষিত প্রতীকী কর্ম পরিকল্পনা ব্যবহার না করার পরামর্শ দিচ্ছি। এটি ডিবাগ করা মূলত অসম্ভব এবং অনাকাঙ্ক্ষিত আচরণ সহজেই উদ্ভূত হতে পারে। পদ্ধতিগত উপায়ে প্রতিটি কাজের জন্য ক্রিয়াকলাপগুলি হার্ডকোড করা অনেক সহজ।
mklingen

10

আপনি যদি সিকোয়েন্সগুলি বেশ সাধারণ করতে পারেন তবে স্প্যাগেটি কোডের খুব বেশি কিছু নেই।

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

  1. মানচিত্রে% রিসোর্স 1% সন্ধান করুন
  2. % অ্যানিমেশন_1% ব্যবহার করে সেই অবস্থানে যান
  3. % সময়% এর জন্য% অ্যানিমেশন ৩% ব্যবহার করে জায়গায় কাজ করুন
  4. % Req_count1% গণনায়% req_resource1% নিন
  5. % অ্যানিমেশন% ব্যবহার করে% হোম% এ যান
  6. % সময়কাল%% এর জন্য% অ্যানিমেশন_6% ভিতরে শুরু করুন
  7. ইত্যাদি ..

আমরা সফলভাবে বর্ণিত পদ্ধতির ব্যবহার করি। আমাদের গেমটিতে আমাদের 15 ডলার রয়েছে। কিছু হাইলাইট:

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

2
আমাদের বামন দুর্গের মতো খেলায় আমরা এই সিস্টেমটি ব্যবহার করি। আচরণ গাছ দ্বারা কার্য সম্পাদন করা হয়। সংস্থানগুলি আচরণ দ্বারা লক হয়ে যায়, এবং ব্যর্থতার দ্বারা আনলক হয়। শীর্ষস্থানীয় উত্তর দ্বারা বর্ণিত কর্ম পরিকল্পনার পদ্ধতির তুলনায় এটি অনেক বেশি
দৃust়

5

সুতরাং এটি মূলত টপোগ্রাফিকাল বাছাইয়ের সমস্যা।

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

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

গ্রাফিক টপোগ্রাফিকালিকে বাছাই করার কোনও উপায় নেই - এটি গ্রাফের চক্রগুলি হওয়ার সময় ঘটে (আপনার কোনও কাঠ নেই, কাঠ পেতে আপনার একটি গাছ কাটা দরকার, গাছ কাটা আপনার কুঠার প্রয়োজন, কুড়াল তৈরি করার জন্য এটিও সম্ভব) কাঠ প্রয়োজন)। এই ক্ষেত্রে অ্যালগরিদম সম্ভবত প্লেয়ারকে নির্দেশ করে যে এই কাজগুলি করা সম্ভব নয়।

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

আপনি পুনরুদ্ধারকরণের কাজগুলিও যুক্ত করতে পারেন - সহজতম উপায়টি হ'ল প্রতি সময় শেষ হওয়ার সাথে সাথে টেক্সটটি আবার গ্রাফের সাথে প্রতিটি সময় সম্পন্ন করার সাথে যুক্ত করা।

এখন এটি কীভাবে সমাধান করবেন - http://en.wikedia.org/wiki/Topological_sorting

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.