جستجوی عمق اول ژرفایش تکراری
جستجوی عمق اول ژرفایش تکراری (به انگلیسی: Iterative deepening depth-first search)، (اختصاری IDDFS) یا جستجوی عمق-اول با ژرفایش تکراری یا جستجوی عمق-اول تعمیق تکراری یک استراتژی جستجوی فضای حالت است که در آن یک جستجوی عمق محدود، بارها و بارها اجرا میشود که با هر تکرار حد عمق را افزایش میدهد، تا زمانی که به مقدارِ D -عمق کم عمقترین حالت-نهایی برسد. آیدیدیافاس، مشابه جستجوی اول سطح است با این تفاوت که حافظهٔ کمتری را اشغال میکند؛ در هر تکرار، گرههایی را که در درخت جستجو در همان سطح از جستجوی عمق اول هستند را میبیند، اما مرتبهٔ تجمعی برای هر گره که اولین بار دیده میشود، بدون هرس در نظر بگیرید-، اول سطح است.
رده | الگوریتم جستجو |
---|---|
ساختمان داده | درخت (ساختار داده)، گراف (ساختار داده) |
کارایی بدترین حالت | |
پیچیدگی فضایی |
الگوریتم برای گرافهای جهتدار
شبهکد زیر آیدیدیافاس را نشان میدهد که براساس یک دیافاس محدودعمق بازگشتی (به نام DLS) برای نمودارهای جهتدار پیادهسازی شدهاست. این پیادهسازی آیدیدیافاس برای گرههایی که قبلاً بازدید شدهاند حساب نمیکند و بنابراین برای گرافهای بدونجهت کارنمیکند.
function IDDFS(root) is for depth from 0 to ∞ do found, remaining ← DLS(root, depth) if found ≠ null then return found else if not remaining then return null function DLS(node, depth) is if depth = 0 then if node is a goal then return (node, true) else return (null, true) (Not found, but may have children) else if depth > 0 then any_remaining ← false foreach child of node do found, remaining ← DLS(child, depth−1) if found ≠ null then return (found, true) if remaining then any_remaining ← true (At least one node found at depth, let IDDFS deepen) return (null, any_remaining)
اگر گره هدف پیدا شود، DLS بازگشتی را بازمیکند و بدون تکرار بیشتر بازمیگردد. در غیر این صورت، اگر حداقل یک گره در آن سطح از عمق وجود داشته باشد، پرچم باقی مانده به آیدیدیافاس اجازه ادامه کار را میدهد.
۲-رتبیک به عنوان مقدار بازگشتی برای سیگنال آیدیدیافاس برای ادامه عمیقشدن یا توقف مفید هستند، در صورتی که عمق درخت و عضویت هدف از قبل ناشناخته باشد. راه حل دیگری میتواند به جای آن از مقادیر نگهبان برای نمایش نتایج سطح پیدا نشده یا باقیمانده استفاده کند.
مشخصات
جستجوی عمق اول ژرفایش تکراری کارایی-فضایی الگوریتم جستجوی عمق-اول و الگوریتم جستجوی سطح اول (وقتی ضریب انشعاب متناهی است)، را ترکیب میکند. این روش وقتی بهینه است که یک تابع هزینهٔ مسیر بک تابع غیرنزولی از عمق گره باشد. اگر راه حلی وجود داشته باشد، مسیر راه حلی با کمترین کمان را پیدا میکند.
پیچیدگی فضا در این روش از
مهمترین خصوصیت آیدیدیافاس در جستجوی درخت بازی این است که روشهای پیشین جستجو سعی میکردند با استفاده از توابع شهودی و ابتکار جستجو را انجام دهند، مانند چابکیابی قاتل (killer heuristic) یا هرس آلفا-بتا، بهطوریکه تخمین بهتر از گرهها در آخرین جستجوی عمیق میتوانست اتفاق بیفتد، و جستجو از آن جایی که در زمان کمتری انجام میشود سریع تر پیش خواهد رفت.
دومین خصوصیت این روش حساسیت آن به الگوریتم میباشد. از آن جایی که تکرارهای اولیه از مقادیر کوچک d استفاده میکردند بسیار سریع پایان میپذیرفتند. این به الگوریتم این اجازه را میدهد که نشانههای جواب را تقریباً در هر لحظه با پالایش، درحالیکه d کاهشمییابد عرضه کند. در هنگام استفاده از یک مدل تعاملی مثل یک برنامهٔ شطرنج، این امکان به ما اجازه میدهد که برنامه در هر لحظه بازی کند در هر زمانی با بهترین حرکت که تا این لحظه در جستجویی که تا این لحظه به دست آمده یافت شدهاست. با الگوریتم جستجوی اول عمق سنتی چنین چیزی میسر نبود.
تحلیل مجانبی
پیچیدگی زمانی
پیچیدگی زمانی آیدیدیافاس یک درخت بسیار متعادل از
اثبات
در یک جستجوی عمق اول ژرفایش تکراری، گرههای سطح زیرین یک بار گسترش مییابند، آنهایی که در سطح بعدی قرار دارند دو بار گسترش مییابد، و تا جایی که تا ریشهٔ درخت، d+1 بار گسترش خواهد یافت. پس تعداد گسترشها در یک جستجوی ژرفایش تکراری چنین خواهد بود:
که در آن
از اینرو زمان اجرای جستجوی عمقی تکراری اول عمق
پیچیدگی فضا
پیچیدگی فضای آیدیدیافاس،
اثبات
از آنجایی که آیدیدیافاس، در هر نقطهای، درگیر یک جستجوی عمقی است، فقط باید پشتهای از گرهها را ذخیره کند که نشاندهنده شاخه درختی است که در حال گسترش است. از آنجایی که راه حلی با طول بهینه پیدا میکند، حداکثر عمق این پشته d است و بنابراین حداکثر مقدار فضا
بهطور کلی، زمانی که فضای جستجوی زیادی وجود دارد و عمق راه حل مشخص نیست، عمیق کردن تکراری روش جستجوی ترجیحی است.
در هر حال، یک جستجوی ژرفایش تکراری از عمق صفر تا عمق d فقط ۱۱٪ گره بیشتر از یک جستجوی اول سطح یا یک جستجوی اول عمق با عمق d وقتی b=۱۰ است گسترش مییابد. هر چه ضریب انشعاب بزرگتر باشد، در نهایت جمع کلی هزینه روی حالتهای در حال گسترش کمتر میشود، ولی حتی وقتی که ضریب انشعاب ۲ است، جستجوی ژرفایش تکراری تنها دو برابر یک جستجوی اول سطح زمان میگیرد. این بدان معنی است که پیچیدگی زمانی یک الگوریتم ژرفایش تکراری هنوز همان
الگوریتم
شبه برنامه زیر نشان میدهد آیدیدیافاس را با استفاده از دیافاس عمق محدود بازگشتی(DLS) اجرا شدهاست.
IDDFS(root, goal) { depth = 0 repeat { result = DLS(root, goal, depth) if (result is a solution) return result depth = depth + 1 } }
جستجوی عمق محدود میتواند به صورت بازگشتی انجام شود. توجه کنید تنها لازم است گره هدف برای depth==۰ چک شود، چون وقتی depth>0 باشد، DLS گرههایی را که در تکرار قبلی آیدیدیافاس دیده شدهاند را گسترش میدهد.
DLS(node, goal, depth) { if (depth == 0 and node == goal) return node else if (depth> 0) for each child in expand(node) DLS(child, goal, depth-1) else return no-solution }
جستارهای وابسته
- الگوریتم جستجوی عمق اول
- الگوریتم ناآگاهانه
منابع
- ↑ Korf, Richard (1985). "Depth-first Iterative-Deepening: An Optimal Admissible Tree Search". Artificial Intelligence. 27: 97–109. doi:10.1016/0004-3702(85)90084-0.
- ↑ KORF, Richard E. (1985). "Depth-first iterative deepening" (PDF) (به انگلیسی).
- ↑ David Poole; Alan Mackworth. "3.5.3 Iterative Deepening‣ Chapter 3 Searching for Solutions ‣ Artificial Intelligence: Foundations of Computational Agents, 2nd Edition". artint.info. Retrieved 29 November 2018.
- ↑ Russell, Stuart J.; Norvig, Peter (2003), Artificial Intelligence: A Modern Approach (2nd ed.), Upper Saddle River, New Jersey: Prentice Hall, ISBN 0-13-790395-2
- ↑ Russell, Stuart J.; Norvig, Peter (2003), Artificial Intelligence: A Modern Approach (2nd ed.), Upper Saddle River, New Jersey: Prentice Hall, ISBN 0-13-790395-2