اگر از توابعی مثل rand یا randn در MATLAB استفاده کنید، معمولاً با هر بار اجرای برنامه اعداد متفاوتی تولید میشوند.
مثلاً:
rand(1,5)
اگر این دستور را چند بار اجرا کنید، هر بار خروجی جدیدی خواهید دید.
این رفتار طبیعی است، چون MATLAB برای تولید اعداد شبهتصادفی از یک وضعیت داخلی یا Random Number Generator State استفاده میکند که در طول کار تغییر میکند.
چگونه اعداد تصادفی را ثابت کنیم؟
اگر میخواهید هر بار اجرای برنامه دقیقاً همان اعداد تولید شوند، قبل از تولید اعداد تصادفی از دستور rng استفاده کنید:
rng(1)
x = rand(1,5)
حالا اگر برنامه را دوباره اجرا کنید، همان مقادیر قبلی تولید میشوند.
عدد داخل rng را Seed مینامند. مثلاً:
rng(10)
یک دنباله مشخص تولید میکند و:
rng(100)
دنباله دیگری میسازد.
اما تا زمانی که Seed ثابت باشد، خروجی نیز قابل تکرار خواهد بود.
چه زمانی این کار مفید است؟
ثابت کردن اعداد تصادفی زمانی بسیار مفید است که بخواهید:
- یک الگوریتم را چند بار با شرایط کاملاً یکسان آزمایش کنید.
- نتایج یک مقاله یا پروژه قابل تکرار باشند.
- دو روش مختلف را روی دادههای تصادفی یکسان مقایسه کنید.
- هنگام Debug کردن برنامه، ورودی تصادفی هر بار تغییر نکند.
مثلاً:
rng(5)
A = rand(3,3);
هر بار که این کد را از ابتدا اجرا کنید، ماتریس A یکسان خواهد بود.
بازگشت به حالت تصادفی معمول
اگر بخواهید MATLAB دوباره بر اساس زمان فعلی Seed متفاوتی انتخاب کند، میتوانید بنویسید:
rng('shuffle')
در این حالت معمولاً با هر اجرای برنامه دنباله متفاوتی از اعداد تصادفی تولید میشود.
پس اگر هنگام تست یا مقایسه الگوریتمها به نتایج قابل تکرار نیاز دارید، کافی است در ابتدای برنامه یک Seed مشخص تعیین کنید:
rng(1)