স্ব-সংগঠিত / স্মার্ট ইনভেন্টরি সিস্টেম?


11

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

আমি এটি আরও ধাপে এগিয়ে নিয়েছি - আইটেমগুলি একাধিক স্লট নেয়, উন্নত স্থান নির্ধারণ ব্যবস্থা (আইটেমগুলি সর্বোত্তম ঘনিষ্ঠ ফিটের সন্ধান করার চেষ্টা করে), স্থানীয় মাউস সিস্টেম (মাউস সক্রিয় ব্যাগের অঞ্চলে আটকা পড়ে) ইত্যাদি etc.

এখানে আমার কাজের একটি ডেমো রয়েছে।

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

(আমি বিশ্বাস করি এটি কিছু গেম যেমন ডানঘাঁটি অবরোধ বা কোনও কিছুর ক্ষেত্রে প্রয়োগ করা হয়েছে, তাই নিশ্চিত যে এটি কার্যকর)

উদাহরণস্বরূপ এই ছবিটি একবার দেখুন:

অটো-বাছাই করে কি

হ্যাঁ, সুতরাং আপনি যদি সমস্যাটি স্বয়ংক্রিয়ভাবে সাজান তবে আপনি আপনার স্পেসগুলি পেয়ে যাবেন তবে এটি খারাপ কারণ: 1- ব্যয়বহুল: এই স্থানগুলি মুক্ত করার জন্য এটি পুরো ক্রমানুসারে প্রয়োজন হয় না, প্রথম ছবিতে কেবল লাল আইটেমটি স্লাইড করুন নীচে খুব বাম দিকে, এবং আপনি অটো সাজানোর থেকে একই স্থান পেয়েছেন। 2- এটি খেলোয়াড়ের জন্য বিরক্তিকর: "কে এফ আপনাকে আমার জিনিসগুলি পুনরায় অর্ডার করতে বলেছিল?"

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

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

1x3 আইটেমটি ফিট করার চেষ্টা করার একাধিক সমাধানের জন্য এখানে একটি চিত্র:

এখানে চিত্র বর্ণনা লিখুন

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

মনে রাখবেন যে আমি যদি এটির জন্য সময় ব্যয় করি তবে আমি এটিকে সমাধান করার উপায় নিয়ে আসব, তবে এটি সর্বোত্তম উপায় হবে না, এটি আপনার হাতের পরিবর্তে পা দিয়ে গাড়ী চাকা ধরে রাখার মতো! এক্সডি বা ঠিক যেমন কোনও সমস্যা সমাধানের চেষ্টা করার জন্য যাতে অ্যারেগুলি দরকার হয়, তবে আপনি এখনও তাদের অস্তিত্ব সম্পর্কে অবগত নন! তাহলে এর সঠিক পন্থাটি কী?

মন্তব্য থেকে আপডেট

@ স্টেফেন আমি অলগসে আসলেই কোনও গুরু নই, আপনি 'ন্যাপস্যাক' এবং @ ব্লুরাজের উল্লেখ করেছেন - ড্যানি ফ্লুঘুফুট একটি 2 ডি বিন প্যাকিংয়ের কথা উল্লেখ করেছেন। তারা কি কোনওভাবে সম্পর্কিত / একই? - আমি কীভাবে এর কাছে যেতে পারি সে সম্পর্কে এখনও আমি বিভ্রান্ত।

এবং হ্যাঁ আমি ইতিমধ্যে একটি "হিউরিস্টিক" ব্যবহার করছি তবে আমি আসলেই জানতাম না যে আমিই ছিলাম: ডি এটি প্রথম উপলব্ধ স্লটটি সন্ধান করে এবং সেখানে আইটেমটি ফিট করে কিনা তা দেখুন।

