تعدادی از بردارهای ثابت و داده های محاسباتی (چه به اندیس ها وابسته باشند چه نباشند) را با دستور Parameter تعریف می کنند. دستور کلی آن تقریبا مشابه کمیت های scalar است. فرض کنیم داده ها و بردارهای زیر را داریم:
دستورات مربوط به هر کدام از این بردارها و پارامتر ها به صورت زیر خواهد بود:
*Example1:
parameter tehran/3/;
*Example2:
parameter a/1/, b/3/, c/2.4/, alpha/0.25/;
*Example3:
parameter d/5/, e/2/, f(j)/1 3,2 0,3 6/;
*Example4:
parameter Gela(c)/c1 10,c2 100,c3 1000/;
*Example5:
parameter a(i)/(a1,a4) 4,(a5*a9) 12/;
ذکر این نکته لازم است که برای تعریف f, Gela و a به دلیل اندیس دار بودن این داده ها باید ابتدا اندیس مربوط به هر یک تعریف شده و سپس به تعریف آنها پرداخت. مجموعه های این اندیس ها را می توان به شکل زیر تعریف نمود: (این مجموعه ها باید در خطوطی قبل از دستور parameter تعریف شده باشند.
Sets j/1*3/
c/c1,c2,c3/
i/a1*a9/ ;
توسط دستور parameter می توان داده های با بیش از 2 بُعد (2 اندیس) نیز تعریف نمود. دو مثال زیر مثالهایی از داده هایی با 3 بعد می باشند:
توضیح: در مثال اول پارامتر multi به i,k,j وابسته است. به طوری که اگر i=1 و j=1 و k=2 باشند، multi مقدار 30 را اختیار می کُند. حالَُ اگر ترکیبی مانند i=3, j=2, k=1 وجود داشته باشد، GAMS خود به خود مقدار آن را صفر در نظر می گیرد.
در مثال دوم نیز اگر آقای احمدی(مستخدم) زیر دست آقای عزیزی(مدیر) در”سازمان 3 ” انجام وظیفه کند دستمزدی معادل 2000 واحد خواهد داشت.
ادامه ی مدل سازی مثال کاربردی 1:
در صورتی که آموزش گام به گام را از ابتدا پیگیری نموده اید. ملاحظه می فرمایید که در این مثال سه بردار a و b و c موجودند. بردارهای b و c را توسط دستور parameter به شکل زیر می توانیم تعریف نماییم. (بردار a نیز به دلیل سهولت بیشتر توسط دستور Table تعریف خواهد شد- هر چند که این امر با دستور parameter هم قابل اجرا کد کردن است. علت این کار طولانی شدن و وقت گیر بودن کد نویسی مربوطه می باشد.)
دستور parameter تا حدی مورد بحث قرار گرفت. امیدواریم که گره ای از مشکلات شما در سر و کله زدن با این دستور گشوده باشیم.
خدمت عزیزانی که آموزش گام به گام را از ابتدا همراه با ما شروع نموده اند توصیه می شود که پس از مطالعه و مرور این صفحه، جهت ادامه مراحل آموزش به بخش Tableدر لیست مطالب مراجعه نمایند.
با تشکر
مدیریت سایت gamsbook.ir
ایمیل: Support@gamsbook.ir
شماره تماس: 3325-405–0919
این محدودیت چجوری در گمز کد کنم
𝑠.𝑡. 𝑇𝑒𝑣𝑎𝑐 = 𝑚𝑖𝑛{𝑇|𝑓𝑖𝑗𝑣
𝑘
(𝑡) = 0, 𝑡 > 𝑇}
Tevac=min{T|fij(t)=0, t>T}
سلام و ادب
لطفا فارسی هم توضیح بدید و بگید که این نمادها متغیر هستند، یا پارامتر
سلام کد زیر همش ERROR 119 میده
لطفا راهنماییم کنید.
سلام
کل کد رو گذاشتین اینجا. چرا اخههه 🙂
اینجا رو مطالعه کنید.
سلام وقت تون بخیر
چطور می تونم پارامتری مثل a(j)تعریف کنم به طوری که مقدار اول یه عدد ثابت داشته باشه و بقیه از یه رابطه خاصی پیروری کنه. ممنون میشم جواب بدین.
;(Parameter a(j
a(‘1’)= 1
a(j)$(ord(j)>1)= 2*ord(j) +1
مرسی از پاسختون
رابطه ای که تعریف کردم پارامتری داره که قبلا تعریف کردم و میخوام توتعریف پارامتر جدید ازش استفاده کنم چطور انجام بدم.
می توانید بنویسید
https://www.gams.com/latest/docs/UG_Parameters.html
با سلام و ادب خدمت شما
یک پارامتر سه بعدی دارم که حاصل بهینه سازی گمز هستش مثلا P(b,j,t) حال اگه بخوام این پارامتر سه بعدی رو به یک پارامتر دو بعدی مثلا A(L,t) تبدیل کنم چه کار می تونم بکنم؟
سلام
ارتباط L با سایر اندیسا چیه؟ و اینکه رویه باید مشخص و تشریح بشه.
معمولا این کارا با loop انجام میشه.
سلام خسته نباشید..
من کد پخش بار dc یک سیستم سه شینرو نوشتم که فقط شین 3 بار داره پس دستور به صورت load(n) load at bus n /n3 0.85/ در میاد حالا اگر من بخوام این عمل رو برای 24 ساعت انجام بدم، یعنی یک ست k/1*24/ براش مشخص کنم و بخوام تو هر ساعت شین 3، بار متفاوتی دریافت کنه باید دستور رو به چه صورت بنویسم؟؟
سلام
متوجه منظور شما نشدم. منظورتون اینه که load(n,t) داشته باشین؟
با سلام و تشکر از زحمات شما
ببخشید من یک سوال داشتم ، من تو تابع هدف یک همچین رابطه ای دارم sum(s ,fo(s)*h(s)) که h متغیری هست با همچین جوابایی مثلا [2 1 0 3 ] , (s) f پارامتر میباشد با همچین عددهایی [10 20 30 15] من میخوام که h(s) بزرگتر مساوی دو هستند انتخاب بشن (به عبارتی اگر یک وجود داشت صفرشه) و بعد ضرب در f(s) بشوند یعنی h بشه [2 0 0 3] , فک میکنم باید شرط بزارم h(s) >=2 ولی هر کاری کردم ج ندادو میشه راهنمایی بفرماییدو واقعا ممنون میشم.
سلام
یه راهش اینه که از دستور ifthen استفاده کنین. برید یاد بگیرید این دستور رو. ولی مشکلش اینه که مدل رو غیز خطی میکنه.
یه راه دیگه ش اینه که دو متغیر صفر و یک به اسم y تعریف کنین و محدودیت زیر رو به مدل اضافه کنین.
اینجوری h فقط میتونه صفر، دو و یا سه و یا 5 رو بگیره. (اگه 5 رو نمیخواین بگیره، میتونین شرط بذارین h.up=3 یا اینکه محدودیت بذارین y1+y2<=1 موفق باشید
با سلام مجدد و بسیار ممنون از پاسختون
این راهی که گفتین من امتحان کردم نشد متاسفانه، حتی راه های دیگری هم که بعضی از دوستان پیشنهاد داده بودن غیر خطی میشد که راه خطی کردن آن یافت نشد. با توجه به تجربه شما ، هیچ راه دیگه ای وجود نداره که من از این بردار یک ها رو تبدیل به صفر کنم یعنی صفر و سایر اعداد مثبت سر جاشون بمونن فقط یک تبدیل به صفر شه؟
روشی که گفتم فک کنم جواب میده ها. احتمالا درست پیاده سازی نکردین. شایدم من اشتباه متوجه شدم.
لطفا در دو سطح مقدماتی و پیشرفته کتابهایی رو در رابطه با آموزش گمز پیشنهاد کنید.(لطفا نام نویسندگان رو هم بیان کنید).
سلام
کتاب mccarl هم برای مقدماتی و هم پیشرفته خوبه.
البته شما بخواین عمیقتر کار کنین گمز رو، دیگه باید منابع تخصصی که لازم دارین رو بخونین.
با سلام و ضمن سپاس از راهنمایی های موثر شما.
من در حال نوشتن مدلی در گمز هستم که بخشی از پاارمترها به این صورت تعریف میشه:
parameter v(i,j,k);
v(i,j,’1′)=uniform(19.44,27.78);
v(i,j,’2′)=uniform(8.33,16.67);
v(i,j,’3′)=uniform(2.78,8.33);
v(i,j,’4′)=uniform(8.33,16.67);
v(i,j,’5′)=uniform(19.44,27.78);
parameter g(i,j,k,u);
g(i,j,k,u)=landa*(k_Eff(u)*N(u)*Vi(u)/v(i,j,k)+M_curb(u)*gamma(u)*alpha+beta(u)*gamma(u)*v(i,j,k)*v(i,j,k));
ظاهرا تعریف پارامترها به این صورت روی زمان حل مساله بسیار تاثیر داره چون وقتی عدد ثابت به جای پارامتر g قرار می دهم زمان حل مساله به صورت قابل توجهی کاهش پیدا می کنه.
میخواستم بدونم که آیا راه حلی هست که تعریف پارامترها به این صورت روی زمان حل تاثیر گذار نباشه؟ مثلا ممکنه این پارامتر و فرمول مربوط به اون رو در اکسل پیاده کنم و نتایج وارد گمز بشه تاثیری در کاهش زمان حل داشته باشه؟
سلام
اگه زیاد زمان بره همون اکسل رو استفاده کنین بهتره. شما باید فراخوانی از اکسل رو یاد بگیرین. از xls2gms یا gdxrww استفاده کنین. دو تا روش مختلفه برای خوندن داده ها از اکسل توسط گمز که دومی اسون تر و قوی تر هست.
سلام یه سوال داشتم دو تا اندیس s و t توی گمز تعریف کردم حالا میخوام متغیر x(s) را در بازه s<t جمع ببندم این عبارت را می نویسم ایراد میگیره sum((s$(ord(s)<t),x(s))
سلام
تو دستور دلار، به جای t بنویسین ord(t)
سلام
مجموعه N محدودیت نیست یک مجموعه است باید اول تعریفش کنیم
چون بعد توی محدودیت ها میخواهیم بگیم مثلا برای هر (I,j ) عضو N
مرسی که را هنمایی میکنید.
set i
/ 2
3
7
5 / ;
set j
/ 1
2
3
4 / ;
set N(i,j)
/ 2.1
3.2
7.3
5.4 /;
توی محدودیت ها هر جا خواستین بگین عضو N بنویسین $(N)
چگونه میتوان مجموعه ای مانند {N={(I,j)│dij≤s را در گمز کد کرد؟
بطوریکه d,s پارامترند.
لطفا راهنمایی بفرمایید… با سپاس
سلام
احتمالا لازم نیست تعریف کنید. بگید مثلا محدودیت فلان به شرطی که d
بعد یه سوال دیگه
تو یکی از کامنت های بخش ” مجموعه های دو بعدی” ، شما دستور uel را بجای ord پیشنهاد داده بودید ولی تو اینترنت که من نتونستم چیزی پیدا کنم ، مدل ord هم که ازش استفاده می کنم پیغام میده که این دستور رو نمیشناسه.
مسلم هست که ord نمیشناسه! مدلتونو برای سایت ارسال کنین تا مشکل مدلتونو بررسی کنیم.
سلام و خسته نباشید
راجع به سوالی که در کد بالا داشتم ، (در جهت تکمیل توضیحاتم) می خواستم بگم که پارامتر q را تعریف کردم ولی بعد براش تعریف نکردم ،چون در اینصورت مجبور می شدم همون اندیس رو هر جا که قصد مقداردهی به q را داشتم باید قرار می دادم.
برای همین از پارامتر شمارنده استفاده کردم که خودم یکی یکی بر اساس شرایط زیادش کنم و هر با که این شمارنده مقدار جدید گرفت ، با اون مقدار جدید در q حرکت کنم.
راستش با زبان های برنامه نویسی دیگه برای این کار تابحال به مشکل نخوردم ولی نمی دونم اینجا چطوری این رو حل کنم.
ممنون می شم کمکم کنید
q يك جدولی است که اگر شرط a برای صدق کنه باید با اندیس i پر بشه
منتهی مساله اینه که برای q نیاز به اندیسی دارم که خودم ترتیب ش رو مشخص کنم
cnt = 1;
loop(i,
if(a(“1”,i) = 1,
q(“1”,cnt) = ord(i);
cnt = cnt + 1;
);
);
این کدی که نوشتم و خطای بالا را داده
البته اندیس ها و پارامترها را قبلا تعریف کردم
ببینید شما نیازی به این چیزا ندارین واقعا. شما خیلی پیچیده فکر میکنین. مطمئن باشین راه حل شما خیلی ساده ست. باید ساده فکر کنین.
شما بخش مجموعه های دوبعدی رو بخونین، خیلی مفیده. قطعا میتونین ازش ایده بگیرین.
سلام
چطور میشه پارامتر رو به اندیس تبدیل کرد؟
می دونم که با ord ميشه اندیس رو به پارامتر تبدیل کرد ولی من یه جدول یک ردیفه دارم که می خوام شمارنده ش رو خودم مشخص کنم ، برای این کار یه پارامتر تعریف کردم و مقدار اولیه بهش دادم و بعد در حلقه ای که نوشتم ، این شماره رو یکی زیاد کردم و دوباره تو خودش ریختم ، بعد که می خوام از این مقدار جدید پارامتر به عنوان اندیس استفاده کنم میگه باید set کنم،
ممکنه راهنمایی کنید
سلام
نمیشه که اینجوریه. شما یه element رو یا به عنوان اندیس باید تعریف کنید، یا پارامتر. تبدیل هم نداریم. با این توضیحی که دادین، ظاهرا اصن نیازی نیست این حلقه رو بنویسین. خب همون اندیس تعریف کنین و تموم شد. یا اگه منظورتون چیز دیگه ای هست شما باید راه خلاقانه دیگه ای رو به کار ببرین.
سلام وقتتون بخیر
اگر بخوایم یک معادله را فقط به ازای بخشی از اندیس ها تعریف کنیم چطوری میشه؟
مثال
فرض کنید یک معادله را میخواهیم تنها به ازای سال های 1 تا 5 تعریف کنیم در حالی که اندیس t ( زمان ) از 1 تا 20 تعریف شده است?
سلام
با دستور ord اینکار انجام پذیر هست.
t$(ord(t)<6) این دستور را هم در جمع و هم در ابتدای محدودیت ها می تونید استفاده کنید.
با سلام
پارامتر با توزیع یکنواخت پیوسته رو چطوری باید نوشت؟
ممنون!
سلام
پارامتر با توزیع یکنواخت پیوسته نداریم تو کد نویسی. متغیر پیوسته با توزیع یکنواخت داریم. تعریفشم کافیه شما متغیر رو تعریف کنید و بعدشم براش کران پایین و بالا بذارین.
پارامتر هم با توزیع یکنواخت هم به شکل زیر هست:
parameter a(i,j);
a(i,j)=uniform(10,30);
با سلام و تشکر از سایت خوبتون
اگر پارامتری که در تابع هدف قرار داره، در دل خودش متغییر تصمیم وجود داره، کجا باید معادله پارامتر رو تعریف کرد؟
سلام
وقتی یه پارامتر به یه متغیر تصمیم وابسته ست، پس خودش متغیره دیگه و باید متغیر تعریف بشه. و باید فرمولی که لازمه به عنوان یه محدودیت نوشته بشه. اگه شرط شما فرقی داره با این قضیه، باید از دستورات شرطی شرط مربوطه رو بنویسین.
خواهش میکنم مرسی
سلام جناب محمودی
در کدی ک نوشتم مدل حل شد، جوابم راضی کننده بود
ولی بعدش متوجه شدم ک 2تا از پارامترهام اضافیه و در هیچ جای مدل استفاده نمیشه، پارامترها رو ک حذف کردم،نتونستم از گمز جواب بگیرم، حالا موندم چ کار کنم؟؟ خب اون پارامترای بی استفاده چطور رو مدل تاثیر میذاره؟ پارامتر رو دوباره وارد کد کنم؟؟؟ اینم بگم ک پارامترام بصورت uniformeهستن
سلام
وقتی حذف کردین چه اروری دیدین؟
ممنون از جوابتون
اروری نمیده، یعنی Normal copletion میشه
هیچ اروری هم نمیبینم،آخه انگار مدل رو حل میکنه و تمام متغیرها صفر بدست میاد
البته اینو یادم رفت بگم، تقریبا همه پارامترام توی loop هستن
جوابم کامل بود و یهو اینجوری شد والا موندم چ کار کنم
بازم تشکر میکنم
پس ظاهرا اینایی که گفتین، ظاهرا یه سری از پارامترا به این پارامترایی که حذف کردین وابسته بودن. الان که حذفشون کردین باید براشون جایگذین پیدا کنین
سلام
براي عدد pi در گمز دستوري وجود دارد؟ يا بايد مقدار عددي آن (3.14) را قرار دهيم؟
مرسي
سلام
کافیه که pi رو استفاده کنین همینجوری که هست. جزو فانکشنای تعریف شده گمزه.
سلام
ممنون که جواب دادید
تکرار اول و دوم خودمون به ضرایب وزنی مقدار میدهیم اما برای تکرارهای بعدی برای اینکه مشخص بشه مقدار ضریب وزنی چقدر است از این فرمول ها استفاده می کنیم. برای اینکه نتایج قابل قبول تری بدست بیاند.
با عرض سلام و خسته نباشید
خدمت اعضای محترم سایت تخصصی گمز و تشکر بابت سایت خوبتون
من یک برنامه گمز دارم که تابع هدفم دو هدفه است و از روش ضرایب وزنی استفاده کرده ام به این صورت
positive variables
wc(iter) wight coefficient
we(iter) wight coefficient ;
wc.fx(iter)$(ord(iter)eq 0)=0;
we.fx(iter)$(ord(iter)eq 0)=1;
wc.fx(iter)$(ord(iter)eq 1)=1;
we.fx(iter)$(ord(iter)eq 1)=0;
eq1(iter)..wc(iter)$(ord(iter) eq 2)=e=((wc(iter-1)+wc(iter-2))/2);
eq2(iter)..we(iter)$(ord(iter) eq 2)=e=((we(iter-1)+we(iter-2))/2);
eq3(iter)..(wc(iter)+we(iter))=e=1;
اما نمیدانم که برای تکرارهای بعدی برای ضرایب وزنی جواب منطقی نمیگیرم.
با تشکر
سلام
ممنون لطف دارین.
منظورتون از تکرارای بعدی چیه؟ وزنی که تکرار نداره. یه بار یه هدف حساب میشه. دفعه بعد اون یکی. بعد جفتشون با هم
با سلام
ممنون از مطالب عالیتون.
برای تعریف پارامترهایی که در زمان اجرای مدل مقدار میگیرند و از ابتدا مقدار آن ها مشخص نیست ، چگونه باید آن ها را تعریف کرد؟
با سپاس
سلام
مرسی لطف دارین
مث پارامترای دیگه تعریف کنین.
parameter a(i);
بعد دیگه در طول کد بلایی که میخواین سرشون بیارین
خیلی ممنون از پاسخ سوالی دادین.
یه سوال دیگه داشتم از خدممتون. من یک مجموعه اندیس j=1…n(p رو دارم که خود n(p با توجه به مقدارp مقادیر متفاوتی میگیرید.
p/1*2
n(1)=2
n(2)=3
یه بار
j=1,2
بار دوم
j=1,2,3
که در اینصورت با توجه به مقدار p , اندیس متفاوته. حال به چه صورت باید اندیس j رو تعریف کنم.
با تشکر
سلام
خب روش زیاده. اگه مدلتون همینقده و تعداد p ها بیشتر نمیشه، شما بهتره که به صورت دستی یه j تعریف کنین و همین j رو به دو بخش j1 و j2 تقسیم کنین و که j1,j2 زیر مجموعه j هستن و یکیشون مقادیر 1و2 و یکیشون مقادری 1 تا 3 رو میگیره.
اگه مقادیر p بیشتر بشه، بهتره از دستور شرطی eval استفاده کنین. که نیازمند مقداری مطالعه هست
سربلند باشید
با سلام
من برای تحلیل حساسیت در نرم افزار گمز (کدنویسی به رو عادی)، باید ابعاد مدل را چندین بار بزرگ کنم که چند جدول با اعدادی تصادفی دارم، برای تولید جداولی از اعداد تصادفی بین یک رنج عدد خاص، چه فرمول هایی باید اضافه کرد؟
با تشکر
سلام
از تابع uniform میتونین استفاده کنین. مث uniform(2,4)
سلام ببخشیدیه سوال دیگه داشتم :
ضرایب تابع هدف رو هم باید در قسمت پارامتر ها بیاریم؟
مثل ضرایب جریمه که اولویت ایجاد میکنن
سلام من کد زیر را نوشتم همش اروز170 برای نقض دامنه میده .آخه مشکلش چیه؟؟؟
set
i roz ha/1,2,3/ ;
set
j doure zamani/1,2,3,4/ ;
set
l ostadan/1,2,3/ ;
set
M dars ha/1,2,3,4,5,6/ ;
set
N kelas ha/1,2/ ;
parameter a (i,j,l) ademesional /i1.j1.l1 1
i1.j1.l2 1
i1.j2.l1 1
i1.j3.l1 1
سلام
شما وقتی میگید مجموعه i 1 2 3 هست، دیگه مجاز نیستید که تو جداول و پارامترها چیزی مثل i1 رو بزنین، باید همون 1 رو بذارین، مطالب همین صفحه رو با دقت مطالعه کنین
موفق باشین
ممنوووون خیییلی لطف کردید متشکرم
سلام من کد زیر را نوشتم ارور170 برای نقض دامنه میده.تورو خدا بگید چه مشکلی داره….
با سلام و احترام
بنده در مدلم پارامترهایی با مقادیر زیر دارم، چگونه می توانم در گمز مدل کنم؟
i=1,2,3,4
d(i)
d1=uniform(10-20)
d2=uniform(30-40)
d3=uniform(5-10)
d4=uniform(7-14)
نمادها و پارامترها را تعریف کردم در مقداردهی مشکل دارم.
سوال دوم آیا در جدول می توان مقدار یک پارامتر را به صورت uniform نوشت؟
سلام
به شکل زیر تعریف کنین:
D("1")=uniform(10,20);
سوال دوم. بله میشه
سلام.ممنون از مطالب مفیدتون.اگر بخواهیم به یک متغیر مقدار اولیه بدهیم وبعد در مراحل بعدی با استفاده از معادلات محاسبه شود .باید این مقدار در قسمت معادلات وارد
شود یا اسکالرها؟مثلا1000= (1,1) x
سلام
ممنون.
به این روش variable initialization میگن. بعد اینکه متغیر رو تعریف کردین. میگین که جناب گمز مقدار این متغیر رو از یانجا شروع کن:
x.l("1","1")=1000;
میشه لطف کنین راهنماییم کنید کد زیر چه اشکالی داره که ارور 122 رو میده؟
sets
j/1,2/
it/1/;
sets
z(it,j)/1.1,1.2/;
parameter alfa(z)/1.1 1,1.2 1/;
سلام
تو پارامترها نمیتونین مجموعه های دو بعدی داشته باشین. از روش دیگه ای استفاده کنین
سلام. وقتتون بخیر. خیلی خیلی ممنون برای وبسایتتون.
من دارم یک مدلی رو که برای حرکت AGV نوشته شده رو کد میکنم. اما تو اولش موندم وای به حال بقیش!
v: مجموعهي ماشينهاي خودراهنما =2
ww: مجموعهي کارگاهها =4
cc: مجموعهي محصولات =3
(U(c: تعداد مراحل ساخت محصول c
3=(U(1
3=(U(2
4=(U(3
(s(c,1), s(c,1),.., s(c,m) , …, s(c,u(c)) } : S(c} مجموعهي مراحل ساخت هر محصول و(s(c,m مرحله m ام از ساخت محصول c
(s(1,1), s(1,2), s(1,3) } : S(1}
(s(2,1), s(2,2), s(2,3) } : S(2}
(s(3,1), s(3,2), s(3,3) , s(3,4) } : S(3}
مجموعهي مراحل ساخت همه محصولات
(TS=s(1)Ụ s (2) Ụs(3
(Seq ( c: مجموعهي مراحل ساخت هر محصول در هر ايستگاه کاري ( ترتيب ساخت هر محصول) و (q(c,m,W محصول c ام در مرحله m ام ساخت در ايستگاه w ام.
{(Seq ( c ) : { q(3,1,1), q(3,2,2), q(3,3,3), q(3,4,4
من تا اینجا اینجوری نوشتم:
;/Scalar v / 2
;/Scalar ww / 4
;/Scalar cc / 3
;/set k /1*v
;/set w /1*ww
;/set c /1*cc
;(alias(w,r
;/Parameter u(c)/1 3,2 3,3 4/;
;/Parameter s(c)/1 s1,2 s2,3 s3/;
((table s(c,m(c
3 2 1
(s(1,1) s(2,1) s(3,1
( s(1,2) s(2,2) s(3,2
(s(1,3) s(2,3) s(3,3
(s(3,4
این جدول آخریه اعدادش بهم میخورررره……
ستونش از 1 تا 4 نوشتم و سطر آخرش هم دو تا صفر داره
حالا….
من از جایی که میخوام( S(c ها رو معرفی کنم. گیر کردم . چه کار کنم؟ m رو معرفی کنم؟ چطوری؟
برای (Seq ( c که خدا بدادم برسه …. اصلا چی بگم….
میتونید کمکم کنید؟ ممنون میشم.
شانس من با چه مدلی دارم گمز یاد میگیرم:(
ظاهرا کد سراسر مشکل داره
مرسی که کمک کردین. موفق باشید…
سلام
من یه پارامتر تعریف کردم،مثلا (dis(i،که /i1*i30/.بعد یه متغیر دارم مثل x،بعد میخوام یه متغیر دیگه من مقدارش برابر بشه با (y=dis(i=x،یعنی مثلا اگر x=5 شد،متغیر y من برابر بشه با آرایه 5ام پارامتر dis
ممنون میشم اگه راهنماییم کنید
سلام
از دستور ifthen استفاده کنین. در ضمن، تو نوشتن شرط مربوطه دقت کنید که Ord باید استفاده کنین یا سایر شرطها رو
سلام. یه سوال دارم میخواستم اگه امکانش باشه راهنماییم کنین. یه پارامتر پنج اندیسه دارم که دو مقدار فقط میتونه بگیره برای مثال اعداد 570 و 520. اما این مقادیر با توجه به شرطی که برای یک متغیر (پنج اندیسه) وجود داره تعیین میشه. و این شرط به این صورته؛ اگه متغیرم مقداری بین صفر و 850 بگیره اون پارامتر 570 و اگه مقداری بزرگ تر مساوی 850 شد اون پارامتر 520 بشه. این شرط رو با دلار تو یه محدودیت نشون دادم اما ارور میده و مقدار پارامترو میخواد. نمیدونم اینو چطور تو گمز بنویسم
ممنون میشم اگه راهنماییم کنید.
سلام
این سوالی هست که اغلب کاربران گمز باهاش مواجه هستن.
شما دو تا راه دارین. اول اینکه یه فرمول بنویسین (مثلا چند تا محدودیتش کنین) و این شرایطی که گفتین رو توش لحاظ کنین. تمرین خوبیه واسطون.
روش دوم هم استفاده از دستور ifthen در gams هست. شما این دستور رو یاد بگیرین. سادست.
c1.. x=e=ifthen(y>0,5,2)
کد بالا میگه که اگه y>0 باشه آنگاه x برابر 5 میشه. در غیر این صورت x برابر با 2 میشه.
دو تا نکته این وسط وجود داره:
1. شما هر دو رو باید متغیر تعریف کنین.
2. اگه از دستور ifthen استفاده کردید باید از solver های مخصوصی مثل sbb استفاده کنین.
پاینده باشید
با سلام، یه سوال داشتم اگه لطف کنید راهنمایی کنید ممنون میشم. اگه پارامترها یک مقدار تصادفی بین یک بازه بگیرن یعنی مثلا (5,10)D=uniform چطور باید تو گمز وارد کنم. من به صورت زیر وارد میکنم خطای 96 میده.
parameters
D(k,j,t)=uniform(5 10)
S(l,j,t)=uniform(15 30);
سلام
اینجوری
D(k,j,t)=uniform(5,10) ;
ممنون از راهنماییتون ولی اگه بین 5 و 10 کاما بزارم که واسه اونم خطا می گیره. همچنین با گذاشتن کاما 5)uniform آبی میمونه ولی 10 مشکی میشه. وقتی هم که دقیقا کد بالا رو وارد میکنم فقط به جای کاما، اسپیس میزنم خطای 96 میده. کد رو باید تو قسمت parameters وارد کنم دیگه؟
شما باید ابتدا پارامتر رو تعریف کنین، سمی کالون بذارین بعدش فرمول رو بنویسین. مشکل دقیقا همین جاست. دقت کنید:
parameter x;
x=unifrom(4,6);
با سلام، یه سوال داشتم اگه لطف کنید راهنمایی کنید ممنون میشم. اگه پارامترها یک مقدار تصادفی بین یک بازه بگیرن یعنی مثلا (D=uniform(5,10 چطور باید تو گمز وارد کنم. من به صورت زیر وارد میکنم خطای 96 میده.
parameters
(D(k,j,t)=uniform(5 10
(S(l,j,t)=uniform(15 30;
ممنونم از پاسخگویی سریعتون، من یه مشکل دیگه ام دارم اینه که میخوام در یه حلقه for هر بار یکی از عناصر r مقدار بگیره، ولی وقتی به طریق زیر تعریف کردم ارور میده، اصلا میشه این کارو کرد تو گمز؟
set p /1*10/;
patameter r(p);
scalar n;
for (n = 1 to 10,
r(“n”)=7;
);
سلام
کد زیر کمکتون میکنه
parameter r(p);
loop(p,
r(p)=SomeThing ;
);
ممنونم
سلام، آیا امکان تغیر مقدار یکی از عناصر یک پارامتر وجود دارد؟ مثلا پارامتر r(i)=0 در ابتدا تعریف شده و در جای دیگر r(1)=7 گردد. اگر بله با چه دستوری؟
سپاس
سلام
وقتی شما متغیر مذکور رو تعریف کردید از اون خط به بعد r مقدار صفر میگیره. ولی اگه میخواین r(1)=7 بشه طبق دستور زیر عمل کنین. (یه مثاله فقط)
parameter r(i);
r(i)=0;
r("1")=7;
با عرض سلام و وقت بخیر
چگونه میتوان مجموعه ای مانند {Ni={j│dijt≤s را در گمز کد کرد؟ لطفا بنده رو راهنمایی بفرمایید… با سپاس.
سلام
لطف کنید که مشخص کنید که d و s و n متغیر هستند یا پارامتر تا راهنماییتون کنم.
موفق باشین