پیرو درخواست تعدادی از دوستان، در این تاپیک تعریف زیر مجموعه ها و اجتماع آنها با هم را به صورت مختصر معرفی می نماییم.
همانطور که در بخش های پیشین گفته شد، تعریف یک مجموعه با دستور Set انجام می پذیرد. حال فرض کنید دو مجموعه به نام I و J وجود دارند. این مجموعه ها اگر با هم ترکیب شوند مجموعه K را تشکیل می دهند.
به عنوان مثال مجموعه I شامل {Gas,Coal,Oil} باشد. و مجموعه J شامل {Electricity,Water} باشد. و مجموعه ی K نیز اجتماع این مجموعه ها باشد.
جهت تعریف مجموعه K دو رویکرد کلی وجود دارد:
رویکرد اول:
در رویکرد اول، فرض می شود که دو مجموعه اول، مجموعه ی سوم را تشکیل میدهند، در این رویکرد مجموعه ی سوم ویژگی ها و صفات خود را از این دو مجموعه می گیرد.
Set i/Coal,Gas,Oil/
j/Electricity,Water/
K/Set.i,Set.j/
رویکرد دوم:
در رویکرد دوم، دو مجموعه ی اول زیر مجموعه ی مجموعه ی سوم محسوب می شوند. یعنی I و J زیر مجموعه ی K می باشند.
Set k/Coal,Gas,Oil,Electricity,Water/
i(k)/Coal,Gas,Oil/
j(K)/Electricity,Water/
متغیر Y(k) را در نظر بگیرید. اگر با رویکرد اول مجموعه ی K را تعریف کرده باشیم، در صورت استفاده عبارتی مانند Y(j) در مدل، برنامه ما قطعا Error خواهد داد! ولی اگر با رویکرد دوم تعریف شده باشد، عبارات Y(k) , Y(j) , Y(I) توسط GAMS منطقی تلقی خواهند شد.
جهت آشنایی بیشتر با تعریف مجموعه ها و دستور Set به نوار دسته بندی، تعریف مجموعه ها مراجعه فرمایید.
با تشکر
مدیریت سایت gamsbook.ir
ایمیل: Support@gamsbook.ir
شماره تماس: 3325-405—0919
سلام وقت بخیر
می خواهم برای این پارامتر COA(rb,m,t) به ازای rb=1 ,rb=2 هر کدام جداگانه داده در بازه مشخص با uniform ایجاد کنم، به چه صورت و در کدام قست ( پارامتر یا تیبل) باید چه کدی بزنم؟
سلام
سلام وقت بخیر
یک مجموعه دارم مواد اولیه(r) ;که شامل دو مجموعه ی مواد غذایی (rf)و پسماند گیاهی(rb) است. به عنوان مثال لوبیا و ذرت که پس از برداشت به محصول غذایی لوبیا و پسماند لوبیا برای ادامه مراحل زنجیره تامین تفکیک می شوند.
r, rb ,rf را به چه صورت باید تعریف کنم و به چه صورتی کد بزنم که در دو محدودیت زیر مشکلی ایجاد نشود.
.wv(rb,m,t)=e=xib(m,rb)*S(r,m,t)
Q(rf,m,t)=e=xig(m,rf)*S(r,m,t)
محدودیت ها نشان دهنده موارد زیر است:
مقدار کل پسماند گیاه، از بازده تولید پسماند گیاه (میزان پسماند تولید شده) در واحد سطح و کل سطح مورد استفاده در هر منطقه کشت (Srm) محاسبه می شود.و محدودیت دیگر مقدار هر محصول غذایی به دست آمده از محصولات کشت شده در هر منطقه کشت در هر دوره زمانی را نشان می دهد.
در واقع زمین استفاده شده برای لوبیا و پسماند آن یک مقدار است و جمع دو مقدار نیست. اما در ادامه لوبیا و پسماند کاملا تفکیک می شوند.
با تشکر از شما
سلام و ادب
لطفا اول این سه مجموعه رو بازتر کنین. چه محصولاتی هستن، و چند نوع ماده غذایی و چند نوع پسماند برای هر کدام ایجاد می شود.
سلام
من یک مجموعه دارم که از داخل اکسل باید بخونه بعد از این مجموعه دو زیر مجموعه دیگر باید از همان مجموعه اول در اکسل بگیرم. میشه لطفا راهنمایی بفرمایید؟ من یه دستور نوشتم که ارور ellements is redefined میدهو فکر میکنم اشتباه باشه دستور فراخوانی مجموعه از اکسل
سلام
راه ساده اینه که یه شیت ایجاد کنید، و اون دو زیر مجموعه رو توش داشته باشید و تک تک فراخونی کنید.
سلام وقتتون بخیر،
اگر یه مجموعه به اسم I داشته باشیم که خودش اجتماع چندتا مجموعه دیگه هست، مثلا K, M, H, Lو…، مجموعه J هم داشته باشیم که alias همون I هست،
و بعد توی محدودیتها بخواهیم summation داشته باشیم روی متغیر Xi,j به طوری که سامیشن i روی مجموعه K باشه و سامیشن j روی اجتماع Kو Mو H کد این سامیشن رو چطور باید بنویسم؟ ممنون میشم راهنمایی کنید.
سلام
بهترین کار اینه که شما یه مجموعه مرجع تعریف کنین. بعد زیر مجموعه هاش رو تعریف کنین. بعد به ازای ترکیبات مختلف زیر مجموعه هاش مجموعه تعریف کنین. مثال زیر رو ببینید:
ممکنه من اشتباه تایپی هم کرده باشم. چک کنید خودتون.
سلام و وقتتون بخیر..سوالی دارم ممنون میشم راهنماییم کنین.
من دارم یه برنامه دو سطحی مینویسم بخش اول هزینه های مربوط به برنامه ریزی hourly و بخش دوم هزینه های corrective action بخش real time.
باید دو تا مجموعه زمانی تعریف کنم یکی h=1*24 و دیگری t=1*96 که هر کدوم از ساعتها معادل 4 تا ربعه ..برای تعریف متغیرها و پارامترها حتی قیود باید علاوه بر مجموعه های سیستم نظیر شماره خطوط و زنراتور و .. h , t هم بیارم.
حالا من اومدم یک مجموعه دو بعدی k در نظر گرفتم و انو به شکل زیر نوشتم:
ولی وقتی متغیره رو براساس k مینویسم انگار اصلا ترتیبی که که میخوام رعایت شه نمیشناسه حتی خودk.
اومدم واسه هر قیدی طبق ord میزان h , t های مرتبط دستی وارد کردم مثل:
heq1(gen,h,t)$(ord(h)=1 and ord(t)>=1 and ord(t)=1 and ord(t)=1 and ord(t)=1 and ord(t)<=4) .. pg(gen,h)-FRD_gcap(gen,t)=g=u(gen,h)*Pmin(gen);
که این کار و خیلی سخت میکه چوم باید همینا 24 بار تکرار کنم.
تو بخش real time هم یک سری قید های دیگه باید اضافه بشه که توش هم متغیر های day ahead دارم و متعیرهای real time که تابعی از h ,t
یه سوال دیگه هم دارم برای تعریف پارامتر هایی که برحسب h و t و مثلا bus هستن به صورت زیر وارد کردم درسته؟
وهمین زور تا اخرین بازه.
میبخشین متنم طولانی شد.ممنون که وقت میزارین.
سلام
سوال اولتون، متغیر شما چی هست؟ اندیساش چیا هستن؟ نباید اندیس رو روی kبذارین. باید روی t,h باشه. اون فرمول شرطی که نوشتین اشتباهه.باید بر حسب همین k باشه. ممکنه شما فقط به tنیاز داشته باشین الیته. این بستگی به مدلسازی شما داره.
جدول دومی به نظر مشکل نداره.
با سلام
+……+so(h)=(h -1)so
در عبارت فوق اگر میزان h از یک تا 24 باشد و بخوایهم عبارت اول را به بعنوان مقدار اولیه تعریف کنیم چطور باید نوشت.
so(h) متغییر می باشد.
به ازای h=0 می خواهیم در ابتدا تعریف کنیم so(h-1) =1000
سلام
میتونید مقدار اولیه رو به عنوان بارامتر با نام s00 تعریف کنین و بنویسید:
سلام
من یه ست دارم که داده هاش تعداد 34 باس(i) است و این تعداد باس رو الیاس کردم به J و حالا می خوام به عنوان مثال: اگر داشته باشم (m(i2.j4 حالا میخوام یه k داشته باشم که این k نشان دهنده شماره خط باشه و وقتی به نرم افزار میگم متغیر (P(K3 گمز بدونه که مثلا K3 به معنای i3.j7 هست و (P(K3 به معنای P (توان عبوری بین) بین i3.j7 است.
باید چه جور این رو تعریف کنم؟
سلام
میتونین به جای p(k تعریف کنین p(k,i,j بعد هر جا p استفاده شد، بگین به شرطی که m برقرار باشه. مجموعه های چند بعدی رو مطالعه کنین.
سلام .دربرنامه زیر مقدار l قبل از لوپ برابر با j1 است .سوال من اینجاست که چجور دستور l(j) = l(j-1)l مثل لوپ عمل میکند؟
set i /1*4/
j /j1*j4/
l(j);
l(‘j1’) = yes;
loop(i,
l(j) = l(j-1);
);
سلام
حلقه رو چرا روی i نوشتین؟
ضمنا حلقه نیاز نداره این فرمول، کافیه فقط بعد l(j شرط بذارین که j بزرگتر مساوی j2 هست. (با ord)
سلام. وقت شما بخیر.
در شرط محدودیت ها اگر بخواهیم بیان کنیم که j عضو اشتراک دو مجموعه ای هست که در پارامتر تعریف شده، مثلا s(k) و s(h) دستور آن را در گمز چگونه می نویسم؟ اشتراک دو مجموعه را چگونه نمایش می دهیم؟
و یک مسئله دیگه اینکه من s(k) را در پارامتر تعریف کردم ولی s(h) را خیر. آیا میشه آن را alias زد به s(k)?
در واقع s(k) مجموعه ماشین هایی هست که قطعه k روی آن ها پردازش می شوند. , s(h) هم به همین شکل برای قطعات h
و آیا قطعات k و h را هم باید با دستور alias با این شرایط مشابه در نظر گرفت؟
متشکرم.
سلام
ببینید مقداری سخت با مسئله برخورد می کنین شما. آسون تر فکر کنین. چون همیشه بهترین راه حل ساده ترینشه.
من جای شما باشم، اول میام یه P تعریف میکنم که اندیس تمامی قطعات باشه. بعد h,p,k رو آلیاس میکنم. بعد s(p,m رو به صورت پارامتر صفر و یک تعریف میکنم. هر جا یک بشه یعنی ماشین 1 می تونه قطعه p ام رو پردازش کنه یا عکسش. اینجوری میتونین جاهای مختلف از شرط ها هم به راحتی استفاده کنین.
آلیاس فقط روی مجموعه ست.
سلام.من یک مسئله ی مکانیابی مسیریابی دارم که شامل نودهای تولید کننده(i)،مراکز توزیع(j) و مشتریان(k) هست و مسیریابی برای هر دو سطح هم از تولیدکننده به مراکز توزیع و هم از مراکز توزیع به مشتریان در نظر گرفته شده است و برخی از محدودیت های مسئله روی iUj جمع بسته می شود و برخی هم روی kUj.می خواستم بدونم تعریف این مجموعه ها به جه صورت باید باشد.ممنون.
سلام
میتونین یه مجموعه مجع تعریف کنین. بعد چند تا زیر مجموعه هم ازش داشته باشین و تو محدودیت ها از اون اندیس استفاده کنین. مثلا:
set ijk/1*30/
ij(ijk)/1*20/
kj(ijk)/11*30/
i(ijk)/1*10)
...
با سلام
اگر ما یک پارامتر تعریف کنیم که دامنه اش j باشد، مثلا x1(j) . و حالا اگر بخوایم خود x1(j) را به صورت دامنه برای یک متغیر دیگر مثلا v(x(j)) تعریف کنیم؟ در نرم افزار گمز چجور نوشته میش ود. ممنون میشم راهنماییم کنید.
سلام
ببینید سوال مقداری کلی هست. و بسته به ساختار مسئله و خواستگاه شما فرق میکنه چه بلایی سرش بیارین. یه روش اینه که شما یه اندیس دیگه مثل t تعریف کنین که v(t) بشه متغیر شما. حالا تو محدودیت ها هر جا v داشتین، میتونیسین به شرطی که ord(t)= x باشه. که خود ایکس چون متغیره، یا باید از دستور ifthen استفاده کنین. یا اینکه مقداری ساختار رو دستکاری کنین.
سلام خسته نباشید. ببخشید من نمیدانم چرا نرم افزار و لایسنس را از همین سایت دانلود کرد ولی متاسفانه بعد از عمل runگرفتن و رفع errorها در صفحه جواب گزینه های displayاصن وجود ندارد. با یکسری گزینه های دیگر. بنظرتان چه کاری باید انجام دهم.خیلی ممنون و با سپاس از زحماتتان.
سلام
لطفا پنجره ی لاگ (process window) رو بذارین اینجا ببینیم. ده خط آخر رو بذارین.
سلام
در گمز چگونه می توان پارامتر شرطی زیر را نوشت ؟ در قسمت تعریف پارامترها؟پارامترα با اندیس kpm و در خود نامعادله چجوری بنویسم ؟
1 if operation k of part p can be processed on machine type m
0 otherwise
پیشاپیش از پاسخنون سپاسگزارم.
سلام
A رو به شکل صفر و یک تو پارامترها تعریف کنین. بعد تو محدودیت بزنین به شرط a
Eq(k,p,m)$a(k,p,m)..
سلام ، خسته نباشید.
من داخل مدلم یک محدودیت دارم که به شکل زیر است.
L(k,d) که اگر مسیر k از انبار d شروع شود.
I(k,d) اگر که اگر وسیله نقلیه مربوط به مسیر K در ابتدا در انبار d واقع شده باشد.
t(k) روزی که در آن مسیر k زمان بندی می شود.
محدودیت
L(k,d)=I(k,d)
که به ازای هر d
و هر k بشرطی که K(t)=1 باشد .
ببخسید اینو چطوری میتونم کد کنم .
باتشکر
سلام
set
k/1*2/
d/1*2/
variable
L(k,d)
I(k,d)
t(k)
;
equation
eq1
;
eq1(d,k)$(t(k) eq 1)..L(k,d)=e=I(k,d);
سلام
خسته نباشید
ببخشید یه سوال داشتم یه مجموعه به نام t دارم j هم دارم که زیر مجموعشه (j(t حالا میخوام تو پارامترام اطلاعاتی وارد کنم در باره مجموعه j مینویسم (b(j ارور میده چطور باید طرح شه چون j خودش زیر مجموعه t بوده.
سلام
شما میتونین از همون اول b(t) تعریف کنین، یا مثلا b(*) تعریف کنین. ولی وقتی مثلا تو محدودیت b(j) دارین، به همین شکل خودتون b(j) واردش کنین.
سلام
در خصوص توابع توزیع در گمز سوالی داشتم
نوشته بودید که با دستور normal میشه عددی رندم با توزیع نرمال داشت. می
خواستم بدونم ایا تابعی در گمز هستش که تابع چگالی احتمال تابع توزیع
نرمال رو هم بده؟
البته دستور زیر تو راهنمای گمز دیدم اما گمز میگه نمیشناسمش
pdfNormal(x,MEAN,STD DEV)
ممنون میشم اگه راهنمایی بفرمایید
سلام
شما به کرات این سوال رو تو سایت پرسیدین، به کرات هم بهتون جواب داده شده! حداقل ایمیلتونو چک کنین که جوابی که داده شده چیه آخه.
نمیشه بذر بکاریم و نریم درو کنیم و انتظار محصولم داشته باشیم که
سلام آقای محمودی
ایمیلتون، چک کردن سایت بود که هزار بار بالا پایین کردم ندیدم دوباره پرسیدم نظر وجوابی نبود. اولین باریه که سوالم رو جواب دادین که اونم به این شکل.
در مورد جواب هم الله اعلم، شاید جواب دادین من نتونستم پیدا کنم به هر ترتیب سایت خوبی دارین
موفق باشید
سلام
یه بار اینجا جواب داده شده: سپتامبر 13، 17:58
تعریف متغیرها
یه بار اینجا: سپتامبر 14
خطاهای گمز
البته من pdfnorm کار نکردم. نمیدونم تو چه نسخه هایی استفاده میشه. احتمالا نسخه های محدودی باشن نمیدونم. ولی تابع رو همونطوری که گفتم میشه نوشت.
سلام
من داخل مدلم تخصیص درب به کامیون هارو دارم که d, dp توالی تخصیص درب هستن که این d و dp در برخی موارد d عضو RD و dp عضو SSD و در برخی موارد برعکس هسش یعنی d عضو SSD و dp عضو RD هستش . بنظر شما این اندیس گذاری درست هستش ، چون من فکر میکنم اشتباه هستش .
d total doors
RD(d) receiving(strip) dock doors
SSD(d) shipping(stack) dock doors
alias (d,dp)
و در هرجایی که d عضو RD هستش RD قرار بدم و به همین ترتیب برای بقیه
سلام
بله ظاهرا درسته
سلام ، من داخل گمز به چه شکل این مدل رو کد کنم ، چون p از 1 تا n مجموعه گره برداشت و d از n+1 تا 2n مجموعه گره تحویل است که هر درخواست بصورت زوج مرتب (i, i+n) که i برای گره برداشت و i+n گره تحویل است .
که داخل مدل h:(i,j) زیر یه sum هستش
باتشکر
سلام
مینونین از مجموعه های دو بعدی استفاده کنین و یا اینکه یه پارامتر تعریف کنین، که هر جا شرط بالا برقرار باشه، مقدار این پارامتر برابر یک بشه. و هر جا تو محدودیت ها شرط زوج مرتب داشتین، به جاش بگین به شرطی که این پارامتر برابر با یک بشه
سلام
ببخشید جواب سوال بنده رو ندادین .
باتشکر
با سلام
اشتباه در محاسبات معادلات در خروجي جواب گمس به چه دليل است؟
داريم:
.
.
اشكال از جمع زير نتيجه مي شود
Yt(1) =E= 874 اشتباه است
بلكه Yt(1) =E= 847 صحيح است
سلام
مهندس عذرخواهی میکنم. ولی ما اینجا کارمون رفع ارور نیست که. کل کدتون رو گذاشتین تو سایت نمیشه که.
همین رو بگم که گمز دقیقا همون چیزی رو به شما نشون میده که بهش دستور میدین.
با سلام
چگونه مي توان ضرب زير كه مربوط به ضرب يك ست در مجموع است را انجام داد
در مثال زير خطا ايجا مي شود.
SETS
i /1*10/
t /1*3/
VARIABLES
POSITIVE VARIABLES Yt;
EQUATION
const1 (t);
const1 (t) .. Yt(t) =l= ( sum(i , r(i)*t) );
سلام
به جای t تو معادله باید بنویسین t.uel یا Ord(t)
سپاسگزارم
با سلام
چگونه مي توان فرمول زير را در گمس مدل سازي كرد
t=1) y1 <= sum(d1+d2-(I_0))
t=2) y1+y2 <= sum(d1+d2+d3-(I_0))
t=3) y1+y2+y3 <= sum(d1+d2+d3+d4-(I_0))
سلام
از دستور شرطی دلار استفاده کنین.
تو بخش معادلات، کامنتها رو بخونین.
معادلات
سلام
sum از i=0 تا n در sum از j=0 تا n در sum ازm=1 تا v در x(i,j) به توان m ضرب در tc(i,j) بعلاوه sum از m=1 تا v در sum از j=1 تا n در co(m) ضرب در X(0j) به توان m
من با توجه به اطلاعاتی که در سوالات بالا پرسیده شده است این گونه اندیس گذاری کردم .
در اینجا i و j ترتیب توالی گره ها را مشخص می کند که یکبار زیر مجموعه گره برداشت هستن و یکبار زیر مجموعه گره تحویل و ..
sets
h /c1,p1,p2,p3,d1,d2,d3,d4/
r Index for products /1*2/
m Index for vehicle /1*3/
o(h) cross dock /c1/
p(h) Set of pickup nodes /p1,p2,p3/
D(h) Set of delivery nodes / D1*D4/
qq(h) /p1,p2,p3,d1,d2,d3,d4/
alias(i,j,k,h)
سلام
اولا شما چرا اندیس ها رو از صفر تعریف نکردین؟
ثانیا لطفا عکس معادله رو یه جایی آپلود کنین تا ببینیم
سلام ، ایمیل کردم
سلام
ظاهرا مشکلی نباید داشته باشه. فقط شما اندیس رو از صفر تعریف نکردین ولی تو سیگما صفر هم دارین. صفر رو یا باید حذف کنین یا باید تو اندیس هم صفر بیاد
سلام ، مرسی از کمکتون
ببخشید من توی بعضی از محدودیت های مدل i عضوی از مجموعه p و در برخی موارد i عضوی از مجموعه D هستش ، چون i ترتیب گره را مشخص می کند .
بنظر شما با این اندیس گذاری دچار مشکل نمی شم .
خیر. ولی حواستون باشه اولا متغیر رو با اندیس h تعریف کنین، ثانیا هرجا قراره اعضای مجموعه ی p رو بگیره، باید اندیس متغیری که تعریف کردین رو بذارین p و…
سلام
ببخشید بنظر شما این اندیس گذاری بنده درست هستش
i Index for nodes (suppliers and customers) /1*7/
r Index for products /1*2/
m Index for vehicle /1*3/
o cross dock /0/
p Set of pickup nodes /p1,p2,p3/
D Set of delivery nodes / D1*D4/
h/set.i,set.o/
alias(i,j,k)
alias(m,mP);
بعد تابع هدف بنده
∑_(i=0)^n▒∑_(j=0)^n▒∑_(m=1)^v▒■(〖tc〗_ij & x _ ij^m +&∑_(m=1)^v▒∑_(j=1)^n▒■(〖co〗_m&x_0j^m ))
سلام
تابع هدفتون رو درست ارسال نکردین.
سلام .ببخشید خطای 282 دلیلش چیست.خیلی فوریه خواهش میکنم جواب بدید
سلام
این ارور متعلق به اینه که گمز نمیتونه inc فایل یا همون include file رو باز کنه. دلیلش اینه که شما یا درست ادرس ندادین، یا اینکه دایرکتوری دیفالتتون رو تغییر دادین. file/project/new project رو بزنین. فایلا رو اونجا بریزین و مجددا امتحانش کنین.
سلام و خسته نباشید
یه سوالی دارم ازتون، ممنون میشم راهنمای کنید.
ببینید من یک مجموعه مشتریان دارم i، و یک مجموعه کارهای مشتریان j. مجموعه ای دو بعدی تعریف کردم که شامل مشتری و کارها می شود.
i=1*6
j=1*7
که مجموعه a(i,j برای iها بعضی از jها رو شامل میشه… تا اینجا همه چی اوکیه
حالا من یه مجموعه دیگه دارم که از 1 تا card(a رو شامل میشه، یعنی برای تمام yes های مجموعه a
میشه راهنمایی کنید که چطور می تونم این مجموعه رو تعریف کنم
و روی این هم مشکل دارم
j costumer /1 * 10/
i jobs of costumer /1 * n(j)/
میشه لطفا راهنمایی کنین اینو چطور کد کنم
سلام
چیزی که تو set میارین باید واضح باشه. n(j) درست نیست. شما عددی مقدار بدین
ممنون که جواب دادین
آخه مثلا اگه 10 تا j داشته باشیم، در اینصورت ما 10 مجموعه مختلف از i داریم.. چرا که i به j یا همون nj بستگی داره.
روی این هم مشکل دارم
j costumer /1 * 10/
i jobs of costumer /1 * n(j)/
میشه لطفا راهنمایی کنین اینو چطور کد کنم
سلام
ببینید راه زیاده، یه راه ساده و قابل فهم میتونه این باشه که یه مجموعه که شامل حاصلضرب i,j هست رو تعریف کنین. بعد با یه لوپ اون مجموعه ای که میخواین رو تعریف کنین.
مثال زیر رو ببینید:
set
t/1*42/
s(t)
i/1*6/
j/1*7/
a(i,j)/1.5,2.4,3.6,4.7/
;
loop(t,
s(t)$(ord(t)<=card(a))=yes;
;);
display i,j,a,s
با سلام
دوست عزیز واقعا ممنون از پاسخ واضح تون.
در مورد سوال اول اگه یک سری از متغییرها حدبالا و پایین داشته باشند باز هم میشه اینطور که شما گفتید تعریف کرد؟
سلام
خواهش میکنم. بله میشه. لینک زیر رو هم بخونین. خالی از لطف نیست.
تخصیص ویژگی به متغیرها در گمز
دوست عزیز من دقیقا متوجه نشدم،الان با این کد چه اتفاقی می افته،اگه ممکنه بیشتر توضیح بدید.
سلام
میشه سوالتون رو واضحتر بگین
من یک متغییر دو بعدی دارم که نمیخوام با ماتریس تعریف کنم.چون خیلی از درایه ها مقدار صفر دارند.برای اینکه به صورت یکجا این درایه ها رو برابر با صفر قرار بدم باید چه کار کرد(نمیخوام یکی یکی درایه ها رو مقدارشون رو تعریف کنم).
سوال دیگه اینکه محاسبه ای دارم که متغییراش جواب بهینه سازی است.فرمول این محاسبه رو باید کجا وارد کرد؟چون نه قید محسوب میشه نه در جواب بهینه سازی تاثیری داره.وقتی هم که در قسمت equation این فرمول رو میزنم خطا میگیره.
لطفا توضیحات رو در سطح ابتدایی بدید چون من تازه شروع کردم به کار کردن با این نرم افزار.
ممنون
سلام
سوال اولتون: فرض میکنم منظورتون از متغیر همون پارامتر ورودیه. فرض کنیم همه صفر هستن بجز a14:
parameter a(i,j);
a(i,j)=0;
a('1','4')=3;
سوال دوم: شما هر فرمولی بعد از حل دستور solve استفاده کنین مشکلی پیش نمیاد. مثلا من میگم که وقتی تو حالت بهینه z مقدار گرفت، اون رو به اضفه 5 کن. باید این کار رو بکنم:
parameter zz;
zz=z.L;
اون .L ویزگی بهینه متغیر z هست. بخش متغیرها رو بخونین حتما
تغیریف متغیرها در نرم افزار گمز
با سلام
اگر بخواهیم یک مجموعه دو بعدی را به صورت گروهی مقدار بدهیم چطور باید کد آن را نوشت؟
مثلا اگر بخواهیم E(I,J) به ازای I,J های بخصوصی مقادیر صفر داشته باشد و نخواهیم یکی یکی آنها را تعریف کنیم. اگر کانال یا گروه تلگرام از آموزش GAMS هم داشته باشید، ممنون میشم لینکش رو بذارید.
سلام
set i/1*41/
j/1*3/
A(i,j)/1.3,6.3,40.2,13.1/
بعد توی کد مثلا بنویسین :
con..sum(i,j)$A(i,j),E(i,j))=e=1;
با $ عضویت داخل مجموعه A را مشخص کنین
با سلام و خسته نباشید.
در مدل من مجموعه ای هست که بعضی اوقات تهی میشه.بنابریان عملیات که مربوط به این مجموعه اس مختل میشه به عبارتی:
i supplier/1*4/
$onempty
ds(i) disrupted suppliers
$offempty
ws(i) well-behave suppliers /1*4/
beta=prod(ws(i),(1-alpha(i)))*prod(ds(i),alpha(i));
برا محاسبه بتا چه کاری کنم که وقتی ds تهی هم هست جواب بدهد؟
سلام
من که زیاد نفهمیدم چی به چیه. ولی فک کنم دو قسمتش کنین این ضربا رو بعد جمعش کنین اوکی بشه. نفهمیدم البته :دی
با سلام:
در مدل من بسته به شرایط مجموعه های ws(i) و یا ds(i) تهی می شوند.این موضوع رو چطور باید نشون داد که در مدل اشکالی ایجاد نشود.کاربرد این دو مجموعه(set) در محاسبه این عبارت است.
beta=prod(ws(i),(1-alpha(i)))*prod(ds(i),alpha(i));
ضمنا این دو مجموعه خود زیر مجموعه مجموعه بزرگتر مانند i هستند یعنی ws اجتماعش با dsبرابر است با i.همچنین alpha , beta هم پارامتر هستند.
من تمامتلاشم رو کردم که واضح بنویسم امیدوارم خوب گفته باشم.
سلام
خیر واضح نگفتین متاسفانه. تهی بشن به چه منظور؟ کی باید تهی بشه و کی نباید بشه؟
با سلام.یک سوال داشتم.من یک مجموعه m دارم که دو تا زیر مجموعه k و d داره.حالا می خوام به عناصر این مجمعه در جدول مقدار بدم.از کجا بفمم کدوم عناصر مربوط به k و کدوم مربوط به d میشه؟مثلا عنصر اول مجموعه بزرگتر نشون دهنده k یا d?
سلام
خب یکم فکر کنین عزیز. d رو به صورت d1,d2 تعریف کنین، k هم همینطور. m هم میشه اجتماع اینا
سلاموممنون از شما.ولی فکر می کنم شما متوجه سوال من نشدید!فرض کنید مجموعه بزرگتر 17 عضو داره که سه تاش تو یک زیر مجموعه و 14 باقی مونده تو یک زیرمجمعه دیگه قرار گرفتن.حالا من سوالم اینه که مثلا عنصر اول مجمعه بزرگتر به کدوم عنصر از زیرمجموعه ها اشاره داره و همین طور تا آخر؟
یه مثال بگید
من یک مجموعه نود دارم(m) که تعدادیشون تقاضا هستن (d) و تعدادشون تامین (k) حالا میخوام فاصله بین این نودها را مقداردهی کنم t(i,j) حالا می خوام بدونم از چه شماره تا چه شماره ای در مجموعه بزرگتر نودهای تقاضا و چه شماره هایی نودهای تامین رو نشون میده.d و k به عنوان زیرمجموعه m تعریف شده اند.
عرض کردم که، شما متوجه نشدین:
m/d1*d3,k1*k5/
d(m)/d1*d3/
k(m)/k1*k5/
;
alias (m,m1)
table t(m,m1)
دیگه بقیه ش مشخصه.
دوستان لطفا تاپیک رو قشنگ بخونین.
با سلام
ببخشید سوالم اینکه در یک مساله که به طور مثال شامل 5 نود هست، پس از تعریف مجموعه ای به طور مثال با اندیس i و alias کردن آن با مجموعه j… میخواهیم مجموعه ای شامل برخی از زوج مرتب های تشکیل شده از دو مجموعه فوق (مثلا (1و2)،(1و3)، (2و4)و…(4و5)) را تعریف نموده و در یک محدودیت شرط محدودیت را تنها بر روی اعضای مجموعه فوق تعریف نماییم. حال میخواستم نحوه نوشتن کد مربوطه را لطفا تشریح نمایید. با تشکر
سلام
به بخش تعریف مجموعههای چند بعدی مراجعه بفرمایین.
ممنون از پاسخ شما. از انجاییکه در محدودیت مربوطه، دو مجموعه i و j به صورت مجزا در متغیرها به کار گرفته شده اند یا به عبارتی متغیرهای مربوطه تک بعدی هستند، تعریف مجموعه به صورت دو بعدی (E(i,j همان طور که در تعریف مجموعه های چند بعدی آمده و استفاده از آن در دامنه محدودیت ها با ارور یکسان نبودن ابعاد متغیرها و مجموعه ها مواجه می شود، لطفا اگه راه حل دیگه ای وجود داره، بفرمایید.
ببینید
شما یا باید طوری متغیر رو تعریف کنین که اندیسا توش باشن
یا اینکه شرطی که تو محدودیت میذارین طوری باشه که محدودیت رو عوض نکنه و شرط زوج مرتب ها رو هم رعایت کنه
سلام یک راه دیگه اش اینکه یک ماتریس به سایز i,j با استفاده از table تعریف کنید. هر جا که عضو بود یک باشه و عضو نبود صفر . و در محدودیت ها هر جا لازم بود این ماتریس باینری را ضرب کنید. البته پیشنهاد آقای محمودی راحت تره 😀
سلام
ببخشید مزاحم میشم ، براتون ایمیل ارسال کردم فرمودید سوالاتتون رو توی سایت مطرح کنید.
مجموعه t به عنوان پریود های زمانی دارم و مجموعه j به عنوان مهارت های ممکن.
پارامتر (alfa(j هم روی مجموعه j تعریف میشه که مقدار میگیرد.
در ادامه درون محدودیت ها اندیس t-alfa(j)+1 دارم ، شما فرمودید با الیاس تعریف کنم ولی متوجه منظورتون نشدم مگر الیاس برای دو مجموعه با اعضای یکسان نیست ؟ میشه خواهش کنم توضیح واضح تری بدین واقعا به کمک نیاز دارم.
سلام
ببینید، شما باید از دستورات شرطی استفاده کنید.
مثلا میگید که:
c1(t).. sum(t1$(ord(t1) >=ord(t) + alpha(j)+1),y(t1,j)=l=x(t);
دقت کنین رو این محدودیتی که نوشتم. احتمالا خیلی از کاراتون رو راه میندازه
سلام ، راهنمایی شما عالی بود خیلی کمکم کرد فقط یک سوال دیگه ، ممکنه شبیه به قبلی باشه ولی چون مبتدی هستم زیاد آشنایی ندارم، به هر حال ببخشید.
(((sum(m,q(m,i,(t-alphaj
در این حالت که اندیس q تغییر کرده نه سیگما چه کار باید بکنم؟
باز هم ببخشید که وقتتون رو میگیرم.
سلام
خواهش میکنم.
تو این حالت اول محدودیت باید این کار رو بکنین:
c(i,t,,t1j)$(ord(t1) = ord(t) -alpha).. .....q(m,i,(t1).....
سلام ببخشید یه سوالی داشتم .در یک مقاله مجموعه های R و D و N در نظر گرفته شده که N خودش اجتماع R و D است .اما در بخش محدودیت ها اندیس های i و j روی سیگما ها به کار رفته و روی هر سیگمادر مجدویت ها بنا به کاربرد مثلا نوشته i عضو R یا j عضو D و…. می خواستم بدونم i و j را تو گمز چجوری باید تعریف کنم؟؟؟؟؟؟؟
سلام
شرمنده من باز مزاحم میشم
اول این که من هم مشکلی مشابه ایشون داشتم یک مجموعه کلی تعریف کردم و بعد با استفاده از دستور ord بازه تعیین کردم اندیس ها در هر محدودیت و نمیدونم این روش صحیح هست یا خیر؟
بعد هم این که من با مشکل محدودیت زیرتور مواجه هستم برای حلش تنها راهی که به ذهنم میرسه اینه که با استفاده از دستور if و یا for مشکل رو حل کنم اما نمیدونم کجای کد باید این دستور رو بیارم؟ داخل معادلات یا ….؟
سلام
سوال ایشون رو بالاتر جواب دادم. نمیدونم منظورتون از بازه چیه. تو این مورد بازه درست نیست. واسه تور و زیر تور هم بسته به مدل فرق داره. از دستورات if یا مدلسازی میشه استفاده کرد. بسته به مدل ابته
سلام ببخشید یه سوالی داشتم .در یک مقاله مجموعه های R و D و N در نظر گرفته شده که N خودش اجتماع R و D است .اما در بخش محدودیت ها اندیس های i و j روی سیگما ها به کار رفته و روی هر سیگمادر مجدویت ها بنا به کاربرد مثلا نوشته i عضو R یا j عضو D و…. می خواستم بدونم i و j را تو گمز چجوری باید تعریف کنم؟؟؟؟؟؟؟
سلام
شما N رو تعریف کنین.
بعدش D و R رو به عنوان زیر مجموعه N تعریف کنین.
هر جا این حالات پیش اومد مثال زیر رو تو خاطرتون داشته باشین:
فرض کنین با تعاریف بالا، یک x(N) هم دارین که بعضی جاها به عنوان x(N) و بعضی جاها همین x به شکل x(D) به کار رفته. (توجه کنین x(D) همون x(i) هست که d,i همسان یا alias هم هستن)
هر کدوم رو به صورت زیر میتونین بنویسین.
Set N/1*10/
D(N)/1*5/
R(N)/6*10/
;
.
.
.
variable x(N);
.
.
sum(N,X(N))
sum(D,X(D))
sum(R,X(R))
مثال های بالا کل مفهومی که نیاز دارین رو بهتون میرسونه.
سربلند باشین
با سلام
از توضیحاتتون متشکرم
سوالی داشتم:
اگر اندیس i عضو مجموعه{1 و 2 و 3}=D تعریف آن ساده است.
ولی اگر اندیس i ، عضو مجموعه C باشد که مجموعه C قرار است هر بار یکی از زیر مجموعه های D باشد، چطور باید x را تعریف کرد؟
سلام
سوال بسیار به جایی بود. دقیقا همین سوال رو تو بخش تمرینات (تمرین 2) گذاشتیم. جوابش رو تو کد زیر میتونین ببینین:
$eval n 6
$eval M power(2,%n%)
sets
i 'Nodes' / i1 * i%n% /
c 'enumerate the power set of i' / 1 * %M% /
ps(c,i) 'power set of i'
;
scalar j;
loop {c,
j = ord(c) - 1;
loop {i,
ps(c,i) = mod(j, 2);
j = floor(j / 2);
}
}
display ps;
خیلی متشکرم
مشکل با راهنمایی شما حل شد
🙂
سلام مجدد. ممنونم از پاسخگویی سریعتون 2 تا سؤال داشتم از حضورتون
وقتی ی متغیر سه اندیسه داریم مثل (L(i,t,w و توی یکی از محدودیت هامون باید از متغیر (L(i,t-1,w استفاده کنیم، اینو چطور باید بنویسیم؟یک جا تو کامنتها خوندم فرموده بودید باید بصورت شرطی بنویسیم میشه لطف کنید یک مثال بزنید؟
و اینکه اگر این متغیر فقط به ازای i=0 توی یکی از محدودیتها نوشته شده باشه مثلا بصورت (L(0,t,w باید بصورت (L(“0”,t,w نوشته بشه؟
سلام
خواهش میکنم.
همینجوری میتونین بنویسین. مشکلی نداره؛ اگه شرایط دیگه ای نداشته باشین البته
سوال دومتون. بله همین کافیه
سلام
وقتی دو تا اندیس i, j داریم که هر دو از یک مجموعه هستند و میخوایم مثلا یک مجموعه E تعریف کنیم که شامل زوج مرتب های (i,j) هست که در اون i از j کوچکتره و یک متغیر(x (i,j داریم که این (i,j) باید عضو مجموعه E باشه این رو چطور باید تو گمز بنویسیم؟
خیلی ممنون میشم اگر کمکم کنید
سلام
روش زیاد داره. من معمولا میام E رو به صورت پارامتر تعریف میکنم. کد زیر رو ببینید:
Parameter E(i,j);
E(i,j)$(ord(i) lt ord(j))=yes;
بعد میام x رو یک متغیر تعریف میکنم و هر جا تو محدودیتا x استفاده شد، شرط $(E(i,j) رو براش استفاده میکنم. مث مثال زیر:
c1(i,j).. x(i,j)$(E(i,j)=l=3;
مشکلی بود بگین
یک دنیا ممنونم از لطفتون
فقط اگر این متغیر X دو تا اندیس دیگه هم داشته باشه مثلا باشه (X(i,j,k,t که (i,j) ها باید عضو مجموعه E باشن مشکلی پیش نمیاد که؟همون کدی رو که فرمودید اینجوری بنویسم
;c1(i,j).. x(i,j,k,t)$(E(i,j)=l=3
خواهش میکنم.
نه مشکلی پیش نمیاد. ولی خب باید دقت کنین که محدودیت به ازای چه اندیس هایی برقراره.
سلام.
سه تا مجموعه دارم.
{p1={a,b,c
{p2={d,e,f
{p3={g,h,i
مشخصه که شمارنده ای روی p وجود داره. p1,p2,p3 هر کدوم از این p ها هم به شکل بالا تعریف شدند.
چطوری این سه تا مجموعه رو به شکل یک مجموعه تعریف کنم که اگر توی محدودیتی از دستور sum استفاده میشه و سیگما هم روی شمارنده p باشه( مثلاً شمارنده P اندیس u در نظر شده) مجموعه Pu مورد نظر فراخوانی بشه.
ممنون
سلام
یه مجموعه اصلی تعریف کنین به نام p و بقیه رو زیر مجموعش قرار بدین و هر جا خواستین استفاده کنین.
ممنون که جواب دادید.
به این شکل نوشتم:
/set P / a,b,…,i
/p1(P)/a,b,c
/p2(P)/d,e,f
;/p3(P)/g,h,i
ولی سیگمای من روی u باید باشه یعنی شمارنده p. نه روی P1 یا p2 یا p3. اگر مقدار u برابر 2 شد، به ازای u=2 تک تک اعضای مجموعه p2 را در نظر میگیرد سپس مقدار u برابر 3می شود و تک تک اعضای مجموعه p3 را در نظر میگیرد.
توی دستور sum باید چجوری نشونش بدم؟ یعنی چطوری بگم زیر مجموعه 2 و 3 رو بررسی کن؟
نمی دونم تونستم منظورمو برسونم….
سلام
روشهای مختلفی وجود داره، میتونین بگین که محدودیت به ازای اندیسی به نام u که از یک تا سه هست برقرار باشه. بعدش بگین که در دستور sum مجموع روی p باشه و از دستورات شرطی استفاده کنین که این دو برابر نباشن. یا میتونین مجموعه های ترکیبی از پی های مختلف تعریف کنین. روش زیاده یکم حوصله باید به خرج بدین و خلاقیت
سلام مجدد
چگونه می توان بین چند جدول که از لحاظ ساختاری مشابه هستند یعنی تعداد بعد تعداد سطر و تعداد ستون مساوی می باشد اجتماع تعریف نمود؟
با تشکر
سلام
اجتماع این دو مجموعه چی رو نشون میده؟
بیشتر توضیح بدین
سلام و خدا قوت
من با یه مشکل برخورد کردموممکنه راهنمایی بفرمایین
فرض کنیم دو دسته گروه داریم(مثلا تهرانی و شهرستانی) طبق مطالب بالا تهرانی ها رو در یه دسته قرار می دیم (j1) و همچنین شهرستانیها(j2) و همچنین کل گروه ها(k). حال یه بار تهرانی ها رو مورد ارزیابی قرار می دهیم و یک بار هم شهرستانی ها رو که جواب هم میده.حال سوال من این است که اگه بخواهیم همه گروه ها رو ارزیابی کنم چطور کل داده ها رو در یک table قرار داده و داده ها رو فراخوانی کنم و ارزیابی همه گروه ها رو با هم انجام بدم
سلام
سوالتون مقداری گنگ بود، ولی به نظرم استفاده از بخش مجموعه ها-اجتماع مجموعه ها جواب سوالتون هست. باید یه مجموعه مرجع تعریف کنین و بقیه رو به عنوان زیر مجموعش تعریف کنین
سلام سوال رو اینطور مطرح می کنم
فرض کنیم مدارس دولتی و مدارس غیر دولتی را می خواهیم ارزیابی کنیم. حال یه بار مدارس دولتی رو با هم ارزیابی می کنم و یک بار هم مدارس غیر دولتی رو. برای اینکار داده های مورد نیاز رو در دو جدول جداگانه قرار دادم و کار انجام شد. تا اینجا مشکل نیست اما اگه بخواهیم تمام مدارس دولتی و غیر دولتی رو با هم ارزیابی کنیم برای اینکار چطور میشه یه جدول تشکیل داده که داده های ان اجتماع دو جدول قبلی باشد؟
سلام ، ببخشید من تو خط مربوط به محدودیت با خطای 171 Domain violation for set مواجه میشم. لطف میکنید راهنماییم کنید.
Sets
IUJ/1*15/
I(IUJ)/1*10/
J(IUJ) /1*5/
K/1*25/
;
binary variables
t(i,j,k);
c2(j)..sum((iuj,k),t(iuj,j,k))=e=1;
سلام
شما یک بار t رو تعریف کردید با تعدادی از اندیس ها. ولی وقتی تو مدل استفاده کردید، اندیسش رو تغییر دادین. اندیس ها باید همونا باشن. همچنین سعی کنید t رو با t(iuj تعریف کنید.
سلام
اگه بخوایم از دستور Alias استفاده کنیم، و مجموعه رو بنویسم چه طوری باید کدنویسی کنیم؟
مثلا برای مسأله ای که باید از گره i به گره j بریم، که هر دو از یک مجموعه هستند ؟
ممنون میشم پاسخ دهید
سلام
شما اول یکی از مجموعه ها رو باید تعریف کنید. مثلا i. و بعدش با دستور Alias نشون بدین که i و j شبیه هم هستن. هر جا که خواستین از خواصیت همسان بودنشون استفاده کنین. دستور پایین رو ببینین.
موفق باشین
Set i/1*10/ ;
Alias (i,j);
سلام، بسیار عالی و موثر. ممنونم ازتون
سلام
خواهش میکنم.
خوشحالیم که از گمز بوک بازدید کردید.