আমি জানি না যে তাদের "বাল্কনেস" (যাকে আমি nSlotsRequired = nRowsReq * nColsRec বলে) এর উপর ভিত্তি করে আইটেমগুলি অর্ডার করা কাজ করবে, কারণ আপনার কাছে একটি 2x2 এবং 1x4 আইটেম রয়েছে, তাদের একই বাল্কনেস রয়েছে তবে বিভিন্ন আকার রয়েছে এবং থাকবে পরবর্তী আইটেমগুলি কীভাবে যাবে সে সম্পর্কে একটি আলাদা প্রভাব। সুতরাং ...: /

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


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

ঠিক এই কারণেই আমি স্থির করেছিলাম (এই দিনগুলিতে আরও সাধারণ) এক-স্লট-প্রতি-আইটেম ধরণের ইনভেন্টরি মডেলের পরিবর্তে। আমি আশা করি আপনার জন্য আমার কোনও সমাধান
হত

@ ব্লুরাজা-ড্যানিপ্লুঘুফুট আমি ভাবছি আইটেমগুলি নির্দিষ্ট আকারের মধ্যে সীমাবদ্ধ থাকলে কোনও সহজ / দক্ষ আলগোরিদম পাওয়া যায় কিনা?
কংগ্রেসবঙ্গাস

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

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

উত্তর:


8

এটি ন্যাপস্যাক সমস্যার একটি প্রকরণ। যেমন ড্যানি ফ্লুঘুফুট উল্লেখ করেছেন এটি এনপি-সম্পূর্ণ। মানে যে লিনিয়ার সময় এটি সমাধান করা যায় না, যদি আমি সঠিকভাবে মনে করি।

তবে আপনি কয়েকটি পদক্ষেপে এটি সমাধান করার চেষ্টা করতে পারেন। এটি মূলত বাছাই করার সমস্যা।

আমি প্রতিটি আইটেমের 'বাল্কনেস' গণনা করে শুরু করব: এটি বেশ কয়েকটি উপায়ে গণনা করা যেতে পারে:

  • বাল্কনেস = সর্বোচ্চ (দৈর্ঘ্য, প্রস্থ);

  • বাল্কনেস = দৈর্ঘ্য * প্রস্থ

  • বাল্কনেস = স্কয়ার্ট (দৈর্ঘ্য * প্রস্থ)

তারপরে ইনভেন্টরিতে প্রথমে সর্বোচ্চ স্কোর সহ আইটেমগুলি স্থাপন করা শুরু করুন। যেহেতু তারা সম্ভবত পরে অবশিষ্ট জায়গার সাথে ফিট করবে না। ছোট আইটেম সবসময় ফিট হবে।

আপনার স্থাপনার কৌশলটির জন্য আপনার একটি হিউরিস্টিক (শিক্ষিত অনুমানের জন্য অভিনব নাম ;-)) প্রয়োজন। উপরের-বাম থেকে প্রথম ফ্রি স্লটে আইটেমগুলি ফিট করার চেষ্টা করার মতো কিছু বা কিছু।

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

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


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

upvote জন্য THX। হ্যাঁ জায়গুলি সম্ভাব্য অসীম হওয়া উচিত নয় সুতরাং ঘাতক অ্যালগরিদমগুলি সূক্ষ্মভাবে কাজ করা উচিত ^^
স্টিফেন

@ স্ম4: এক হাজার সাধারণত এনপি-সম্পূর্ণ সমস্যাগুলির জন্য একটি বিশাল সংখ্যা number মনে রাখবেন, এই সমস্যাগুলি হ'ল (2 ^ n) - এমনকি মাত্র 2 comp 64 গণনাযোগ্যভাবে অক্ষম!
ব্লুরাজা - ড্যানি পিফ্লুঘুফুট

3

হাহাহা, @ যে কেউ সাহায্য করেছেন, ধন্যবাদ। আমি অবশেষে এটি সমাধান করতে পরিচালিত। আমি মূলত যা করেছি তা এখানে:

