۳۳

تولید اعداد تصادفی در نرم افزار گمز 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
شماره تماس: ۳۳۲۵-۴۰۵–۰۹۱۹

 

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

  1. چون یک مجموعه دارم شامل (w,z,l) هایی است که این شرط را داشته باشد:فاصله w تا z کمتر از فاصله z تا l باشد
    فکر میکنم باید از dynamic set استفاده کرد ولی بلد نیستم به چه شکل میتوان دستورش را نوشت.
    با تشکر فراوان از وبسایتتون

    • سلام
      نه لازم نیست. شما مجموعه ها رو تعریف کنین، بعدش این شرط هایی که گفتین رو تو محدودیت ها با ترکیب دستوراتی مث $,ord,uel و … اعمال کنید.

  2. محدودیت تو گمز اینطوری مینویسه

    .....................+(x(a,a1,2) + (0)*x(a,a1,3) + (0)*x(a,a1,4

    یکی از متغیرهارو صفر نمایش میده نمیدونم چرا یعنی در محدودیتهای بالایش که حل کرده فهمیده این صفر است

  3. با سلام و تشکر از سایت خوبتون
    من یه سناریو دارم که از ۲۴ عدد تشکیل شده! میخوام این سناریو رو به گمز بدم و بهم تعداد زیادی سناریو از روس اون سناریوی اول بده، بعد این سناریو ها رو بگیره و ده تا از بهترین سناریو ها رو تشخیص بده و بهم بگه!
    هرچی سرچ کردم کاهش سناریو ها رو فقط پیدا کردم که بوسیله SCENRED تو گمز نوشته میشه که اونم اگه راهنماییم کنین ممنونتون میشم، ولی تولید سناریوهای زیاد رو نتونستم پیدا کنم!ممنون میشم راهنمایی کنین.

  4. سلام
    مفهوم seed در اعداد تصادفی چیست؟
    در help نرم افزار به این اشاره شده است که برای تعیین تعداد نمونه گیری از دو کلمه کلیدی sample و setseed میتوان استفاده کرد.
    فرضا عبارت sample d 9 به معنای ساختن ۹ عدد تصادفی برای متغیر تصادفی d است. امام در مورد نحوه استفاده از setseed مثالی نیاورده و تنها این عبارت را بیان کرده است:

    This sets the seed for the random number generator of the sampling routines called using the sample keyword.

      • سلام و با سپاس از پاسختون
        نحوه استفاده از setseed چگونه است؟
        منظورم اینکه چجوری باید نوشت؟
        آیا بعد از این کلمه کلیدی باید یک عدد گذاشت؟ مثلا setseed 10 درسته؟ و این به چه معنا است؟
        ممنون

        • سلام

          parameter cc;
          Option Seed=24;
          cc=execseed;
          !!!
          execseed=round(cc,0);
          display cc

          در اونجا که !!! نوشتم باید روش تولید عدد تصادفی تونو بنویسین. روش هاشو براتون ایمیل کردم.

  5. با سلام و وقت بخیر
    وقتی x(i)=normal(Mean,Sd) نوشته شود چگونه می آید x(i) را تولید میکند؟
    آیا به صورت کاملا تصادفی یک داده از فضای تعریف شده را انتخاب میکند؟
    یا سعی میکند که حول و حوش مقدار میانگین داده را انتخاب کند؟
    با سپاس

    • سلام
      عبارت رو دقت بفرمایین: “اعداد تصادفی طبق توزیع مشخص شده” یعنی هم تصادفیه، و هم طبق توزیعه. حالا اگه نمونه زیادی تولید بشه و رسم بشه، توزیع به وجود میاد.

      • با سلام
        منظورم از سوال این هست که برای تولید هر عدد تصادفی چه فرآیندی را طی میکند:
        به صورت کاملا اتفاقی آن را تولید میکند
        یا
        ابتدا می آید در هر مرحله تعدادی عدد را انتخاب میکند و امید ریاضی آنها را در هر مرحله بهعنوان عدد تصادفی بیان میکند و در هر مرحله می آید و اعداد جدیدی انتخاب میکند و امید ریاضی اعداد جدید را را اعلام میکند

        • نه نه
          این از قبل بهش گفتن یه همچین توزیعی هست، اینم فرمولشه. حالا طبق اون فرمول میاد تولید میکنه. اینکه ریزه کاری تر از این عمل کنه رو نمیدونم.

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *