۳۹

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

 

39 دیدگاه در “تولید اعداد تصادفی در نرم افزار گمز 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) را تولید میکند؟
    آیا به صورت کاملا تصادفی یک داده از فضای تعریف شده را انتخاب میکند؟
    یا سعی میکند که حول و حوش مقدار میانگین داده را انتخاب کند؟
    با سپاس

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

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

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

  6. سلام و وقت بخیر
    یه سوالی داشتم، برای تولید ضرایب وزنی تابع هدف (۳تا) از چه روشی باید استفاده کرد؟ میخوام هر سری که ران میکنم با وزن های مختلف عدد متفاوتی بده
    ممنون

    • سلام
      میتونین از دستور loop استفاده کنین و دستور solve رو بذارین توش. و هر بار یه سری مقادیر به w ها رو بخونه و بعد بره solve کنه و نتایج رو ذخیره کنه. و ادامه ی لوپ

  7. سلام و خسته خسته نباشید. پست هاتون درباره تولید سناریو تو گمز عالی بود و مشکلی نداریم اصلا. ولی ی مبحثی ک بنده مدتیه علاقه دارم یاد بگیرم بحث تکنیک کاهش سناریو هستش که تو گمز انجام میشه سه روشم داره تو گمز. اگه لطف کنید این تکنیک رو بتونید تو سایت اموزش بدید واقعا یک گره اساسی رو برای بنده باز کردید. البته بنده خودم درحال جستجو هستم ولی هنوز این متد تو گمز رو درک نکردم. همچنین این مشکل رو هم دارم که اگر مثلا ۵۰۰۰ سناریو ک داریم تبدیل به ۲۰ سناریو میشه و
    min x=sum(scenarios, p(scenarios_new)*probability(scenarios_new));
    این مقدار probability(scenarios_new) چجوری حساب میشه تو گمز
    تشکر فراوان

    • سلام
      بحث کاهش سناریو مقداری عمیق تر از این حرفا هست.
      داریم فیلم آموزشیش رو تولید میکنیم. به محظ آماده شدن میذاریم تو سایت ایشالا.

  8. با سلام.قبل از هرچیز باید از همه کسانی که در این سایت فوق العاده عالی فعالیت می کنند، تشکر کنم.اقای محمودی عزیز، بنده کامنت قبلی اقای عظیمی رو که درباره کاهش سناریوی گمز هستش رو خوندم.منم الان چیزی نزدیک به ۶۰۰۰ سناریو برای توان بادی و احتمالات مربوطه دارم و باید با استفاده از SCENRED اونها رو کاهش بدم.HELP خوده نرم افزار رو خوندم و کدهای kand.gms و
    srkandw.gms رو بررسی کردم ولی متاسفانه نتونستم اونو به مسئله خودم اعمال کنم.(البته اینم بگم که بنده کمتر از ۴ ماه هست که با گمز آشنا شدم).خواستم بپرسم که اون فیلم های آموزشی تون در چه مرحله ای هستش؟بنده و بقیه دوستان ، منتظر کمک بزرگ شما هستیم.با تشکر از لطف بی دریغ تون.

    • سلام
      ممنون و خواهش میکنم. امیدوارم سایت برای شما و سایر دوستان مفید بوده باشه.
      فیلم امیدوارم تا مهرماه منتشر بشه که همزمان با فیلم کامل اموزش گمز برای برق قدرت هست.

پاسخ دهید

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