در Metropolis–Hastings، پیشنهاد یک حرکت با پذیرفتنِ آن یکی نیست. وقتی احتمالِ پیشنهادِ رفت و برگشت برابر نباشد، نسبتِ احتمالِ مقصد به مبدأ کافی نیست. این تمرین یک زنجیرهٔ سهحالتی را از ابتدا میسازد و با کسرهای دقیق بررسی میکند که حذفِ نسبتِ پیشنهاد، توزیعِ موردنظر را عوض میکند.
سه حالت، دو توزیع متفاوت
حالتها را صفر، یک و دو مینامیم. توزیع هدف pi برابر۱/۲،۱/۳ و۱/۶ است؛ میخواهیم اگر زنجیره با این توزیع شروع شد، پس از یک انتقال هم همین توزیع را داشته باشد. توزیع پیشنهاد q برابر۱/۳،۱/۲ و۱/۶ است. در این مثال، پیشنهادِ مقصد از حالتِ فعلی مستقل است، اما احتمالِ رفت و برگشتِ هر جفت لزوماً برابر نیست.
برای حرکت از i به j، پذیرش را با کوچکترِ یک و pi[j]×q[i]÷(pi[i]×q[j]) حساب میکنیم. همهٔ جرمها در قراردادِ این فایل مثبتاند؛ بنابراین مخرج صفر نداریم. این محدودیت، انتخابِ تمرین است و شرحِ همهٔ حالتهای پشتیبانی در الگوریتمِ عمومی نیست.
پیشنهاد را به انتقال تبدیل کنیم
احتمالِ انتقال به یک حالتِ متفاوت، حاصلضربِ احتمال پیشنهاد و احتمال پذیرش است. باقیِ احتمالِ سطر را روی ماندن در حالت فعلی میگذاریم؛ پیشنهادِ خودِ حالت و ردِ پیشنهادها هر دو میتوانند به ماندن منجر شوند. جدول پذیرش بهتنهایی ماتریس انتقال نیست.
| مبدأ | به صفر | به یک | به دو |
|---|---|---|---|
| صفر | ۲/۳ | ۲/۹ | ۱/۹ |
| یک | ۱/۳ | ۱/۲ | ۱/۶ |
| دو | ۱/۳ | ۱/۳ | ۱/۳ |
کد همهٔ درایهها را غیرمنفی و جمعِ هر سطر را دقیقاً یک کنترل میکند. این بررسی ضروری است، ولی بهتنهایی ثابت نمیکند هدفِ انتخابشده حفظ شده است.
تعادلِ رفت و برگشت را جدا بسنجیم
برای هر نه جفتِ i و j، جرمِ pi[i]×P[i,j] را با pi[j]×P[j,i] مقایسه میکنیم. برای جفت صفر و یک، هر دو۱/۹ میشوند. سپس مستقل از این برابریهای جفتی، بردارِ pi را در کلِ ماتریس ضرب میکنیم؛ خروجی دوباره۱/۲،۱/۳ و۱/۶ است.
اینها محاسبهٔ دقیق برای ماتریسِ ساختهشدهاند. نمونهگیریِ محدود، سرعتِ نزدیکشدن از شروعِ دلخواه، تعدادِ گامِ لازم یا استقلالِ خروجیهای متوالی از آنها نتیجه نمیشود. دربارهٔ ماتریسِ آماده و توزیع پایا، راهنمای زنجیرهٔ مارکوف را جدا بخوانید.
نسخهٔ ناقص واقعاً چه جوابی میدهد؟
همان کد را عمداً با پذیرشِ کوچکترِ یک و pi[j]÷pi[i] اجرا میکنیم؛ نسبتِ پیشنهاد حذف شده است. حاصلِ pi×P اکنون۱۷/۳۶،۴/۹ و۱/۱۲ میشود. این بردار با هدف فرق دارد؛ جدول JSON هم ماتریسِ ناقص و هم خروجیِ اشتباه را نگه میدارد.
بنابراین تنها نامیدنِ کد به نام Metropolis کافی نیست. اگر پیشنهادِ این مثال را نامتقارن نگه داریم، پذیرشِ مخصوصِ پیشنهادِ متقارن پاسخِ دیگری میسازد. خطا با اجرای واقعیِ ضدنمونه دیده میشود، نه با ادعای کلی دربارهٔ خوب یا بد بودنِ یک روش.
مسیرِ ششگامی، نمونهٔ تصادفی نیست
برای دیدنِ تصمیمها، شش مقصدِ پیشنهادی و شش آستانهٔ کسری را خودمان نوشتهایم. دفترِ اجرا، حالتِ قبلی، پذیرش، رد یا قبول و حالتِ تازه را ثبت میکند. این فهرست قرعهٔ تصادفیِ واقعی نیست؛ فراوانیِ حالتهای آن را تخمینِ pi یا شاهدِ اختلاط معرفی نمیکنیم.
فایل فقط۲تا۴حالت و جرمهای کسریِ مثبت با جمعِ یک را میپذیرد. صفر، منفی، بولین، فهرستِ خالی و جمعِ نامعتبر در آزمون رد شدهاند. تکرارپذیریِ مولد تصادفی پرسشِ جداگانهای است؛ seed، اشتباهِ نسبتِ پذیرش را درست نمیکند. ادامه در مبانی هوش مصنوعی؛ این تمرین اعلامِ استفادهٔ این زنجیره در محصولات اپرا نیست.
فایل تمرین و منبع
کد مستقلِ تمرین و کنترلها؛ Python · ورودیها و تمام خروجی واقعیِ همین تمرین؛ JSON
منابع در 2026-11-04 خوانده شدند؛ این تاریخ، تاریخ انتشار منبع نیست. مثالها و فایلهای این راهنما آموزشی و ساختهٔ تحریریهاند.