কৃত্রিম বুদ্ধিমত্তায় ডিএফএস, এ * অনুসন্ধান সম্পর্কিত গ্রাফ অনুসন্ধান এবং বৃক্ষ অনুসন্ধানের সংস্করণগুলির মধ্যে পার্থক্য কী ?
কৃত্রিম বুদ্ধিমত্তায় ডিএফএস, এ * অনুসন্ধান সম্পর্কিত গ্রাফ অনুসন্ধান এবং বৃক্ষ অনুসন্ধানের সংস্করণগুলির মধ্যে পার্থক্য কী ?
উত্তর:
বিদ্যমান উত্তরগুলি থেকে বিচার করলে মনে হয় এই ধারণাটি নিয়ে অনেক বিভ্রান্তি রয়েছে।
গাছের অনুসন্ধান এবং গ্রাফ অনুসন্ধানের মধ্যে পার্থক্যটি আসলে গ্রাফটি গাছ বা সাধারণ গ্রাফ কিনা তা মূলত মূল নয়। এটি সর্বদা ধরে নেওয়া হয় যে আপনি একটি সাধারণ গ্রাফ নিয়ে কাজ করছেন। পার্থক্যটি ট্র্যাভার্সাল প্যাটার্নের মধ্যে রয়েছে যা গ্রাফের মাধ্যমে অনুসন্ধান করতে ব্যবহৃত হয় যা গ্রাফ আকারের বা গাছের আকারের হতে পারে।
আপনি যদি গাছের আকারের সমস্যা নিয়ে কাজ করে থাকেন তবে উভয় আলগোরিদম রূপই সমান ফলাফলের দিকে নিয়ে যায়। সুতরাং আপনি সহজ ট্রি অনুসন্ধান বৈকল্পিক চয়ন করতে পারেন।
আপনার বেসিক গ্রাফ অনুসন্ধান অ্যালগরিদম নিম্নলিখিত মত কিছু দেখায়। একটি স্টার্ট নোড start
, নির্দেশিত প্রান্ত successors
এবং goal
লুপের শর্তে ব্যবহৃত একটি স্পেসিফিকেশন সহ। open
মেমোরিতে নোডগুলি ধারণ করে, যা বর্তমানে বিবেচনাধীন, উন্মুক্ত তালিকা । নোট করুন যে নিম্নলিখিত সিউডো কোডটি প্রতিটি ক্ষেত্রে (2) সঠিক নয়।
open <- []
next <- start
while next is not goal {
add all successors of next to open
next <- select one node from open
remove next from open
}
return next
আপনি কীভাবে প্রয়োগ করেন তার উপর নির্ভর করে আপনি select from open
অনুসন্ধান অ্যালগরিদমগুলির বিভিন্ন ধরণের যেমন ডিপথ-ফার্স্ট অনুসন্ধান (ডিএফএস) (নতুন উপাদান বেছে নিন), প্রস্থের প্রথম অনুসন্ধান (বিএফএস) (প্রাচীনতম উপাদানটি বেছে নিন) বা ইউনিফর্ম ব্যয় অনুসন্ধান (সর্বনিম্ন পথ ব্যয়ের সাথে উপাদান বাছাই করুন) পান ), সর্বনিম্ন ব্যয় এবং হিউরিস্টিক মান সহ নোড নির্বাচন করে জনপ্রিয় এ-তারকা অনুসন্ধান ।
উপরে বর্ণিত অ্যালগরিদমকে আসলে গাছের সন্ধান বলে । এটি যদি একাধিকবার অন্তর্নিহিত সমস্যার গ্রাফের একটি রাজ্য পরিদর্শন করে, যদি সেখানে প্রারম্ভিক অবস্থার মূলের একাধিক নির্দেশিত পথ থাকে। কোনও রাজ্যে এটি নির্দেশিত লুপের উপরে থাকলে অসীম সংখ্যক বার পরিদর্শন করাও সম্ভব। তবে প্রতিটি দর্শন আমাদের অনুসন্ধান অ্যালগরিদমের দ্বারা উত্পন্ন গাছের একটি ভিন্ন নোডের সাথে মিলে যায়। এই আপাত অদক্ষতা কখনও কখনও চাওয়া হয়, যেমন পরে ব্যাখ্যা করা হয়েছে।
যেমনটি আমরা দেখেছি, বৃক্ষ অনুসন্ধানে একাধিকবার একটি রাষ্ট্র ভ্রমণ করতে পারে। এবং এর মতো এটি এই রাজ্যের পরে পাওয়া "সাব ট্রি" কয়েকবার অনুসন্ধান করবে, যা ব্যয়বহুল হতে পারে। গ্রাফ অনুসন্ধান সমস্ত বর্ধিত রাজ্যগুলির একটি বদ্ধ তালিকায় রাখার মাধ্যমে এটি সংশোধন করে । যদি নতুন সন্ধান প্রাপ্ত উত্তরসূরি next
ইতিমধ্যে পরিচিত হয় তবে এটি খোলা তালিকায় sertedোকানো হবে না:
open <- []
closed <- []
next <- start
while next is not goal {
add next to closed
add all successors of next to open, which are not in closed
remove next from open
next <- select from open
}
return next
আমরা লক্ষ্য করেছি যে গ্রাফ অনুসন্ধানের জন্য আরও মেমরি দরকার, কারণ এটি পরিদর্শন করা সমস্ত রাজ্যের উপরে নজর রাখে। এটি ছোট ওপেন তালিকার দ্বারা ক্ষতিপূরণ দিতে পারে, যার ফলশ্রুতিতে অনুসন্ধানের দক্ষতা উন্নত হয়।
বাস্তবায়নের কয়েকটি পদ্ধতি select
অনুকূল সমাধানগুলি ফেরত দেওয়ার গ্যারান্টি দিতে পারে - অর্থাত্ একটি সংক্ষিপ্ততম পথ বা সর্বনিম্ন ব্যয় সহ একটি পাথ (প্রান্তগুলির সাথে সংযুক্ত ব্যয় সহ গ্রাফের জন্য)। এটি মূলত যখনই নোডগুলি বাড়ানো ব্যয়ের ক্রম হিসাবে প্রসারিত করা হয় বা যখন ব্যয়টি কোনও ননজারো পজিটিভ ধ্রুবক হয় তখন এটি মূলত হোল্ড করে। এই ধরণের নির্বাচনকে কার্যকর করে এমন একটি সাধারণ অ্যালগরিদম হ'ল ইউনিফর্ম ব্যয় অনুসন্ধান , বা যদি পদক্ষেপের ব্যয়গুলি অভিন্ন হয়, বিএফএস বা আইডিডিএফএস । আইডিডিএফস বিএফএসের আক্রমণাত্মক মেমরির খরচ এড়িয়ে যায় এবং ধাপের আকারটি ধ্রুবক থাকে তবে সাধারণত অজ্ঞাত অনুসন্ধানের জন্য প্রস্তাবিত হয় (ওরফে ব্রুট ফোর্স)।
এছাড়াও (খুব জনপ্রিয়) একটি * ট্রি অনুসন্ধান অ্যালগরিদম যখন কোনও গ্রহণযোগ্য হিউরিস্টিকের সাথে ব্যবহার করা হয় তখন একটি অনুকূল সমাধান সরবরাহ করে । একটি * গ্রাফ অনুসন্ধান অ্যালগরিদম তবে কেবলমাত্র এই গ্যারান্টিটি তৈরি করে যখন এটি একটি সামঞ্জস্যপূর্ণ (বা "একঘেয়ে") বংশগতি (গ্রহণযোগ্যতার চেয়ে শক্তিশালী শর্ত) ব্যবহার করে।
সরলতার জন্য, উপস্থাপিত কোডটি তা করে না:
state
বা না node
তা প্রসঙ্গে নির্ভর করে। তবে সমস্যার গ্রাফ শীর্ষকে এবং ট্র্যাভার্সাল গ্রাফের জন্য ব্যবহার করা উত্তরের স্পষ্টতাকে অবশ্যই উন্নত করতে পারে। আমি শীঘ্রই এটি আবার লিখতে চেষ্টা করব। ধন্যবাদ. state
node
একটি গাছ গ্রাফের একটি বিশেষ ক্ষেত্রে, তাই সাধারণ গ্রাফের জন্য যা কিছু কাজ করে তা গাছের জন্য কাজ করে। একটি গাছ একটি গ্রাফ যেখানে প্রতিটি জোড় নোডের মধ্যে অবিকল একটি পথ থাকে। এটি বোঝায় যে এটি কোনও চক্র ধারণ করে না, যেমন পূর্বের উত্তরে বলা হয়, তবে চক্রবিহীন একটি নির্দেশিত গ্রাফ (একটি ডিএজি, নির্দেশিত অ্যাসাইক্লিক গ্রাফ) অগত্যা একটি গাছ নয়।
তবে, যদি আপনি জানেন যে আপনার গ্রাফের কিছু বিধিনিষেধ রয়েছে, উদাহরণস্বরূপ এটি একটি গাছ বা একটি ডিএজি, আপনি সাধারণত অনিবন্ধিত গ্রাফের চেয়ে কিছু বেশি দক্ষ অনুসন্ধান অ্যালগরিদম পেতে পারেন। উদাহরণস্বরূপ, সম্ভবত এটি * বা এটির অ-হিউরিস্টিক কাউন্টার "ডিজকস্ট্রার অ্যালগোরিদম" গাছের উপরে ব্যবহার করার পক্ষে খুব বেশি অর্থবোধ করে না (যেখানে কোনওভাবেই বেছে নেওয়ার জন্য কেবল একটি পথ রয়েছে, যা আপনি ডিএফএস বা বিএফএস দ্বারা সন্ধান করতে পারেন) বা একটি ডিএজে (যেখানে টপোলজিকাল বাছাইয়ের মাধ্যমে প্রাপ্ত অর্ডিকোঠাকে বিবেচনা করে একটি সর্বোত্তম পথের সন্ধান পাওয়া যায়)।
হিসাবে নির্দেশ বনাম undirected, একটি undirected গ্রাফ একটি নির্দেশ এক, যথা ক্ষেত্রে যদি থেকে একটি প্রান্ত (লিঙ্ক, রূপান্তরটি) যে রুল "অনুসরণ করে একটি বিশেষ ক্ষেত্রে দেখা যায় তোমার দর্শন লগ করা থেকে বনাম রয়েছে থেকে একটি প্রান্ত বনাম করতে তোমার দর্শন লগ করা ।
আপডেট : নোট করুন যে আপনি যা যত্নশীল তা যদি গ্রাফের কাঠামোর পরিবর্তে অনুসন্ধানের ট্র্যাভার্সাল প্যাটার্ন হয় তবে এটি উত্তর নয়। দেখুন, উদাহরণস্বরূপ, @ জিগিস্টারের উত্তর।
গ্রাফ এবং গাছের মধ্যে পার্থক্য কেবল চক্র । একটি গ্রাফে চক্র থাকতে পারে, একটি গাছ পারে না। সুতরাং আপনি যখন একটি গাছে একটি অনুসন্ধান অ্যালগরিদম বাস্তবায়ন করতে যাচ্ছেন, তখন আপনাকে চক্রের অস্তিত্ব বিবেচনা করার দরকার নেই, তবে একটি স্বেচ্ছাসেবক গ্রাফ নিয়ে কাজ করার সময় আপনার সেগুলি বিবেচনা করা দরকার। যদি আপনি চক্রগুলি পরিচালনা করেন না, তবে অ্যালগরিদম শেষ পর্যন্ত একটি অসীম লুপ বা একটি অন্তহীন পুনরাবৃত্তিতে পড়তে পারে।
ভাবার আরেকটি বিষয় হ'ল আপনি যে গ্রাফটি ব্যবহার করছেন তার দিকনির্দেশক বৈশিষ্ট্য। বেশিরভাগ ক্ষেত্রে আমরা এমন গাছগুলি নিয়ে কাজ করি যা প্রতিটি প্রান্তে পিতামাতার সাথে সম্পর্কের প্রতিনিধিত্ব করে। একটি ডিএজি (নির্দেশিত অ্যাসাইক্লিক গ্রাফ) এছাড়াও অনুরূপ বৈশিষ্ট্যগুলি দেখায়। তবে দ্বি-দিকনির্দেশক গ্রাফগুলি আলাদা। দ্বি-দিকনির্দেশক গ্রাফের প্রতিটি প্রান্ত দুটি প্রতিবেশী প্রতিনিধিত্ব করে। সুতরাং এই দুটি ধরণের গ্রাফের জন্য অ্যালগরিদমিক পদ্ধতির কিছুটা আলাদা হওয়া উচিত।
গ্রাফ বনাম ট্রি
তবে এআই গ্রাফ-সন্ধান বনাম বৃক্ষ অনুসন্ধানের ক্ষেত্রে
গ্রাফ অনুসন্ধানে একটি ভাল সম্পত্তি রয়েছে যা যখনই অ্যালগোরিদম একটি নতুন নোড অন্বেষণ করে এবং এটি পর্যালোচনা হিসাবে চিহ্নিত করে, "ব্যবহৃত অ্যালগরিদম নির্বিশেষে", অ্যালগরিদম সাধারণত অন্যান্য নোডগুলি সন্ধান করে যা বর্তমান নোড থেকে পৌঁছনীয়।
উদাহরণস্বরূপ 3 টি উল্লম্ব AB এবং C সহ নিম্নলিখিত গ্রাফটি বিবেচনা করুন এবং নিম্নলিখিত প্রান্তগুলি বিবেচনা করুন
এবি, বিসি এবং সিএ, আচ্ছা সি থেকে এ পর্যন্ত একটি চক্র রয়েছে,
এবং যখন ডিএফএস এ থেকে শুরু হবে, এ একটি নতুন রাষ্ট্র বি উত্পন্ন করবে, বি একটি নতুন রাজ্য সি উত্পন্ন করবে, তবে সি যখন অন্বেষণ করা হবে তখন একটি এলগোরিদম একটি নতুন রাষ্ট্র এ উত্পন্ন করার চেষ্টা করবে তবে এ ইতিমধ্যে পরিদর্শন করা হবে সুতরাং এটি উপেক্ষা করা হবে। কুল!
তবে গাছের কী হবে? ভাল গাছ অ্যালগোরিদম পরিদর্শনকৃত নোডকে দর্শন হিসাবে চিহ্নিত করে না, তবে গাছগুলিতে চক্র থাকে না, কীভাবে এটি অসীম লুপগুলিতে উঠবে?
এই বৃক্ষটি 3 টি অনুভূমিক সহ বিবেচনা করুন এবং নিম্নলিখিত প্রান্তগুলি বিবেচনা করুন
এ - বি - সি মূল দিকে এ, নীচের দিকে। এবং ধরা যাক আমরা ডিএফএস অ্যালগরিদম ব্যবহার করছি
এ একটি নতুন রাজ্য বি তৈরি করবে, বি দুটি রাজ্য এ এবং সি উত্পন্ন করবে, কারণ গাছগুলি "এটি অন্বেষণ করা হলে একটি নোডকে চিহ্নিত করে চিহ্নিত করে না" সুতরাং ডিএফএস অ্যালগরিদম আবার এটিকে অন্বেষণ করবে, এভাবে একটি নতুন রাষ্ট্র বি তৈরি করবে, এভাবে আমরা একটি অসীম লুপ পেয়ে যাচ্ছি।
তবে আপনি কি লক্ষ্য করেছেন, আমরা অনির্দেশিত প্রান্তগুলিতে কাজ করছি অর্থাৎ এবি এবং বিএর মধ্যে একটি সংযোগ রয়েছে। অবশ্যই এটি একটি চক্র নয়, কারণ চক্রটি সূচিত করে যে শীর্ষটি অবশ্যই => = 3 হওয়া উচিত এবং সমস্ত এবং প্রথম এবং শেষ নোড ব্যতীত সমস্ত শিখাগুলি পৃথক।
এসটি এ-> বি-> এ-> বি-> এ এটি চক্র নয় কারণ এটি সাইক্লিং সম্পত্তি>> = ৩ লঙ্ঘন করে তবে প্রকৃতপক্ষে এ-> বি-> সি-> এ একটি চক্র> = ৩ টি স্বতন্ত্র নোড যাচাই করা হয়েছে, প্রথম এবং শেষ নোড একই চেক করা হয়।
আবার গাছের প্রান্তগুলি বিবেচনা করুন, এ-> বি-> সি-> বি-> এ অবশ্যই এটি চক্র নয়, কারণ দুটি বিএস রয়েছে, যার অর্থ সমস্ত নোড আলাদা নয়।
সর্বশেষে আপনি একই নোড দু'বার অন্বেষণ প্রতিরোধ করতে একটি ট্রি-অনুসন্ধান আলগোরিদিম প্রয়োগ করতে পারেন। তবে এর পরিণতিও রয়েছে।
সহজ কথায়, গাছের মধ্যে চক্র থাকে না এবং গ্রাফের মতো যেখানে থাকে। সুতরাং যখন আমরা অনুসন্ধান করি তখন আমাদের গ্রাফগুলিতে চক্র এড়ানো উচিত যাতে আমরা অসীম লুপগুলিতে না পড়ি।
আরেকটি দিক হ'ল গাছের সাধারণত এক ধরণের টপোলজিকাল বাছাই বা বাইনারি অনুসন্ধান গাছের মতো সম্পত্তি থাকে যা গ্রাফের তুলনায় অনুসন্ধানটিকে এত দ্রুত এবং সহজ করে তোলে।