অজানা বাধা সহ গ্রিডে প্রতিটি পৌঁছনীয় স্থান পরিদর্শন করার কার্যকর উপায় কী?


13

আমি অন্বেষণ ব্যবহার করে মোটামুটি মোটা 2D গ্রিড জায়গাতে বাধাগুলির একটি মানচিত্র তৈরি করার চেষ্টা করছি। আমি একটি স্থান থেকে একটি সংলগ্ন স্থানে যাওয়ার চেষ্টা করে বাধাগুলি সনাক্ত করি এবং যদি এটি ব্যর্থ হয় তবে গন্তব্যস্থলে কোনও বাধা আছে (এই সমস্যাটিতে কোনও রেঞ্জফাইন্ডিং সেন্সরের ধারণা নেই)।

উদাহরণস্বরূপ গ্রিড http://www.erider.net/resources/general/prim_frmwrks/images/asses/asses_y3_5d_3.gif (উদাহরণস্বরূপ)

সমস্ত অ্যাক্সেসযোগ্য স্কয়ারগুলি পরিদর্শন করা হলে প্রক্রিয়াটি সম্পূর্ণ হয়। অন্য কথায়, কিছু জায়গাগুলি চারপাশে থাকার কারণে তাদের বাধা না থাকলেও পুরোপুরি অ্যাক্সেসযোগ্য। এটি প্রত্যাশিত

সবচেয়ে সহজ ক্ষেত্রে, আমি একটি ডিএফএস অ্যালগরিদম ব্যবহার করতে পারি , তবে আমি আশঙ্কা করছি যে এটি সম্পূর্ণ হতে খুব বেশি সময় লাগবে - রোবট নতুন অঞ্চল অনুসন্ধানের চেয়ে ব্যাকট্র্যাকিংয়ে আরও বেশি সময় ব্যয় করবে। অ্যাক্সেসযোগ্য স্কোয়ারগুলিতে পৌঁছানোর চেষ্টা করার সময় এটি বিশেষত সমস্যাযুক্ত হয়ে উঠবে বলে আশা করি, কারণ রোবটটি প্রতিটি বিকল্প নিঃশেষ করবে।

আরও পরিশীলিত পদ্ধতিতে যথাযথ জিনিসটি বোস্ট্রোফিডন কোষের পচন মনে হয় ।
বুস্ট্রোফিডন কোষের পচন

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

