تولید اعداد تصادفی در گمز نسبت به سایر نرم افزارها آسان تر است. شما با در دست داشتن توزیع مربوطه، می توانید به آسانی عدد تصادفی مربوطه را تولید نمایید. کد زیر نحوه ی تعریف اعداد تصادفی در 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 نمایید و مدل را ران کنید. لازم به ذکر است که عدد 20000 می تواند از صفر تا 10 به توان 9 تغییر کند. شما هر چه این عدد را بزرگتر در نظر بگیرید، اعداد تصادفی متنوع تری را برای شما تولید خواهد کرد.
set i /1*5/; parameter x(i); <strong>execseed = <strong>20000</strong>*(frac(jnow));</strong> x(i) = uniform(0,1); display x;
ایمیل: Support@gamsbook.ir
شماره تماس: 3325-405–0919
فکر میکردم مثل اکسل تابع تعریف شده داره . تشکر
یه مشکلی که بهش برخورد کردم اینکه این معادله رو λ b =∑(wj-σj)^2 روبه صورت زیر وارد کردم
co3 .. sum(j,sqr(w(j)-sigma(j)))=e=landab; با اینکه مدلم ارور نمیده اما جواب های اصلی رو به دست نمیاره. حل رو چک کردم
co3.. – landab – (0.441272052)*w(1) – (0.177689426)*w(2) – (0.229546532)*w(3)
– w(4)*(0.586854214) – (0.16014179)*w(5) – (0.259021262)*w(6) –
ziro 0=E = (0.145474722)*w(7) ;
(LHS = 0.184321084161185, INFES = 0.184321084161185 ****)
به اینصورت حل شده که به نظرم معادله رو درست تعریف نکردم که اولویت با منهای داخل پرانتز باشه و بعد به توان 2 و در نهایت همه رو جمع کنه.
ممنون میشم راهنماییم کنید تشکر
سلام
گمز میاد اول همه چی رو طبق قواعد پرانتز و ….سایر عملگرها باز و استند میکنه. بعد گزاش میده. فرمولتون درسته مشکلی نداره ظاهرا
با سلام
چطور می تونم در گمز انحراف معیار و همبستگی رو محاسبه کنم؟
با تشکر
سلام
فرمولش رو بنویسین.
سلام وقت بخیر
ممنون از مطالب خوب سایتتون
سوالی خدمتتون داشتم
سه مدل جداگانه دارم که بهم مرتبط هستند یعنی خروجی مدل اول، ورودی مدل دوم و خروجی مدل دوم، ورودی مدل اول هست. من هر سه مدل رو در فایلهای جداگانه نوشتم و به صورت دستی با ران شدن هر مدل، ورودی مدل دیگه رو وارد میکنم. سوالم اینه میشه هر سه مدل رو در یک صفحه اورد و خودش خروجی مدل رو برا ورودی مدل بعدی ران کنه و هر سه مدل پشت سر هم ران کنه؟ ممنون میشم راهنمایی کنید
سلام و ادب
فرض میکنم که سه مدلتون به نام های اول، دوم و سوم هستن. چون ظاهرا تو توضیحات فقط به دو مدل اشاره کردید.
میشه همه رو تو یه برنامه نوشت. فرض کنیم eq1 تا eq5 مدل اول، و eq6 تا eq10 مدل دوم و eq11 تا eq15 مدل سوم باشند. (فرضه صرفا)
مدل اول یه متغیر داره به اسم x و یه ورودی داره به اسم alpha
مدل دوم هم متغیر y و پارامتر ورودی beta رو داره …..
….
حالا میخوایم بگیم که این سه تا رو پشت سر هم حل کن.
دقت کنین که من قالب رو براتون نوشتم، همینجوری تایپ نکنین. مفهوم رو برداشت کنین
با سلام اقای دکتر
من مجموعه ای دارم که شامل سه اتاق عمل است (قلب، مغز، اورتوپد)
و مجموعه ای دیگه ای دارم که میگه هرکدام از این ها چند اتاق دارند(قلب 2، مغز 3 ، اورتوپد 4)
دقیقا مثل یک پارامتر تک بعدی بیان شده ولی مجموعه است.
این مجموعه رو باید چطوری تعریف کنم در گمز؟؟
سلام
بستگی به نوع کاربردش در مدل سازی داره.
ممکنه کافی باشه که فقط مثلا یک R(i تعریف کنید به عنوان پارامتر و بهش اون سه عدد رو بدین کافی باشه.
ممکنه نیاز باشه شما یه مجموعه 9 عضوی تعریف کنین. و به شکل زیر عمل کنین. برای اطلاعات بیشتر این پست رو بخونین.
کاربردش مهمه. دقت کنین.
با سلام.ببخشید برای تاخیر
فعلا من قراره مثال عددی حل کنم پس میتونم بگم عدد میگیره بعنوان متغیر نیست.ولی چون احتمالیه در هر ران متفاوت میشه
Sum(i,j,k,m),x(i,j,k,m) -D(j,m)* f(D)*H
در واقع سیگما X منهای D در پرانتز و ضرب در این مقادیر میشه
D همون تقاضا که احتمالی از جنس پواسون
FD هم مقدار تابع احتمالش به ازای هر d
سوال دوم:لطفا به زبان گمز بنویسید سیگما ایکس آی ، آی از ۵ تا ۱۸ /یک بار هم از ۱۸ تا بی نهایت
ممنون
میتونیم توی اکسل اینا رو تولید کنیم و در گمز فراخونی کنیم با دستور فایل؟بازم بلد نیستم به چه صورت
سلام. یک مدل خطی چندهدفه استوار دارم که با روش lp metric میخوام حل کنم. ولی ارور divison by zero میده. مشکل هم به خاطر صفر شدن متغییر تصمیمx هست که باعث میشه تابع هدف صفر شه و مخرج صفر شه.
در صورتی که مدل قطعی رو با همین روش حل کردم جواب داد بهم!
مشکل کار از کجا میتونه باشه؟
سلام
میتونین یه عبارت خیلی کوچیک رو به مخرج اضافه بکنین. مثل 0.000001
سلام. میشه لطفاً راهنمایی یا آموزشی در مورد تولید سناریو برای خروجی واحد بادی و قیمت بازار در گمز، قرار بدید ؟
سلام سوالتون رو در بخش مهندسی برق بپرسید
و اینکه منم این روشی که شما فرمودین و استفاده کردم، اما میگم به این شکلی که نوشتم داخل گمز درسته؟؟
خیر معادلات شما متفاوت است
خب دکتر راهنمایی بفرمایید درستش کنم ممنون میشم !!!
سلام، وقت بخیر
برای خطی کردن ضرب دو متغیر باینری از این روش میخوام استفاده کنم
T=X*Y
T<=X
T=X+Y-1
T>=0
اما نمیدونم اینا رو کجای گمز استفاده کنم؟/
میشه لطف کنید راهنمایی کنید؟
محدودیت غیرخطیم بصورت زیر
;(co5(i,k) .. ck(i,k) =e= s(k) + pi(i) + sum((j)$(ord(j)ord(i)),pi(j)*mij(i,j)*x(j,k
که بصورت زیر خطی نوشتمش
;( co5(i,k) .. ck(i,k) =e= s(k) + pi(i) + sum(j$(ord(j)ord(i)),pi(j)*N
;(co15(i,j) .. n=l=mij(i,j
;(co16(j,k) .. n=l= x(j,k
;co17(i,j,k) .. n=g=x(j,k)+ mij(i,j)-1
این مساله منه که N رو برای ضرب دوتا باینری ( mij(i,j و (x(j,k درنظر گرفتم و اینطوری در قسمت equation گمز نوشتم. با سالور سیپلکس ارور نمیده اما جوابم درست در نمیاد.
میشه راهنمایی کنید درست نوشتم یا نه؟؟
چنانچه متغیر های x , y شما باینری هستند از ترفند زیر استفاده کنید
Z<=x Z<=y x+y<=+1+Z در اینصورت z شما فقط زمانی 1 است که هر دو x,y برابر با 1 باشند. هرکدام هم که صفر شوند Z را صفر می کنند + اینکه مساله را بی خودی غیرخطی نکرده اید به اندیس ها توجه کنید
سلام
ادمین جان کمکم کن که گیرم کد گمز این چی میشه. اگر e^(-((∑_j▒〖x_jk p_j 〗)/θ)^β ) از hکوچکتر باشه y یک میشه در غیر این صورت y صفر است. فقط xjk متغیر صفر و یک است بقیه پارامترن. ممنون
سلام
اسم اون فرموله رو بذاریم A، حالا باید شرط ها رو به شکل زیر در بیاریم.
که در اینجا M یک عدد بزرگ و مناسب هست.
سلام ممنون
مهندس من خیلی مبتدی فرمول چطور بنویسم، شرط ها رو کجا بنویسم.
بخش معادلات رو تو همین سایت بخونین.
سلام ادمین جان
مرسی رفتم خوندم. مهندس برای مسئله بالا مشکل کد من چیه
parameter w(j);
w(j)=2.718 **(sum(j,p(j)*x(j,k)/100)**2);
برای شرط ها قبل از دو نقطه در محدودیت ها به این صورت نوشتم
cont4(j,k)$(w(j)=l=h+M(1-y)& w(j)=g=h-My)
cont4(j,k)$(w(j)=l=h+M(1-y)& w(j)=g=h-My)
شرطها رو اینجوری نمینویسن. شرط نباید متغیر توش بیاد. همینا رو باید به صورت معادله بیارین نه شرط
سلام
میشه توی equation در گمز ، تابع احتمالی قرار داد ؟ من یک مدل دارم که توی تابع هدفش تابع توزیع پواسون برای تقاضا وجود داره. دوتا سوال دارم. اول اینکه تابع رو چطور فراخوانی کنم. دوم اینکه داده هاش رو چطور تولید کنم؟ فرض که خودم نرخ لاندا رو داشته باشم و وارد کنم. چطور وارد تابع پواسون کنم و فراخوانیش کنم
سلام
قبل از اینکه بنده جواب بدم، بهتره مقداری در این باره صحبت کنیم. این تابع که فرمودین، آیا داده هاش مشخصه؟ متغیر قرار هست توش بره یا نه؟ فرمول هایی که نیازه و توضیحات رو بذارین. و بگین کدوم تو معادلاته و به چه شکل.
با سلام.قبل از هرچیز باید از همه کسانی که در این سایت فوق العاده عالی فعالیت می کنند، تشکر کنم.اقای محمودی عزیز، بنده کامنت قبلی اقای عظیمی رو که درباره کاهش سناریوی گمز هستش رو خوندم.منم الان چیزی نزدیک به 6000 سناریو برای توان بادی و احتمالات مربوطه دارم و باید با استفاده از SCENRED اونها رو کاهش بدم.HELP خوده نرم افزار رو خوندم و کدهای kand.gms و
srkandw.gms رو بررسی کردم ولی متاسفانه نتونستم اونو به مسئله خودم اعمال کنم.(البته اینم بگم که بنده کمتر از 4 ماه هست که با گمز آشنا شدم).خواستم بپرسم که اون فیلم های آموزشی تون در چه مرحله ای هستش؟بنده و بقیه دوستان ، منتظر کمک بزرگ شما هستیم.با تشکر از لطف بی دریغ تون.
سلام
ممنون و خواهش میکنم. امیدوارم سایت برای شما و سایر دوستان مفید بوده باشه.
فیلم امیدوارم تا مهرماه منتشر بشه که همزمان با فیلم کامل اموزش گمز برای برق قدرت هست.
جناب محمودی،سلام.
وقت بخیر.خواستم بگم که ویدئوی کاهش سناریوتون آماده نشده؟؟ممنون از لطف تون
سلام
متاسفانه خیر هنوز.
سلام و خسته خسته نباشید. پست هاتون درباره تولید سناریو تو گمز عالی بود و مشکلی نداریم اصلا. ولی ی مبحثی ک بنده مدتیه علاقه دارم یاد بگیرم بحث تکنیک کاهش سناریو هستش که تو گمز انجام میشه سه روشم داره تو گمز. اگه لطف کنید این تکنیک رو بتونید تو سایت اموزش بدید واقعا یک گره اساسی رو برای بنده باز کردید. البته بنده خودم درحال جستجو هستم ولی هنوز این متد تو گمز رو درک نکردم. همچنین این مشکل رو هم دارم که اگر مثلا 5000 سناریو ک داریم تبدیل به 20 سناریو میشه و
min x=sum(scenarios, p(scenarios_new)*probability(scenarios_new));
این مقدار probability(scenarios_new) چجوری حساب میشه تو گمز
تشکر فراوان
سلام
بحث کاهش سناریو مقداری عمیق تر از این حرفا هست.
داریم فیلم آموزشیش رو تولید میکنیم. به محظ آماده شدن میذاریم تو سایت ایشالا.
سلام و وقت بخیر
یه سوالی داشتم، برای تولید ضرایب وزنی تابع هدف (3تا) از چه روشی باید استفاده کرد؟ میخوام هر سری که ران میکنم با وزن های مختلف عدد متفاوتی بده
ممنون
سلام
میتونین از دستور loop استفاده کنین و دستور solve رو بذارین توش. و هر بار یه سری مقادیر به w ها رو بخونه و بعد بره solve کنه و نتایج رو ذخیره کنه. و ادامه ی لوپ
سلام لطفا در مورد تولید سناریو و کاهش آن در گمز توضیح دهید.ممنون
سلام
مقداری توضیحاتش زیاده.
داریم یه فیلم آموزشی براش تولید میکنیم. به محض انتشار بهتون خبر میدیم ایشالا.
با سلام و وقت بخير
وقتي x(i)=normal(Mean,Sd) نوشته شود چگونه مي آيد x(i) را توليد ميكند؟
آيا به صورت كاملا تصادفي يك داده از فضاي تعريف شده را انتخاب ميكند؟
يا سعي ميكند كه حول و حوش مقدار ميانگين داده را انتخاب كند؟
با سپاس
سلام
عبارت رو دقت بفرمایین: “اعداد تصادفی طبق توزیع مشخص شده” یعنی هم تصادفیه، و هم طبق توزیعه. حالا اگه نمونه زیادی تولید بشه و رسم بشه، توزیع به وجود میاد.
با سلام
منظورم از سوال اين هست كه براي توليد هر عدد تصادفي چه فرآيندي را طي ميكند:
به صورت كاملا اتفاقي آن را توليد ميكند
يا
ابتدا مي آيد در هر مرحله تعدادي عدد را انتخاب ميكند و اميد رياضي آنها را در هر مرحله بهعنوان عدد تصادفي بيان ميكند و در هر مرحله مي آيد و اعداد جديدي انتخاب ميكند و اميد رياضي اعداد جديد را را اعلام ميكند
نه نه
این از قبل بهش گفتن یه همچین توزیعی هست، اینم فرمولشه. حالا طبق اون فرمول میاد تولید میکنه. اینکه ریزه کاری تر از این عمل کنه رو نمیدونم.
سلام چطوری میشه بین ده و بیست عدد صحیح تصادفی تولید کرد؟
parameter k(i) =uniform(10,20)
درسته؟
ممنون.
سلام
parameter k(i);
k(i)=uniform(10,20)
;
ممنون.
سلام
مفهوم seed در اعداد تصادفي چيست؟
در help نرم افزار به اين اشاره شده است كه براي تعيين تعداد نمونه گيري از دو كلمه كليدي sample و setseed ميتوان استفاده كرد.
فرضا عبارت sample d 9 به معناي ساختن 9 عدد تصادفي براي متغير تصادفي d است. امام در مورد نحوه استفاده از setseed مثالي نياورده و تنها اين عبارت را بيان كرده است:
This sets the seed for the random number generator of the sampling routines called using the sample keyword.
سلام seed در مهندسی کامپیوتر بهش می گن هسته . عددی هست که بر اساس آن عدد تصادفی درست می شه . مربوط به موتور تولید عدد هست
سلام و با سپاس از پاسختون
نحوه استفاده از setseed چگونه است؟
منظورم اينكه چجوري بايد نوشت؟
آيا بعد از اين كلمه كليدي بايد يك عدد گذاشت؟ مثلا setseed 10 درسته؟ و اين به چه معنا است؟
ممنون
سلام
parameter cc;
Option Seed=24;
cc=execseed;
!!!
execseed=round(cc,0);
display cc
در اونجا که !!! نوشتم باید روش تولید عدد تصادفی تونو بنویسین. روش هاشو براتون ایمیل کردم.
با سلام و تشکر از سایت خوبتون
من یه سناریو دارم که از 24 عدد تشکیل شده! میخوام این سناریو رو به گمز بدم و بهم تعداد زیادی سناریو از روس اون سناریوی اول بده، بعد این سناریو ها رو بگیره و ده تا از بهترین سناریو ها رو تشخیص بده و بهم بگه!
هرچی سرچ کردم کاهش سناریو ها رو فقط پیدا کردم که بوسیله SCENRED تو گمز نوشته میشه که اونم اگه راهنماییم کنین ممنونتون میشم، ولی تولید سناریوهای زیاد رو نتونستم پیدا کنم!ممنون میشم راهنمایی کنین.
سلام منم فقط روش کاهش سناریو با فراخوانی تابع SCENRED بلد هستم. در مورد افزایش سناریو مطلبی ندیدم .
ممنون بابت پاسخگوییتون
درمورد همون کاهش سناریو هم توضیح بدین ممنونتون میشم.
عزیز یه رویه زیاده. یه تاپیک جدا میخواد. سر فرصت اگه وقت شد میذاریم حتما. مطالعه کنین شما حتما
محدودیت تو گمز اینطوری مینویسه
.....................+(x(a,a1,2) + (0)*x(a,a1,3) + (0)*x(a,a1,4
یکی از متغیرهارو صفر نمایش میده نمیدونم چرا یعنی در محدودیتهای بالایش که حل کرده فهمیده این صفر است
سلام
خیر. مقداری مشاهده کنین معادله های دیگه رو هم. ببینین مفهوم این صفر چیه
این محدودیت چگونه میتوان نوشت
((sum(k$(ord(k)>=1 and ord(k)<=59),x(i,j,k)*x(i,j,k+1
سلام
خب درست نوشتینش. مشکلش چیه
این محدودیت نشان دهنده اینکه مسئله غیر خطی است؟ و یک سوال دیگر اگر تمام متغیرها در مسئله باینری باشند نوع این مسئله چه می شود
سلام
شرمنده مزاحم شدم
معادله زیر رو چکونه توی گمز باید نوشت؟؟
x(i,j)+x(j,i)=y(i)
خیلی ممنون
سلام
بخش معادلات رو بخونین حتما. کامنتا رو هم بخونین.
فقط یه چیزی یادتون باشه، اینکه x رو باید طوری تعریف کنین که به دو شیوه ای که نوشتین معقول باشه و ارور نده.
آقای محمودی شرمنده. من کلی نظراتو خوندم ولی جوابمو نیافتم. میشه لطفا یه توضیح کوتاه بدین. واقعا ممنون
سلام
c1(i,j).. x(i,j)+x(j,i)=e=y(i);
سلام
ببخشید من ی مشکلی شبیه توصیه شما داشتم اینکه گفتید x را جوری تعریف کنین که به دو شیوه معقول باشه و ارور نده، چجوری میشه؟ خیلی تو کامنتها وسایتهای دیگه گشتم
خیلی ممنون
سلام
اگه فرض های دیگه ای نداشته باشین، با alias کردن i و j میتونین معادله رو بدون مشکل بنویسین.
بخش مجموعه ها رو مطالعه بفرمایین.
ببخشید باید در قسمت set سوالمو مطرح میکردم
چون یک مجموعه دارم شامل (w,z,l) هایی است که این شرط را داشته باشد:فاصله w تا z کمتر از فاصله z تا l باشد
فکر میکنم باید از dynamic set استفاده کرد ولی بلد نیستم به چه شکل میتوان دستورش را نوشت.
با تشکر فراوان از وبسایتتون
سلام
نه لازم نیست. شما مجموعه ها رو تعریف کنین، بعدش این شرط هایی که گفتین رو تو محدودیت ها با ترکیب دستوراتی مث $,ord,uel و … اعمال کنید.
با سلام
لطفا در مورد dynamic set توضیح دهید
ممنون
سلام
به زودی پست مناسبی براش خواهیم گذاشت