IEnumerator AddItem_Sorted (Item item)
  1. তুচ্ছ অবস্থা: আমাদের যদি আইটেমটি মানানসই করার জন্য ন্যূনতম রিকোয়ার্ডস্লটস পাওয়া যায় তবে তা পরীক্ষা করে দেখুন ...
  2. আমরা সমস্ত ব্যাগ খালি করব - আইটেমগুলি স্থানধারক (তালিকা বা কিছু) রেখে দিচ্ছি
  3. এটি যথাযথভাবে অনুভূত আকারে নিশ্চিত তা নিশ্চিত করে, এটি বেশিরভাগ শেষ স্লট / জায়গায় এটি উপযুক্ত হতে পারে এমন স্থানে আইটেম যুক্ত করুন
  4. প্রথম ফিট হ্রাস হ্রাসকারী আলগো ব্যবহার করে আমরা আমাদের বাকী আইটেম যুক্ত করব
  5. যোগ করার সময়, আমরা যে সূচকটি যুক্ত করছি তা স্মরণে রাখার জন্য গতিশীল প্রোগ্রামিং (স্মৃতিচারণ) ব্যবহার করব (পরবর্তী উপলব্ধ স্লটের সূচি)
  6. যদি সমস্ত সংযোজন সাফল্য হয়, আমরা আমাদের পছন্দসই আইটেমটি ফিট করতে পেরেছি এবং কোনওরকমে ব্যাগটিকে বড় থেকে ছোট আইটেমগুলিতে বাছাই করুন
  7. যদি আমরা সমস্ত আইটেম যুক্ত করতে না পারি, এর অর্থ এই যে এটি কোনও সমাধানযোগ্য পরিস্থিতি ছিল না, তাই আমাদের ব্যাগটি পূর্বের অবস্থায় নিয়ে যেতে হবে
  8. এটি করার একটি উপায়, (আমার মনের দিক থেকে বেরিয়ে এসেছিল), ব্যাগের এই অবস্থাটি সম্পূর্ণ প্রতিপক্ষের আগে অনুলিপি করা, এবং যদি এটি ব্যর্থ হয় তবে আমরা পূর্ববর্তী অবস্থায় চলে যাই, বা আরও ভাল, ' ব্যাগটি খালি করে, আমরা প্রতিটি আইটেমটি কোথায় ছিল তা মুখস্থ করে রাখি, যাতে অপশন ব্যর্থ হলে আমরা সেগুলি ফিরিয়ে আনব - অ্যাড আইটেম (আইটেম, সূচক) ব্যবহার করে - পূর্ববর্তী সূচকগুলিতে :)
  9. এই পুরো প্রক্রিয়াটিতে সময় লাগতে পারে, তাই আমরা আমার মনোরম ফলন ব্যবহার করে আলাদা ফ্রেমে লোড ভাগ করতে পারি :)
  10. সম্পন্ন ! \ এম / (@ ~ 9: 00)

হালনাগাদ:

  1. আমি একটি অ্যারে তৈরি করেছি যা সমস্ত সংযুক্ত আইটেমের সূচকগুলি সঞ্চিত করে, সেই পথে আমাকে যেতে হবে না এবং দখলকৃত স্লটগুলি আমার জন্য বিনামূল্যে - সন্ধান করতে হবে - বড় উত্সাহ।

  2. শেষ স্লটে যোগ করার দরকার নেই, বাস্তবে কখনও কখনও এটি সেভাবে কার্যকর নাও হতে পারে, আমি বাকি আইটেমগুলিতে অপরিহার্য আইটেমটি যুক্ত করেছি এবং তাদের সাথে এটি বাছাই করেছি।

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


আপনাকে স্বাগতম! :) আমি নীলরাজাকে ধন্যবাদ জানাতে চাই - ডেনি ফ্লুঘুফুট বিন প্যাকিংয়ের জন্য, বাল্কনেস আইডিয়াটির জন্য @ স্টিফেন এবং তার গতিশীল প্রোগ্রামিং বক্তৃতা এবং সমস্ত বক্তৃতার জন্য রিচার্ড বাকল্যান্ডকে।
vexe
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.