আমি কীভাবে এই গ্রিডটি দক্ষতার সাথে দেখতে পারি (মানচিত্র)? যদি এটি বিদ্যমান থাকে তবে আমি এমন একটি অ্যালগরিদম চাই যা গ্রিড স্কোয়ারের মোট সংখ্যার ( যেমন একটি গ্রিডের জন্য চেয়ে ভাল চেয়ে ভাল পারফর্ম করে ।O(n2)( এন 4 ) এন nO(n4)nn


খুব আকর্ষণীয় সমস্যা। স্বচ্ছতার জন্য, আপনি কোনও প্রদত্ত কক্ষে খুব কমবার পুনরাবৃত্তি হিসাবে "দক্ষ" সংজ্ঞায়িত করছেন?
ডেমনমেকার

এটি বলার এক উপায় হতে পারে। সত্যই, আমি গ্রিড স্কোয়ারের মোট সংখ্যার সাথে সম্মতিযুক্ত বা এর চেয়েও খারাপ আলগোরিদিমগুলি এড়াতে চাইছি । O(n2)
আয়ান

আমার ধারণা এটি সিএনসি মেশিন সফ্টওয়্যার দ্বারা सामना করা একই ধরণের সমস্যা যা কাটা সরঞ্জামের সাহায্যে পরিদর্শন করে উপাদানটি সরিয়ে ফেলতে হবে।
রকেটম্যাগনেট

@ রকেটম্যাগনেট: একেবারেই নয়, যেহেতু সিএনসি মেশিনটি "বাধা" একটি অগ্রাধিকার জানে , যেখানে আমি সরানোর সময় এগুলি সনাক্ত করি।
ইয়ান

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

উত্তর:


11

বুস্টোফিডন কোষের ক্ষয়টি এমন একটি পরিবেশকে কেবল এমন পরিবেশে উপ-বিভাজন করে যা কোনও দক্ষতার সাথে একটি বুথরোড্ডন পথ দ্বারা coveredাকা যায়। একটি ট্র্যাপিজয়েডাল পচন ঘটায় এবং লাইন-সুইপ অ্যালগরিদম ব্যবহার করে সম্পন্ন করা যায়। [চয়েসট 2000], এই ওয়েব সাইটটি দেখুন , বা (আমি প্রস্তাব দিই!) ​​মার্ক ডি বার্গ, এবং এর দুর্দান্ত বই "কম্পিউটেশনাল জ্যামিতি" দেখুন। আল, প্রয়োজনীয় ডেটা স্ট্রাকচার এবং অ্যালগরিদমের সম্পূর্ণ বিবরণের জন্য।

চয়েসেট, হাওয়ে "জ্ঞাত স্পেসের কভারেজ: দ্য বাস্ট্রোফিডন সেলুলার পচন" স্বায়ত্তশাসিত রোবটস , ২০০০।


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

কোডে এটি সম্পাদন করার জন্য আপনার কেবল একটি লাইন-সেগমেন্ট ছেদ পরীক্ষা, প্রান্তগুলির একটি বাছাই করা তালিকা এবং শীর্ষে বাছাইয়ের তালিকা প্রয়োজন need

  1. বাম থেকে ডান ক্রমে প্রতিটি শীর্ষস্থানীয় থেকে ,vi
  2. একটি উল্লম্ব লাইন তৈরি করুন প্রতিটি , প্রথম প্রান্ত পর্যন্ত বাড়ানো বা প্রান্তবিন্দু এটা ছেদ করেlivi
  3. প্রতিটি চৌরাস্তায় একটি নতুন শীর্ষবিন্দু তৈরি করুন।

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


  1. প্রারম্ভিক অবস্থান থেকে, আপনি উপরের-বাম কোণে না পৌঁছা পর্যন্ত উপরে এবং বাম দিকে যান। আপনি যদি প্রথমে কোনও প্রতিবন্ধকতার মুখোমুখি হন তবে আপনাকে অবশ্যই এটির চারপাশে ভ্রমণ করতে হবে। আপনি জানেন যে কিছু যদি অবরুদ্ধ করা যায় (বাধা এবং সরানো) যায় an

  2. উপরের বাম দিক থেকে, সীমানার মুখোমুখি না হওয়া পর্যন্ত ডানদিকে যান move তারপরে নীচে এবং বাম দিকে সরে যান (আমরা পুরো জায়গার বুথরোড্ডন করছি)।

  3. আপনি যখন বাম-ডান লাইনে থাকেন এবং কোনও প্রতিবন্ধকতার মুখোমুখি হন, আপনার কাছে দুটি বিকল্প রয়েছে। (i) আমরা coverেকে দেওয়ার চেষ্টা করছি এমন বাম-ডান লাইনে পৌঁছানো অবধি অবনত হতে পারি then (ii), আমরা বাধা পেরিয়ে নতুন পরিস্থিতিটি untilেকে দিতে পারি যতক্ষণ না আমরা আমাদের বাধা পেরিয়ে আমাদের এই পথটি খুঁজে বার করি এবং এই পরিস্থিতিতে শেষ না করি। আমি বর্ণনা করব।

বাম দিকে, আমরা "লাইন "টিতে ফিরে না যেতে পারা অবধি বাধাটিকে ঘুরিয়ে রেখেছি যা আমরা অনুসরণ করার চেষ্টা করছিলাম। ডানদিকে, আমরা বাধাটির একপাশে (ছোট) অঞ্চলটি coveringেকে রাখি।

প্রথম পদ্ধতির সুবিধাটি হ'ল আপনি কীভাবে কীভাবে তাড়াবেন সে সম্পর্কে সিদ্ধান্ত নেওয়ার আগে আপনি সর্বদা বাধাটিকে পুরোপুরি নির্ধারণ করেন, এভাবে আপনি আরও ছোট পথটি গ্রহণ করতে পারেন। দ্বিতীয় পদ্ধতির সুবিধা হ'ল আপনাকে কোনওভাবেই বাধা অতিক্রম করতে হবে না, আপনি যে অঞ্চলে রয়েছেন তা coverাকতে আপনি কেবল এগিয়ে যেতে পারেন।

নোট করুন যে এটি আপনার বুস্ট্রোফিডনের পচনটিকে একটি অনলাইন উপায়ে সংজ্ঞায়িত করে : আপনি বাধা বা বাধার মধ্যে এবং সীমানার মধ্যে অঞ্চলটি কভার করেন।

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

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

এই কারণেই আমি জিজ্ঞাসা করেছি আপনি পরিবেশে কোথায় ছিলেন বা বিশ্বব্যাপী পরিকল্পনা পরিকল্পনা করতে পারেন সে সম্পর্কে আপনার কিছু ধারণা ছিল কিনা। তবে অনলাইন বনাম অফলাইন আলোচনা এবং এর জন্য সর্বোত্তম অ্যালগরিদম আপনি যা চেয়েছিলেন তা নয়।


আপডেট: আমাকে ছবিগুলি মুছে ফেলতে হয়েছিল (https নয়) এবং এটি পোস্ট করব যা প্রায়শই বাস্তব বাস্তব অ্যাপ্লিকেশনগুলিতে ব্যবহৃত হয়। http://www.cs.cmu.edu/~motionplanning/papers/sbp_papers/integrated1/yamauchi_frontiers.pdf


কেবলমাত্র বুস্ট্রোফিডনের পচন অ্যালগরিদমের একটি বিবরণ (সাধারণ ভাষায়) সন্ধান করা যথেষ্ট। এটি ব্যর্থ হ'ল, অনুরূপ পারফরম্যান্স সহ অ্যালগরিদমের একটি সাধারণ বিবরণ ভাল।
আয়ান

আমি একটি সাধারণ বুস্ট্রোফিডন পচন উদাহরণ যুক্ত করেছি।
জোশ ভান্ডার হুক

3

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

দক্ষতা মোটামুটি যুক্তিসঙ্গত বলে মনে হয়।


আমার মত, আপনি সীমান্ত-ভিত্তিক অনুসন্ধান আবিষ্কৃত হয়েছে cs.cmu.edu/~motionplanning/papers/sbp_papers/integrated1/... এবং এটি প্রকৃতপক্ষে ভাল কাজ করে
smirkingman
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.