تولید اعداد تصادفی در نرم افزار گمز gams

تولید اعداد تصادفی در گمز نسبت به سایر نرم افزارها آسان تر است. شما با در دست داشتن توزیع مربوطه، می توانید به آسانی عدد تصادفی مربوطه را تولید نمایید. کد زیر نحوه ی تعریف اعداد تصادفی در gams را نشان می دهد.


x(i)=uniform(a,b);
x(i)=normal(Mean,Sd);
x(i)=gamma(alpha,theta);
x(i)=F(df1,df2);
x(i)=beta(alpha,beta);
x(i)=binomial(N,p);

در کد بالا:
a,b حدود بالا و پایین توزیع یکنواخت
mean و sd به ترتیب میانگین و انحراف معیار توزیع نرمال
alph و theta مشخصه های توزیع گاما
df1 و df2 درجات آزادی در توزیع F
alpha و beta مشخصه های توزیع بتا
binominal توزیع دو جمله ای بوده و n و p مشخصه های آن می باشند.
سایر توزیع ها را در help نرم افزار می توانید مشاهده کنید. همچنین می توانید با ترکیب این توزیع ها توزیع دلخواه خود را با ترکیب این توزیع ها تولید نمایید.

یک نکته‌ی بسیار مهم:
برای تولید اعداد تصادفی در گمز، در واقع یک موتور تعریف شده است که هر بار اعداد مشخصی را تولید خواهد کرد که واقعا تصادفی نیستند. یعنی اگر شما مدل را چندبار run کنید، داده هایی که توسط توزیع هایی مانند uniform(a,b) برایتان تولید می کنند دقیقا با هم برابر هستند و با هر بار run کردن مدل این اعداد هیچگونه تغییری نمی کنند.
یعنی شما اگر کد زیر را هزار بار هم ران کنید، یک جواب مشخص غیر قابل تغییر به شما می دهد.

parameter a;
a=uniform(0,1);
display a;
*** a=0.172 always

برای رفع این مشکل، شما باید موتور گمز را مجددا راه اندازی نمایید و عدد تصادفی جدیدی تولید کنید. برای اینکار باید از دستور execseed استفاده کنید.
در کد که در زیر مشاهده می کنید، ما قبل از دستور uniform از دستور execseed استفاده کرده ایم. این کار باعث می شود که موتور تولیدی gams مجددا راه اندازی شود. شما به این کد کاری نداشته باشید. فقط این خط را در کد خود paste نمایید و مدل را ران کنید. لازم به ذکر است که عدد ۲۰۰۰۰ می تواند از صفر تا ۱۰ به توان ۹ تغییر کند. شما هر چه این عدد را بزرگتر در نظر بگیرید، اعداد تصادفی متنوع تری را برای شما تولید خواهد کرد.


set i /1*5/;
parameter x(i);
execseed = 20000*(frac(jnow));
x(i) = uniform(0,1);
display x;

ایمیل: Support@gamsbook.ir
شماره تماس: ۳۳۲۵-۴۰۵–۰۹۱۹

 

این مقاله برای شما مفید بود؟

مطالب مشابه

دیدگاهی دارید؟