الگوریتم در هر زمان
در علم کامپیوتر، الگوریتم در هر زمان (انگلیسی: anytime algorithm)، الگوریتمی است که یک راه حل معتبر برای یک مشکل را به ما می‌دهد. حتی اگر الگوریتم قبل از اینکه به پایان برسد متوقف شود. انتظار می‌رود هرچه الگوریتم پیش تر می‌رود راه حل‌های بهتر و بهتری پیدا کند.
اکثر الگوریتم‌ها اجرا می‌شوند تا کامل شوند: آنها پس از انجام مقدار ثابتی از محاسبات، یک پاسخ واحد را ارائه می‌دهند. با این حال، در برخی موارد، ممکن است کاربر بخواهد قبل از اتمام الگوریتم، آن را خاتمه دهد. برای مثال، مقدار محاسبات مورد نیاز ممکن است قابل توجه باشد، و منابع محاسباتی ممکن است نیاز به تخصیص مجدد داشته باشند. اکثر الگوریتم‌ها یا اجرا می‌شوند تا به پایان برسند یا هیچ اطلاعات مفیدی برای حل ارائه نمی‌دهند. با این وجود، الگوریتم‌های هر زمان قادر به بدست آوردن پاسخ‌های جزئی هستند، که کیفیت آن‌ها به مقدار محاسباتی که قادر به انجام آن هستند، بستگی دارد. پاسخ ایجاد شده توسط الگوریتم‌های هر زمان تخمینی نزدیک به پاسخ صحیح است.
الگوریتم همیشه در هر زمان را همچنین می‌توان «الگوریتم قطع» نامید. آنها با الگوریتم‌های قرارداد، که باید پیش از انجام فرایند زمان را اعلام کنند، متفاوت هستند. در یک الگوریتم در هر زمان، یک فرایند می‌تواند دقیقاً اعلام کند که پایان می‌یابد.
هدف الگوریتم‌های هر زمان این است که سیستم‌های هوشمند را قادر سازد تا در ازای زمان بیشتر، نتایج با کیفیت تری تولید کنند. آنها همچنین باید در زمان و منابع انعطاف‌پذیر باشند. این الگوریتم‌ها مهم هستند زیرا برای تکمیل نتایج در یک مدت زمان کوتاه طراحی شده‌اند در صورتی که هوش مصنوعی یا الگوریتم‌های هوش مصنوعی می‌توانند مدت زمان زیادی را صرف تکمیل نتایج کنند. همچنین، این الگوریتم‌ها در نظر گرفته شده‌اند که درک بهتری از اینکه سیستم وابسته و محدود به فاکتورهایش و نحوهٔ همکاری آنها است، داشته باشند یک مثال، تکرار نیوتن-رافسون برای یافتن ریشه مرتبه دوم یک عدد است. مثال دیگری که از الگوریتم‌های هر زمان استفاده می‌کند، مسائل مسیریابی هستند هنگامی که شما برای مقصودی هدف گذاری می‌کنید؛ جسم در حال حرکت در فضاست در حالی که منتظر به پایان رسیدن الگوریتم است و یک پاسخ، حتی اگر تقریبی باشد، اگر زود بدست آید می‌تواند به‌طور قابل توجهی وقوع آن را بهبود بخشد.
آنچه الگوریتم‌های هر زمان را منحصر به فرد می‌کند، توانایی آن‌ها در بازگرداندن تعداد زیادی نتیجه ممکن برای هر ورودی داده شده‌است. الگوریتم در هر زمان از بسیاری از معیارهای اندازه‌گیری کیفی تعریف شده برای نظارت بر پیشرفت در حل مسائل و منابع محاسباتی توزیع شده استفاده می‌کند. آن به دنبال بهترین پاسخ ممکن با مقدار زمان مشخص داده شده، می‌گردد. این الگوریتم تا زمان تکمیل، اجرا نمی‌شود و اگر مجاز به اجرای طولانی‌تر باشد، ممکن است پاسخ را بهبود ببخشد. این اغلب برای مجموعه مشکلات یک تصمیم‌گیری بزرگ استفاده می‌شود. الگوریتم هر زمان به‌طور کلی، تا وقتی که مجاز به تمام شدن نباشد، اطلاعات مفیدی ارائه نمی‌دهد. با اینکه این الگوریتم ممکن است شبیه به برنامه‌نویسی پویا به نظر برسد، تفاوت آنها در این است که الگوریتم در هر زمان بیشتر از آن که از طریق تنظیمات تصادفی، ترتیب یافته باشد، به خوبی تنظیم شده‌است.
الگوریتم‌های هر زمان به نوعی طراحی شده‌اند تا بتوان آنها را در هر زمان متوقف کرد و بهترین نتیجه ای که تا آن لحظه بدست آورده‌اند، دریافت کرده. به همین دلیل است که الگوریتم قطع نامیده می‌شوند. الگوریتم‌های هر زمان همچنین آخرین نتیجه را حفظ می‌کنند، به طوری که اگر به آنها زمان بیشتری را بدهیم، می‌توانند از جایی که فرایند را ترک کرده‌اند برای به دست آوردن نتایج بهتر ادامه دهند.
هنگامی که تصمیم گیرنده باید عمل کند، باید مقداری ابهام وجود داشته باشد. همچنین باید تعدادی ایده در مورد چگونگی حل این ابهام وجود داشته باشد. این ایده باید قابل ترجمه به یک حالت از نمودار عمل باشد.
پروفایل سنجش عملکرد، کیفیت نتایج بر اساس ورودی و مقدار زمان که به الگوریتم اختصاص می‌یابد، تخمین می‌زند. هرچه این تخمین بهتر باشد، نتیجه نیز سریع تر بدست خواهد آمد. برخی سیستم‌ها دارای پایگاه داده بزرگتری هستند که این احتمال را موجب می‌شود که خروجی داده شده، همان خروجی مورد نظر باشد. مهم است که توجه داشته باشید که یک الگوریتم می‌تواند چندین پروفایل داشته باشد. پروفایل‌های سنجش عملکرد، بیشتر اوقات با استفاده از آمار ریاضی که از موارد نمایه استفاده می‌کنند، ساخته می‌شوند. به عنوان مثال، در مسئله فروشنده دوره‌گرد، پروفایل سنجش عملکرد با استفاده از یک برنامه خاص تعریف شده توسط کاربر برای تولید آمار لازم ایجاد شد. در این مثال، پروفایل سنجش عملکرد همان نقشه‌برداری زمان طی رسیدن به نتایج مورد نظر است. این کیفیت را می‌توان به چند روش مختلف اندازه‌گیری کرد:
رفتار اولیه: در حالی که برخی از الگوریتم‌ها با حدس‌های اولیه شروع می‌شوند، بقیهٔ آنها یک رویکرد محاسبه شده تر را پیش می‌گیرند و پیش از انجام هر حدسی، یک دورهٔ شروع و راه اندازی دارند.