مجموعه ی اندیس ها، پارامترها، جداول و متغیرهای مسئله تعریف شد. نوبت می رسد به وارد کردن معادلات، محدودیت ها، تابع هدف و… . همانطور که می دانید، مدل های بهینه سازی شامل دو بخش تابع هدف و محدودیت ها می شود.
معرفی و اعمال این معادلات در دو بخش Equation Declaration و Equation Specification انجام می شود. مثال زیر را در نظر بگیرید:
همانطور که ملاحظه می شود، در بخش اول دستور یا Equation Declaration، به تعریف و اعلام اسامی تابع هدف و محدودیت ها به همراه وابستگی اشان به اندیس های متناظر می پردازیم. co6 را در نظر بگیرید؛ این گذاره صرفا اسمی است که توسط کاربر برای محدودیت ششم انتخاب شده است و هیچ ارزش دیگری ندارد. در حالی که co1(i,j) وابستگی محدودیت اول به اندیس های i و jرا نیز نشان می دهد. و این معادل همان علامت ∀ در جبر خواهد بود. پس در واقع co1(i,j) یعنی قید اول به ازای هر i و j باید برقرار باشد. محدودیت جبری معادل:
در بخش دوم یا Equation Specification، در هر سطر، اسم هر معادله یا نامعادله که در بخش اول به تعریف آن پرداختیم، آورده خواهد شد و سپس دو نقطه (..) مطابق شکل بالا جلویش خواهیم گذاشت. دقت شود که اگر در قید، شرطی مانند i≠j نیز داشته باشیم باید این شرط را قبل از دو نقطه ای که گذاشته ایم اعمال نماییم. اگر مبتدی هستید، هیچگاه تایپ دو نقطه را فراموش نکنید! چون برطرف کردن خطاهایی که به هنگام run کردن مدل خواهید دید، انصافاً شما را به شدت عصبی می کند!
مثال: کد محدودیت زیر را مشاهده می کنید:
محدودیت:
کد:
*Example
co1(i,j,l)$(ord(i) ne ord(j)).. z(i,j,l)=l=z(j,j,l);
در فرمول های بالا قواعد و قوانینی در فرمول نویسی استفاده شده اند که در بخش تابع نویسی توضیح داده خواهند شد. در صورت نیاز به این بخش ها مراجعه نمایید. در اینجا صرفاً مهارتی که در تعریف محدودیت ها کسب می کنید مدل نظر می باشد.
دقت کنید که در بخش اول تنها یک سیمی کالون استفاده می شود، در حالی که در بخش Specification پس از بیان هر معادله باید یک سیمی کالون به کار برده شود.
در معادلات و نامعادلات، دیگر از علایم ≠یا=،≤،≥ استفاده نمی کنیم. نمادهایی که در معادلات و نامعادلات در GAMS به کار می روند به قرار جدول زیراند:
از سنبل هایی که در جدول بالا معرفی شد، به ندرت پیش می آید که از =n= و =c= استفاده شود. در واقع این نمادها کاربرد خاص وتخصصی دارند.
جهت روشن تر شدن موضوع مثال زیر را در نظر بگیرید:
کد مربوط به به بخش معادلات این مدل به شکل زیر می تواند باشد:
*Example2
Equation
objective
Constraint1
constraint2
;
objective.. o=e=x1+x2 ;
constraint1.. x1*x2=l=10 ;
constraint2.. x1-x2=g=2 ;
دقت کنید که کد بالا کامل نیست و باید قبل از تعریف این معادلات متغیرهای x1 و x2 و همچنین متغیر مربوط به تابع هدف یا o قبلاً تعریف شده باشند.
بپردازیم به ادامه ی مثال کاربردی 1:
مدل تنها دو محدودیت دارد. آن ها را به ترتیب cont1 و cont2 و تابع هدف را obj می نامیم. نتیجتاً کد مربوطه به صورت زیر خواهد بود:
بحث در باب تعریف معادلات در GAMS به اتمام رسید. با اندکی تمرین و دقت می توانید به سادگی تعریف کردنِ معادلات و وارد کردن تابع هدف و محدودیت ها را فرا بگیرید. مباحث تکمیلی در همین برگه خدمت عزیزان ارائه خواهد شد.
خدمت عزیزانی که آموزش گام به گام را از ابتدا همراه با ما شروع نموده اند توصیه می شود که پس از مطالعه و مرور این صفحه، جهت ادامه مراحل آموزش به بخش دستورات نهایی مدل، در نوار کناری سمت راست (منوی داینامیک دسته بندی) مراجعه نمایند.
با تشکر
مدیریت سایت gamsbook.ir
ایمیل: Support@gamsbook.ir
شماره تماس: 3325-405–0919
سلام ممنوم بابت راهنماییاتون. من چندتا ماموریت(j) دارم که از مجموعه سفرها (i) تشکیل شده ، برای بدست آوردن زمان ماموریت باید زمان سفرهایی که توی اون ماموریت هست جمع بسته بشه ، اما مشکلی که دارم اینه که اگه بنویسم سیگمای زمان سفرها (t(i) ها ) i برای هر ماموریت که به ترتیب نیست
مثلا واس یه ماموریت سفرهای 23، 45، 12 توش هست برای ماموریت دیگه برای مثال 56، 45، 67 من چجوری سیگماشو ببندم تا درست شده
چون این مدلی باید بنویسم: و اینم غلطه
Sigma ((i=1 to i-1), 2*t(i)y(j)a(I,j) +t(i)y(j)a(I,j))
نمیدونم چجوری بهش بفهمونم ترتیب سه تا سفر چیه ؟
ممنون میشم
در ضمن لزومی نداره i+1 از i بیشتر باشه ها ، یعنی ممکنه i+1 سفر 20 ام باشه اما i 40 باشه
منظور از i ها ترتیبشون ه صرفا
سلام
تا جایی که من متوجه فرمایشات شما شدم، شما باید یه متغیر صفر و یک تعریف کنین، که هر گاه در یک ماموریت یک سفری وجود داشت، Yij برابر یک بشه، در غیر این صورت صفر بشه. این y رو در زمان صفر ضرب کنین و جمعشون کنین برای هر ماموریت.
با سلام
اگه در مدل انتگرال وجود داشته باشه میشه تو گمز کد بشه ؟
سلام و ادب
گمز انتگرال حل نمیکنه، باید از قبل از حالت انتگرال خارجش کنین.
سلام دوست عزیز. من به یک مشکل برخورد کردم که امیدوارم شما بتونید به من کمک کنید.
متغیرهای چهاربعدی x(i,j,k,t) و y(i,j,k,t) رو دارم. این متغیرها مقادیرشون رو از یک فایل اکسل میگیرن. i و j و k و t برای شمارش باید حتما از 1 شروع بشن. حالا نیاز دارم که یک نامعادله بنویسم که در این نامعادله، j بزرگتر یا مساوی با 2 هست. یعنی باید همون j بمونه ولی از 2 شروع بشه و نمیشه یک شمارنده دیگه تعریف کنم.
از طرفی، در قسمتی از این نامعادله x(i,j,k,t) قرار داره و در قسمتی دیگه یک سیمگا هست که از u=1 تا t مقدار میگیره و t بزرگتر از u هست. اینو چطور باید بنویسم؟
سلام
مطالبی که در کامنت های بالا در مورد ord و عبارات شرطی مانند دلار $ تبادل شده بین کاربران رو بخونین. به جواب میرسین.
سلام. ممنون از سایتتون.
ی سامیشن دارم که کرانش از ان برابر کای آی تا عد 6 هستش.آی از 1 تا 14 . کای آی یه پارامتر که بین 1 تا 3 تصادفی می باشد. چطوری باید بنویسم. ممنون.
سلام
اول قبل از محدودیت ها با دستور parameter اون Ki رو تعریف کنین. بعد تو محدودیت از دستور دلار $ و ord استفاده کنین. همین دو تا رو تو همین صفحه find کنین. متوجه روشش میشین
ممنون.
سلام
لطفا کمی راجع به =c= توضیح دهید و یک مثال هم معرفی کنید
سلام
=c= بهش محدودیت Coaen می گن . مثل =g= می گه سمت چپ یزرگتر از سمت راست هستش . با این تفاوت که این عمگر تنها با سالور انتخابی پشتیبانی می شه .
مثالی ندارم و تا حالا ندیدم . خیلی کم مورد استفاده قرار می گیره. اگر پیدا کردم برات می فرستم
با سلام و تشکر بابت سایت خوبتون
من یک متغیر دارم که می تواند یکی از اعداد 8 13 120 17 را داشته باشد…می خواستم بپرسم که این محدودیت را چگونه می توانم بنویسم؟
سلام
روش زیاده.
یکی از این روشا اینه که (فرض کنیم متغیر مورد نظر شما x باشه) شما یه متغیر باینری تعریف کنین، مثلا yi بعد همزمان فقط یکی از اونها میتونه یک باشه و بقیه صفر خواهند بود. و دو محدودیت به شکل زیر به مدل اضافه میشن:
set i/1*5 / ;
parameter a(i)/1 8,2 13,3 120,4 17/;
positive variable
x
;
binary variable
y(i)
;
eq1.. x=e=sum(i,a(i)*y(i));
eq2.. sum(i,y(i))=1;
اگر x بتونه صفر هم بگیره، باید علامت مساوی تو محدودیت دوم رو به کوچکتر مساوی تغییر بدین.
خیلی ممنون از پاسختون…خیلی به من کمک کرد
با سلام و تشکر فراوان برای سایت عالیتون
من یک پارامتر تعریف کردم که Pshift(t,delta) هست و p و delta را به صورت مجموعه تعریف کرده ان. حال در معادلات عبارتی دارم به صورت: sum(delta,Pshift(t-delta,delta))$(ord(delta) lt ord(t))
اما متاسفانه ارور می دهد که این سمبل با اندیس های بیشتر/کمتر فراخوانی شده
ممنون می شوم که مرا راهنمایی کنید تا بتوانم جمله را به صورتی بنویسم که ارور ندهد
سلام
یه t2 تعریف کنین که الیاس t باشه. بعد تو محدودیت اونجایی که گفته t-delta بزنین، t2 و شرط بذارین که t2 برابر با اختلاف t و delta هست. شرطای دیگه ای هم باشه یادتون نره. و شرط رو بذارین بعد از اولین ویرگول استفاده شده در دستور sum
سلام خسته نباشید.ببخشید من هر کاری می کنم نمی تونم ارورها رو برطرف کنم.
ارورهای 171.domain violation for set و 149.uncontrolled set entered as constant رو می ده.
مثلا ;costomers(i,t,v) .. sum(k,x(i,k,t,v))-sum(l,x(l,i,t,v)) =e= 0 واسه اندیس i و k ارور می ده.اصل محدودیت همینه و نمیتونم به شکل دیگه بنویسم.ممنون می شم کمکم کنید.مدل من مسیریابی موجودی هست.
سلام
برای ارور domain از لینک زیر استفاده کنین. و کافیه به ترجمه ی این ارور دقت کنین و مشخص میشه مشکل از استفاده از اعضایی تعریف نشده برای مجموعه تعریف شده هست.
خطای 170 در گمز
بخش دوم سوال که ظاهرا درسته و مشکلی نداره.
سلام
متشکرم از راهنماییتون
ببخشید
من یه متغیر دارم که مربوط به مقدار موجودی در دوره t هست.ومقدار t از 1 هست تا 4.
و توی مقاله ای که دارم مقدار متغیر رو در دوره 4 داده وگفته شده مقدار موجودی در دوره 4 ام برای محصول شماره 1 عدد 400 می باشد.(مدل من دو اندیسه است)
بنظر شما من این متغیر رو چجوری توی محدودیت های مربوطه وارد کنم ؟
بی نهایت ممنونم
سلام
مثلا
S(i,t)
S('1','4')=e=400;
سلام دوست عزيز
من يك ABS مدل را در گمز كد كردم ولي پس از حل جواب نشدني هست و با بررسي معادلات متوجه شدم مقدار ضرايب سطر تابع هدف را صفر در نظر گرفته. لطفا راهنمايي بفرماييد :
variable
Z
binary variable
Z1
integer variables
x distance between the center of facility i and VRL
y distance between the center of facility i and HRL
;
equations
of
co1
co2
co3
;
of .. Z =e= sum((i,j)$(ord(i) ord(j)),f(i,j)*abs(x(i)-x(j))+abs(y(i)-y(j)));
co1(i,j)$(ord(i) ne ord(j))
.. ABS(x(i)-x(j))+M*Z1(i,j) =g= 0.5*(l(i)+l(j));
co2(i,j)$(ord(i) ne ord(j))
.. ABS(y(i)-y(j))+M*(1-Z1(i,j)) =g= 0.5*(b(i)+b(j));
co3(i,j)$(ord(i) ne ord(j))
.. Z1(i,j)*(1-Z1(i,j)) =e= 0;
با تشكر
سلام
of .. Z =e= sum((i,j)$(ord(i) ord(j)),f(i,j)*abs(x(i)-x(j))+abs(y(i)-y(j)));
بنظرم بین ord ها ne نذاشتین.
اینکه ضرایب تابع هدف ها تونو صفر می کنه برمی گزده به محدویت هایی که برای هر متغیر تابع هدف نوشتید. اونهارو چک کنید. بهترین راه حل اینه که مدلتونو در ابعاد کوچیک به صورت دستی در ورق حل کنید تا ایراد کارتونو پیدا کنید.
سلام
خانم رمضانی من فکر میکنم سوال ایشون در مورد اینه که وقتی محدودیت های extended رو می بینن، ضریب ها رو صفر میزنه. که طبیعی هست.
مهندس اگه منظورتون این بود که مشکلی نیست و نگران نباشین. گمز اینجوری نشون میده.
ضمن اینکه چیزایی که خانم رمضانی هم گفتن حتما باید عملی و اصلاح کنین
با تشكر فراوان
سلام
من متغیر x رو integer تعریف کردم.اما بالای ۱۰۰ مقدار نمی گیره در شرایطی که محدودیتی واسه این مقدار وجود نداره. وقتی از integer در بیاد اعداد بالای ۱۰۰ رو هم مقدار میگیره.ولی حتما باید عدد صحیح باشه.ممنون میشم راهنمایی کنید.
سلام
اگه محدودیتی روی اینکه چه مقداری میگیره وجود نداره، گمز میاد اینو بررسی میکنه و کوچکتری عددی که تو حالت بهینه میتونه به دست بیاد رو نشون میده. البته همیشه اینجوری هم نیست. یه جورایی همه چی به تابع هدف شما وابسته ست.
سلام اقای مهندس
واقعا ممنونم بابت راهنمایی های مفیدتون.
من یه برنامه MILP توی گمز نوشتم. خیلی زود به جواب بهینه میرسه اما روی ارقام بعد از ممیز گیر میکنه. یعنی مثلا تابع هدف رو تا 14966 میاره روی ارقام بعد از ممیز گیر میکنه و واسه همین مدت زمان ران برنامه ام خیلیی زیاد میشه. میخواستم ببینم راهی هست بگم دقت تابع هدف تا مثلا یک رقم اعشار باشه؟
خیلی ممنون میشم راهنمایی کنید
سلام
option decimals=1;
constraint3(j,m)..sum(j,( hp(j-1,m)+x(j,m)-sp(j,m)-hp(j,m))=e=f(j,m);
اینو زدم ولی ارور میده 125 و 8
این که اولین HPROD مساوی صفره رو متوجه میشه؟
خیلی لطف می کنید. اگر هم امکانش هست زودتر جواب بدید. خیلی گیر کردم:(
سلام
ارور 8 که برای پرانتز هست.
در گمز نمی تونید روی اندیسی که جمع هست به ازای هر بیارید. الان j اشتباه است از alias استفاده کنید
با سلام من در وارد کردن یک محدودیت مشکل دارم
میخوام
MPROD 11 − SPROD 11 − HPROD 11 = 0,
HPROD 11 + MPROD 12 − SPROD 12 − HPROD 12 = 0,
HPROD 12 + MPROD 13 − SPROD 13 − HPROD 13 = 0,
HPROD 13 + MPROD 14 − SPROD 14 − HPROD 14 = 0,
HPROD 14 + MPROD 15 − SPROD 15 − HPROD 15 = 0,
HPROD 15 + MPROD 16 − SPROD 16 = 50.
رو برای 6 ماه مختلف وارد کنم
که 11HPROD میزان محصول باقی مانده اول در ماه اوله
و 11MPROD میزان محصول تولیدی اول در ماه اوله
و SPROD11 میزان محصول فروخته شده اول در ماه اوله
من اینجوری نوشتم ولی خطا میده
constraint3(j,m)..sum((j,m),h((j-1),m)+x(j,m)-ss(j,m)-hh(j,m)=e=f(m);
با تشکر فراوان
سلام
alias(j,jp)
alias(m,mp)
constraint3(jp,mp)..sum((j,m),h((j-1),m)+x(jp,mp)-ss(jp,mp)-hh(jp,mp)=e=f(pm);
ببخشید یه سوال دیگه هم داشتم
معادله زیر وابسته به 2 اندیس هست ومن چطوری میتونم توی گمز واردش کنم؟
(w(t,n)≤w(t,n-1)≤w(t,n-2)≤…≤w(t,1 به ازای t
eq(t,n)$(ord(n)>1)...W(t,n)=l=W((n-1);
سلام
من یک مدل برنامه ریزی تولید دارم که شاخص دوره از 1 تا 3 هست و می خواهم پارامتر موجودی اولیه در دوره صفر رو وارد مدل کنم ولی نمیدونم اندیس این پارامتر رو چند بزارم وچطوری تعریف کنم
ممنون از پاسختون
سلام
set t/0,1*3/
سلام در مدلم میخواهم متغییری که برای دو اندیس تعریف شده است در هر اندیس ماکسیمم کنم.
SOLVE OPF USING nlp MAXIMIZING PV(N,H) یعنی PV در همه ی N ها و در همه H ها ماکسیمم باشد که ارر میدهد.
ممنون
سلام بعد MAXIMIZING باید متغیری باشه که اندیس نداشته باشه. باید pv مساوی با متغیری کنید که اندیس ندارد.
با سلام
در خصوص روش تجزيه بندرز، ايا شما منبع مناسبي براي پياده سازي اين الگوريتم به روي يك مسئله VRP ميشناسيد؟
ممنون ميشم راهنمايي كنيد.
سلام
خیر
سلام خسته نباشید
میخوام تو معادلاتم بنویسم سیگمای قدر مطلق تفاضل دو متغییر
نوشتم ((sum(t,abs(e1(t)-e2(t ولی دستور abs خونده نمیشه باید چیکار کنم؟
سلام دستورش درسته. abs باید + بده . کدتون را بفرستید.
از پاسخ دهیتون ممنونم
فهمیدم. ممنون (((1-(sum(l$(ord(l)<=ord(k(i,j)
بله . الان روی l و K که اندیس هستن شرط گذاشته.
ممنون.
اشتباهه؟
بله اشتباهه. این k(i,j) چی هست؟ setهست؟ اگه مجموعه هست که برای مجموعه دوبعدی نباید ord به کار ببرین.
اگه پارامتره باز همین شرایط. کلا طشت نوشتین. کامنتا رو خیلی بخونین خب. رایگان و سریع به جواب میرسین. من نمیدونم چرا دوستان از اینکه یه چیزی رو بخونن ابا دارن.
یکم دیگه بخونین. حتما به نتیجه برسین. بعد ریپلای کنین به همین کامنت مرسی
سلام.
سامیشن کراندار توی گمز چطوری میشه؟
مثلان سامیشن از ال تا کا منفی 1
سلام
دوستم یکم کامنتا رو هم بخونین. مفید هستن. دنبال عباراتی مثل ord بگردین تو کامنتای بالا
ممنون از پاسخ دهی تون.
گشتم نبود. ord چی هست؟
سلام
شمارنده ی اندیس هست . اغلب برای مواردی که برای اندیس ها شرط می زاریم استفاده می شه
با سلام و وقت بخير
آيا امكان نوشتم انتگرال در معادلات وجود دارد؟
مثلا انتگرال x^2 از 10 تا 20 را چگونه بايد نوشت؟
يا حالتي كه كرانهاي انتگرال مثلا x1 وx2 باشد؟
با سپاس
سلام.امکان استفاده مستقیم انتگرال در گمز وجود ندارد . خودتون انتگرال بگیرین و قسمت جای گذاری کرانها در معادله انتگرال گیری شده را در گمز بنویسین با کلا از نرم افزار متلب استفاده کنید.
سلام. من میخام یه محدودیت بنویسم به اینصورت:
min -sum((x(i)/sum (x(i,j))*log ((x(i)/sum (x(i,j)))
میشه بفرمایید این رو به چه صورت بنویسم.
سپاس
سلام
حدود سیگماها رو هم مشخص کنین.
سلام وقتتون به خیر
اگر یک مجموعه داشته باشیم به صورت زیر:
x(i)={k|k is member of K , k<y(i)} for all i
که y پارامتر است و k و i مجموعه که قبلا تعریف شدن، این چه جوری کد میشه؟
سلام
چی؟ پارامتره یا متغیر تصمیم؟ و اینکه y حتما پارامتر و معلوم هست؟
این جوری تعریف شده که x مجموعه ای هست به این شکل. در واقع x(i) مجموعه ای هست از k به شرطی که k کوچکتر از y(i باشه. بله y پارامتره
من اول x رو به صورت پارامتر تعریف کردم و این جوری نوشتم ولی مشکل داره error 154 میده میگه: set for ord is not controlled
(X(i)$(ord(k)<y(i))=ord(k
سلام
set i/1/
k/1/
parameter
y(i)/1 2/
variable x(i)
equation
eq;
eq(i,k)$(ord(k)> y(i) )..x(i)=e=ord(k);
سلام وقت بخیر
اقا من یه شبکه دارم و این شبکه در تعدادی از یالها دارای محدودیت ظرفیت وتقاضا هستش و میخام حداقل هزینه عبور کالا برای مساله پیدا کنم ومن دو جدول جداگانه براش ذز اکسل درست کردم و در محدودیت حالت حداکثر برای ظرفیت گرفتم و یک حالت حداقل برای تقاضا گرفتم ولی موقع اجرا این ارور رو میده :ایتم ناشناخته ودرlooking for “a”,”;”و key word
سلام
اکسل این ارور رو میده؟
سلام خسته نباشید.من یک مدل برنامه ریزی عدد صحیح مختلط دوهدفه یکی از اهدافminو دیگریmaxمیباشد.میخوام در گمز کدنویسیش کنم.چندتا سوال داشتم.اول اینکه چندهدفه هست روشی ک ساده باشه رو اگر ممکنه معرفی کنید و در اختیارم قرار دهید بتونم استفاده کنم.و اینکه در کدنویسی گمز وجود داده های جدولی و اسکالر الزامیست؟؟
سلام
گمز به راحتی چند هدفه ها را حل می کند . شما می خواین این دو تابع هدف را یکی کنین ؟
ورود داده ها برای حل مساله الزامی هست. می نونید از داده های تصادفی با استفاده از تابع یکنواخت استفاده کنین و جدول ننویسید.
سلام. وقتتون بخیر.
من یک برنامهای میخوام بنویسم که یک سری از پارامترهایی که دارم احتمالی هستند یعنی هر کدام چندین حالت با احتمال های مختلف دارند و متغیرها در هر کدام از حالت ها تغیر می کنند یعنی تابع سناریوها هستند.میخواستم بدونم تابع هدفم رو چه طوری باید تعریف کنم که بهترین جواب را در کل حالت ها بدهد؟
سلام سوالتون خیلی کلی هست. چه مدلی می خواین بنویسید و هدفتون چیه.
تابع هدف، حداقل کردن هزینه هست.متغیرهایی که در تابع هدف هستن تابع سناریوهایی هستن که گفتم. فضایی که مسئله باید بررسی کنه، روی کل سناریوها هست و بهترین جواب را توی کل حالات میخوام بدونم.یعنی میخوام بدونم متغیرهایی که تابع سناریوها هستن به ازای هر حالت مقدارشون رو تعیین میکنه یا توی کل حالات؟ یعنی مثلا اگه 5 تا حالت باشه 5 تا جواب میده یا یکی؟
سلام
بستگی به مفهوم مدل شما داره.
مثلا فرض کنین تو روباست سناریویی، شما میاین یک بار به ازای هر سناریو مدل رو حل میکنین و 5 تا جواب برای هدف هاتون به دست میاد. اینجوری هر متغیری که اندیس سناریو رو داشته باشه به ازای هر سناریو عدد میگیره نه همه سناریو ها.
ولی وقتی میخواین امید ریاضی بگیرین، یا ارزش انتظاری به دست بیارین، یا میانگین بگیرین، یا تجمیع اهداف بکنین باید همه رو با هم تو یک هدف بیارین و مثلا احتمال سناریو رو در مقدار هدفش با یک سری فرمول ضرب کنین. تو این حالت متغیرایی که اندیس سناریو دارن همه عدد میگیرن و یک جواب خواص برای هدفتون به دست میاد
خیلی ممنونم بابت راهنماییتون.لطف کردین
سلام
ببخشید میشه لطفا بگید چطوری من این دستور رو به گمز بدم? اینجوری که تعریف میکنم ارور میزنه. میگه شاخصی تعریف نشده
((sum((n,t) ,a(n,t)*q(n,t)*(i+1)**(t
سلام
i رو تعریف کردین؟
و ایکه t رو همینجوری نمیتونی استفاده کنین توی توان. بزنین ord(t)
سلام وقتتون بخیر
من یک کد به صورت cost=e=(1/4)*Sum((i,j),(W(i,j)*(1-(x(i)*x(j))))); نوشتم هیچ خطایی نمی ده اما توی بخش equation ضریب x(i)هاهمه صفر هستند. مشکل از کجاست؟
سلام
مشکلی نیست. گمز وقتی محدودیت رو extend میکنه، ضرب دو متغیر رو اینجوری نشون میده. یکیش صفر، یکیش هم همون x رو مینویسه
خب پس چرا تابع هدف مقدارش صفر می شه؟
عبارت فوق تابع هدف است و فقط دو محدودیت x(i)=1 و x(i)=-1 رو دارم . مسأله ماکسیمم سازی و w(i,j) یک ماتریس با درایه های مثبت هست…
ممکنه با فرضیات شما واقعا جواب بهینه همین هست. یا اینکه مسئله شما نشدنی هست. پیام قسمت process window رو بخونین. 7-9 خط آخر
سلام
خسته نباشید
یک وسیله p در نظر بگیرید که بازه واسش پیشنهاد شده بازه هام /43*50 , 100*144/
این باز ها خودشونم برحسب 10 دقیقه در 24 ساعت شبانه روزن که کلا 144 بازه میسازن
حالا مثلا از وسیله p که پیشنهاد دادیم تو بازه ای که نوشتم میخوام 3 بار بهره برداری انجام بدم شرایط بهینه میخوام بدس بیارم واسه این 3 بار تو اون بازه از طرفی باید این منظور با یه شاخص باینری که روشن بشه برسونم تو نوشتن معادش مشکل دارم.
یه متغییر تصمیم گیری باید انتخاب کنم که وابسته به وسیله و بازه باشه از طرفی باید همینو مساوی همون متغیر باینری باشه . هر جور مینویسم ارور میده میشه راهنمایی کنید
سلام
مثلا می تونید یک پارامتر بگیرین برای این که وسیله هست .
برای مثال A/100 1,101 1,…./ بعد بیاین بر اساس معیار های بهینگی و متغیرههاتون محدودیت بنویسید و سه بار بهره وریو انجام بدین
سلام دوست عزيز
در خصوص مجموعه هاي تو در تو سوالي داشتم. در يك مدل زمانبندي جريان كارگاهي سه مرحله وجود داره و هر مرحله شامل تعدادي ماشين ميشه. انديس مرحله با I نمايش داده ميشه و انديس ماشين ها با J نمايش داده ميشه.
/I INDEX OF STAGE /1*m
/Ji MACHINE IN STAGE I /1*mi
/K INDEX OF PARTS /1*n
كه انديس J عضو مجموعه Ji هست.
فرض بفرماييد در مرحله اول 2 ماشين و در مرحله دوم 3 ماشين و در مرحله سوم 4 ماشن وجود دارد. ميشه راهنمايي بفرماييد من چطور ميتونم اين چند مجموعه را نمايش بدم به صورتي كه در اخر بتونم با يك انديس مثل J ارتباط بين مراحل و ماشن ها را مشخص كنم. متغييري كه از اين انديس استفاده ميكنه به صورت زير هست :
(X(I,J,K به صورت باينري و به اين مفهوم كه اگر قطعه K به ماشن J در مرحله I تخصيص پيدا كند برابر 1 و در غير اين صورت برابر 0 ميباشد.
با تشكر فراوان
سلام
set i /1*5/
j/1*3/
j1(i,j)/1.2,2.3,3.4/
;
برای X شرط $j1(i,j) استفاده کنین
با تشكر فراوان
سلام
من میخوام یک تابع دو ضابطه ای تعریف کنم.
مثلا اگر x بین 2 تا 3 بود Y=ax+b و اگر x بین 3 تا 4 بود Y=cx+d
x متغیر است و در سایر معادلات حضور دارد.
برای حل مساله از mip باید استفاده شود.
ممنون
سلام راه حل برای MINLP دارم . اون هم استفاده از دستور ifthen یا اضافه کردن متغیر باینری هست. و با این روش ها مدل غیر خطی می شود.
سلام
من محدودیتی دارم که دو طرفش کراندار است.
lb(t)*ya(t,ww,d,delta)=l=xdd(p,ww,n,d,e,t,delta)/Nt
ub(t)*ya(t,ww,d,delta)=g=xdd(p,ww,n,d,e,t,delta)/Nt
به این شکل تبدیلش کردم ولی مساله نشدنی میشه. علت چیه؟
سلام
شاید مربوط به همین محدودیت نیست. مربوط به بقیه محدودیت ها باشه نشدنی بودن. ولی میتونین واسه تست کردنش ub رو خیلی زیاد کنین. یا lp رو به کمترین مقدارش برسونین. اگه شدنی شد مشکل از این محدودیت بوده و برای رفعش تلاش کنین
باسلام و تشکر بابت راهنمایی هاتون
سوالی داشتم ممنون میشم پاسخ بدین
قسمتی از مدلم به این صورت هست که شرکت های 1و3و5 فقط محصول یک رومیخرند
شرکت4 فقط محصول سه، شرکت 2 از محصولات یک و سه و شرکت 6 از هر7 محصول تولیدی خریداری میکنند.من اینارو نوشتم:
c5(p,t)$(ord(p)=1) .. XS(p,'1',t)+XS(p,'2',t)+XS(p,'3',t)+XS(p,'5',t)+XS(p,'6',t)=l=D(p,t);
c6(p,t)$(ord(p)=2) .. XS(p,'6',t)=l=D(p,t);
c7(p,t)$(ord(p)=3) .. XS(p,'2',t)+XS(p,'4',t)+XS(p,'6',t)=l=D(p,t);
c8(p,t)$(ord(p)=4) .. XS(p,'6',t)=l=D(p,t);
c9(p,t)$(ord(p)=5) .. XS(p,'6',t)=l=D(p,t);
c10(p,t)$(ord(p)=6) .. XS(p,'6',t)=l=D(p,t);
c11(p,t)$(ord(p)=7) .. XS(p,'6',t)=l=D(p,t);
اما بعد ران گرفتن نشون میده که همه شرکت ها از همه محصولات خریداری میکنند.چطوری برای هرشرکت فقط محصولاتی که میخرند رو فیکس کنم؟
که D(p,t) تقاضا از محصول p در دوره t است.
خب بزنین ord(k) = D(p,t) اگه شرط دیگه ای هم ندارین.
سلام
از مجموعه های چند بعدی استفاده کنین.
مجموعه های چند بعدی در گمز
با سلام و تشکر
موارد زیر رو به sets اضافه کردم اما مشکل برطرف نشد
Sets
P product /p1*p7/
K customer /1*6/
E1(p,k) /p1.(1,3,5)/
E2(p,k) /p3.4/
E3(k,p) /2.(p1,p3)/
E4(k,p) /6.#p/;
ممنون میشم کمکم کنید.
شما به صورت یه دونه e تعریف کنین. همه توش باشن.
بعد تو محدودیتها این شرط رو اضافه کنین که : محدودیت را به ازای E اعمال کن.
سلام دوست عزيز
در خصوص شرايط تابع هدف، معادله تابع هدف به فرم :
, ((DIS =E= SUM((I,J,R,T,F)$(ORD(I) NE ORD(J
[(X(I,J,R)*Y(T,F)*[DIJ(I,J)+DFI(F,I)+DJF(J,F)]
كه x و y متغييرهاي باينري هستند و وابستگي دارند كه حتما بايستي y انجام و در صورت يك شدن مقدار y متغيير x اجازه مقدار گرفتن پيدا ميكنه. مجموعه هاي i و j از 0 تا 10 هستند و مجموعه هاي f و t از 1 تا 5.
با حل مدل مقدار تابع هدف عدد اشتباهي است.
ايا بايستي حتما مقادير مجموعه ها با هم برابر باشند تا مسئله درست حل بشه؟
در صورتي كه در شرايط واقعي وضعيت به همين صورت باشه، چطور ميشه اين تابع هدف را درست حل كرد؟
(فرض بفرماييد مشكلي در محدوديت ها وجود نداره).
ممنونم
سلام
شرایط y,x رو بهتر و کاملتر باید بیان کنین. این شرطی که گفتین یه محدودیت مث این میخواد. y
با سلام مجدد
محدوديتهاي متغيير X مثل مسئله فروشنده دوره گرده و براي Y مثل مدل تخصيص كه به فرم زير هستند :
CO1(F) .. SUM(T, Y(T,F)) =E= 1
CO2(T) .. SUM(F, Y(T,F)) =E= 1
CO3(i) .. sum(j,R, x(i,j)) =e= 1
CO4(j) .. sum(i,R, x(i,j)) =e= 1
من مشكلي با محدوديت ها ندارم. وقتي مسئله حل ميشه تمام ضرايب سطر تابع هدف را صفر در نظر ميگيره ولي وقتي فقط X يا فقط Y را در تابع هدف با همان پارامترها و بدون كم كردن انها محاسبه ميكنم جواب ميده.
فرض كنيد يك مسئله تخصيص درجه دو هست كه كمي پارامترهاش متفاوت هست.
سلام
هدف شما غیر خطی هست؟ یعنی دو متغیر ضرب هم میشن؟
بله. تابع هدف غير خطي هست.
خب نگران نباشین. توی گمز تو خروجیش بسط داده شده ی ضرب دو متغیر همینجوری نشودن داده میشه.
يعني مقادير ضرايب تابع هدف را صفر نشان ميده
جواب نهايي را هم اشتباه محاسبه ميكنه
شما همون مسئله را كه نوشتم كد كنيد ميبينيد كه مقدار تابع هدف را به اندازه f يا t برابر بيشتر نشان ميده كه نميدونم مشكلش كجاست
سعی کردین خطی کنین؟ مدلتون معتبره؟ تغییری دادین؟
سلام. مدل با در نظر گرفتن انديس اضافه كه نميدونم چرا وارد مدل ميشه درست حل ميشه. ولي جوابش دقيقا به اندازه اون انديس بزرگتر ميشه !!!!
مثلا اگر جواب 100 باشه و تعداد انديس f يا t برابر 5 باشه جواب نهايي 500 را ميده كه نميدونم چطور ميشه درستش كرد!!!
مهندس مقداری در مورد خواص سیگما مطالعه کنین بد نیست. به این دقت کنین که عبارت زیر حاصلش میشه 15، با توجه به گفته ی شما باید حاصل یک بشه که درست نیست.
set i/1*5/;
parameter a,b;
a=1;
b=sum(i,a);
display b;
b=15;
** note : n(n+1)/2
سلام مجدد
براتون مقدور هست كه مسئله را براتون ارسال كنم و شما خودتون چكش كنيد؟
ممنون
ارسال بفرمایید
ممنونم دوست عزيز
لطف ميفرماييد ادرس ايميلتون را برام بفرستيد.
من قبلا به ادرس ايميل بالاي سايت ارسال كردم ولي ظاهرا نرسيده به دستتون.
لطف ميفرماييد.
سلام
ما یه ایمیل داریم. به همین ایمیل زیر پست ها بفرستین
سلام .با تشکر از سایت خوبتون. من یه محدودیت به شکل زیر تو گمز داشتم که وقتی run می کنم خطای 148و133 نشان میده:
c1(t)$(ord(t)>1).. max(0, Wstore(‘t25’)-(25-t)*Pstore(t)*0.9)=l=Wstore(‘t25’);
که t زمان و PstoreوWstore متغیر هستند. ممنون میشم کمکم کنید.
سلام
ممنون و خواهش میکنم.
وقتی یه عدد از ماکزیمم دو عدد بزرگتره، یعنی از جفتشون هم بزرگتره. پس میتونین این شکلی بنویسین:
c1_1(t)$(ord(t)>1).. 0=l=Wstore(‘t25’);
c1_2(t)$(ord(t)>1).. Wstore(‘t25’)-(25-ord(t))*Pstore(t)*0.9=l=Wstore(‘t25’);
سلام
در مدلی i , j اندیس هستند و مقادیر آنها به صورت زیر است:
i=1,2,,…,n-1
j=i+1,…,n
n=6
هنگام تعریف در بخش set اگه متغیر قرار بدم ارور میده، ممنون میشم اگه راهنماییم کنید.
با تشکر
سلام
برای n اول باید قبل از دستور sets شما n رو تعریف کرده باشین. مثلا کد زیر رو قبل از set باید بذارین:
$eval n 6
برای j دیگه لازم نیست مجموعه تعریف کنین. شما باید j رو با i آلیاس کنین فقط.
آلیاس کردن دو مجموعه
سلام
محدودیت های احتمالی(شانس) به صورت زیر در گمز چطور نوشته میشه؟
Pr[sum(i,j),x(i,j)>5]>α
ممنون
سلام
باید معادلش رو بنویسید، مثلا یه عده میان به صورت z استاندارد مینویسن. یه عده هم پولتیک میزنه به مغزشونو یه محدودیت خطی معادل براش مینویسن. مقالات مشابه رو ببینید احتمالا نوشتن اونجا
سلام
خدا قوت
مدلی که کار می کنم multiple Tsp هست
;/%set i1(i) /%startcity
;limit5..sum(j $(ord(j) Gt 1 ),(x(i1,j)+x(j,i1)))=e=2*m
برای j این پیغام رو می ده.
Uncontrolled set entered as constant
i1 مبدا هست و ثابت. و محدودیت روی j می چرخه.
به هر حال شما باید محدودیت رو به شکل limit5(i1) تعریف کنین
سلام
دستور model name.OPTFILE=1 نشانگر چه چيزي هست؟
و اينكه ايا جواب integer با كد 8 در قسمت ريپورت حل مسئله بيانگر درست بودن جواب نهايي هست؟
ممنون
سلام
سوال اولتون یه نوع فراخوانی هست. دارین فایلی با پسوند opt رو فراخوانی میکنین.
سوال دوم، جواب شدنی داده ظاهرا، ولی الزاما که درست نیست
با تشكر
سلام خسته نباشید.
برای نوشتن عبارت سیگما از t تا مثلا g-1 یه عبارت مثل (d-c) که t و g قبلش معرفی شدن چطور عمل میکنیم؟
سلام
والا من که متوجه نشدم. ولی احتمالا منظورتون همون بخش اول سوالتونه فقط:
...sum(t$(ord(t)<=ord(g)-1),d-c)....
نکته اینکه اگه g شما اندیس نیست و پارامتره، ord رو از روش وردارین
ممنونم از جوابتون
فقط یه سوال اگه تو همین سوال t که حد پایین سیگماس عضو یه بازه باشه مثلا100 تا 200 , حد بالا هم مثل قبل تا g-1 باشه (g پارامتر بود) اونوقت چطور بیان میشه ؟
شما میتونین براش عدد رندم تولید کنین. اونوقت شرطه همچین چیزی میشه:
ord(t) >=uniform(100,200) and ord(t) <= g-1
سپاسگزارم
باسلام و خسته نباشيد به شما، ممنون از سايت خوبتون
من يك تابع هدف با دو محدوديت تعريف كرده ام و به ازاي مقادير مختلف، جواب ها را بدست مياورم. ولي وقتي يك محدوديت ديگر را اضافه مي كنم و به ازاي آن متغير ديگري هم به تابع هدف اضافه مي شود، اينبار به ازاي مقادير مختلف، تمام جواب ها يكسان مي شود. آيا بايد دستور خاصي را اضافه كنم زماني كه اين اتفاق مي افتد؟
و اينكه modelstat رو برابر با ٣ مينويسد.
سلام مدلتونو از نظر ریاضی بررسی کنین مخصوصا اون محدودیتی که اضافه کردین.
سلام
من میخوام در قسمت تابع هدف max چند تا عبارت رو جمع کنم که چون عبارات مثل هم نیستند فکر نمیکنم بتونم از دستور smax و min استفاده کنم.
تابع هدف مشابه زیر است:
max [o(j)*o(i)*g(i,j)*(x(j)-x(i))+a(i)/2+a(j)/2]+max[(1-o(j)*(1-o(i))*g(i,j)*(x(j)-x(i))+b(i)/2+b(j)/2]
لطفا راهنماییم کنید.
سلام.روشتون اشتباهه. 1 راه اینه هر عبارت داخل متغیری بریزید سپس ماکزیمم این عبارت ها رو بدست بیارید.
ممنون بابت جوابتون
یعنی اگر عبارات رو M و N نامگذاری کنم، بنویسم:
obj .. z=e= M+N
co1 .. M=e= smax[o(j)*o(i)*g(i,j)*(x(j)-x(i))+a(i)/2+a(j)/2]1
co2 ..N=e=smax[(1-o(j)*(1-o(i))*g(i,j)*(x(j)-x(i))+b(i)/2+b(j)/2]1
سلام قراره M+N شه ؟ اگه بله که درسته اما از نظر دستوری گمز مشکل داره .ولی اگه نه می خواین ماکزیمم n, m پیدا کنید smax در تابع هدف بنویسین
سلام
من میخوام ی مدلو تو گمز بنویسم و حل کنم.بعضی شاخصا مثلا زمان توی هر sumباید متفاوت باشه من نمیدونم چطور اینکارو انجام بدم.توی set من tرو از صفر تا بیشترین مقداری ک میتونه تعریف کردم.برای اینکه توی بعضی از
sumها از کمترین مقدار و بیشترین مقدارش پیروی نکنه چکار باید بکنم؟
لطفا بم کمک کنید.بدجوری کارم گیره همین سواله
سلام شرط بگذارید.
مثلا
sum(t$(ord(t)>1 and ord(t)<=12),zr(rprim,t-1,s));
میشه بفرمایید Zr و rprim چیه؟؟ی دستوره یا خودتون نوشتین؟بعد من در داخل sum باید روی دو تا اندیس دیگه بجز t ببندم.اون دو تای دیگه رو چجوری باید توی سام بزارم؟ اخه نوشتمش همش ارور میده واسه , و )
بعد ی چیز خیلی مهم دیگه.کران های t که توی سام هست عدد نیس یک پارامتره.واسه اینم ارور میگیره همش.این ب خاطر پارامتر بودنشونه؟؟
سلام
خب مقداری مطالعه کنین عزیز من. سعی و خطا که نیست. بزنین دستور sum در گمز. یه سری کاامنت بخونین. خیلی چیزا دستتون میاد. مثلا تو همین تاپیک شما اگه تاپیک رو به همراه کامناا بخونین بیشتر مشکلاتون رفع میشه. اون zr اینا هم خیر. خودشون نوشتن
باور کنید من کلی سرچ کردم ولی هر چی مینویسم ارور میده.فقط میشه بگید که وجود پارامتر در کران های سام باعث ایجاد ارور میشه ؟اگه نمیشه برم ببینم این همه ارور واسه چیه:(
سلام
به چه شکل نوشتید؟
sum((t,k)$(ord(t)>= e(j) and ord(t) <= H-leadtime(s) ,sigma(k)*q(k,t,s))
که ففطH اسکالر هست.
سلام مدلتو بفرست
سلام. من توی کدنویسی گمزم برای مساله توالی عملیات نمیدونم چطور کدنویسی کنم که کارها به پشت سر هم بیان. یعنی همه کارها از لحظه صفر شرو میشن. یه ماهه اسیر اینجاشم دیگه کلافه شدم. لطفا کمک کنید
سلام
بله این مشکل بسیاری از دوستان هست. و نیاز به تخصص و تجربه زیادی داره. باید برای Ji (مجموعه کارهای مرحله jام) باید دقت به خرج بدین.
هر کاری میکنم نمیشه. خواهش میکنم کمک کنید. اصلا پشت سر هم نمیان کارها. همشون از لحظه صفر شرو میشن.
میتونین یه جدول پیشنیازی برای کار ها و قطعات تولید کنین. بعد ازشون استفاده کنین. عرض کردم این کار مقداری تجربه و حوصله میخواد.
سلام
در خصوص مدل زير ميتونيد به من بگيد من چطور ميتونم تاثير دو انديس i و j در تابع هدف را در متغيير از بين ببرم؟
((OF .. PRS =E= SUM((I,J,F,T)$(ORD(I) NE ORD(J) AN ORD(I)>1),Y(T,F
CO1(F) .. SUM(T, Y(T,F)) =E= 1
CO2(T) .. SUM(F, Y(T,F)) =E= 1
جواب مدل در حالت عادي بايستي برابر 10 باشه ولي مقدار تابع هدف را 100 برابر بيشتر نشان ميده، يعني 1000
ممنون ميشم راهنمايي بفرماييد.
سلام
یعنی چی تاثیرشون رو از بین ببرین؟
منظورم محاسبه مقدار تابع هدف با عدد درست هست و نه 100 برابر بيشتر
خب باید خواسته خودتونو دقیق تر مطرح کنین. اینکه i,j تو تابع هدف نیست، باید شرطی موجهی داشته باشین که روش شرط هم بنویسین.
سلام علامت پای توی گمز چطور وارد میشه؟
سلام
کافیه از علامت pi استفاده کنین
سلام
آیا میشه در معادلات بگم مجموع سه متغییر باینری کمتر از 1 باشد؟
ممنون از سایت پرمحتوا و خوبتون
سلام
ممنونم.
بله چرا نشه.
سلام
من یه قید دارم که در اون باید تعدادی از عناصر یه اندیس فقط موجب عمل SUM بشوند. چی کار کنم. هیچی به ذهنم نمی رسه. لظفا کمکم کنید
سلام
تاپیک رو بخونین حتما
سلام جناب محمودي
ايا شما يا دوستانتون در مسايل مسيريابي (خصوصا به همراه محدوديت برداشت و تحويل كالا) كار كرديد؟
اگر بله، لطفا بفرماييد چطور ميتونم مدل را براتون ارسال كنم تا سوالم را بپرسم؟
ممنون از شما
سلام مدل را برامون ارسال کنید.
ایمیل و شماره تلفن در صفحه اصلی سایت نوشته شده است.
سلام دوست بزرگوار. من فايل كد و مدل را براتون به ادرس ايميل كه در بالاي سايت گفته بوديد ارسال كردم.
با تشكر فراوان
سلام خسته نباشید.
از حلقه for میشه برای الگوریتم خوشه بندی استفاده نمود؟
سلام
میخواین چیکار کنین؟
هدفم خوشه بندی یا به عبارتی همون clustering مجموعه ای از داده هاست. حال میخواستم ببینم شبه کد آماده ای وجود داره یا مثلا میشه با استفاده از یک سری توابع و دستورات مثل حلقه for برای این منظور استفاده نمود؟
حتما میشه. کلی حلقه هست تو گمز که میتونین استفاده کنین. for, loop, while
و اینکه طبق محدودیت زیر
;(limit4..sum(j$(ord(j) Gt 1),x(i$((i) e 1),j))=e=card(v
این تیکه رو ارور می ده i$((i) e 1
به این شیوه هم می نویسم خطا میده i=1 یا i=e=1
می خواهم بگم که jهای بزرگتر از 1 رو قبول کنه و مقدار i هم فقط عدد 1 باشد( گره مبدا)
در واقع یعنی مجموع مسیر ها از مبدا (i=1) تا سایر گره ها (j>1) برابر تعداد خودروها(تعداد سفرها) باشد.
در ست i , j رو تعریف کردم. /12*1/i وj
متشکرم
باید بنویسین
$(ord(i)=1)
شما خیلی زود شروع به کد نویسی کردین متاسفانه. سعی و خطا نیست که هر سری یه روش رو امتحان کنین. باید مقداری بیشتر مطالعه کنین، دیگه بعدش موقع کد نویسی خیالتون راحت تره. الان هر کدی که تایپ میکنین از خودتون میپرسین درسته یا نه؟ و این رو اعصابتونه قطعا…
حق با شماست
متشکرم از راهنماییهاتون
خواهش میکنم
عدد بسیار بزرگ M را در گمز چطور کد می کنند؟؟
(t(i)+p(i)+t(i,j)-M(1-x(i,j,v))=l=t(j
سلام
یه پارامتر به اسم m تعریف کنین و یه مقدار بزرگی بهش بدین.
parameter
M/1000000/;
ممنون
با عرض سلام.
آیا برای تبدیل توابع هدف رادیکالی به فرم خطی رابطه ای وجود داره که به جای دستور sqrt بتوان ازون استفاده نمود؟ با سپاس
سلام
در حالت کلی، خیر. مگه اینکه تابع هدف شما یه ویژگی خواص داشته باشه و با یکم خلاقیت شما خطیش کنین.
مثلا اگه تابع هدف شما رادیکال x باشه. شما میتونین به جای رادیکال x بنویسین y.
بعد هر جا x داشته باشین بنویسین y^2 و بعد این y^2 رو خطی کنین. دیگه بستگی به هدف و خلاقیت و آزادی عمل پژوهشگر داره.
در حالت کلی خیر.
بسیار بسیار سپاسگزارم
و یک سوال دیگه اینکه، گمز محدودیت سوم مدل زیر رو خطا خطا میده !!!
;((((obj.. z=e=sum(i,sum(j,sum(v,(1/m)*g*d(i,j)*t(i,j)*x(i,j,v
;limit1(j)$(ord(j) Gt 1) .. sum(i $(ord(i) ne ord(j)),sum(v,x(i,j,v)))=e=1
;limit2(i)$ (ord(i) Gt 1).. sum(j $(ord(i) ne ord(j)),sum(v,x(i,j,v)))=e=1
;((limit3(j,v)$(ord(j)Gt 1).. sum(i ,x(i,j,v))=e= sum(k ,x(j,k,v
خطای 171 Domain violation for set رو برای K و V در انتهای خط محدودیت 3 می ده!!
در صورتی که در set تعریفشون کردم :
نودها
/i/1*12
/j/1*12
/12*1/k
/3/v تعداد خودروها
(دارم روی صحت سنجی مدلم کار می کنم. مدل از نوع VRP و فروشنده دوره گرد هست )
سلام ست تونو این طوری تعزیف کنید:
set i/1*12/
v/1*3/
alias(i,j,k);
با سلام و وقت بخیر
خدا قوت
کد نویسی محدودیت جذف زیر تور زیر رو می تونید درستش رو برام بنویسید؟
ممنونم
;limit10(s).. sum(v,sum(j <= s,sum(i <=s $(ord(i) ne ord(j),x(i,j,v)))) =l= abs(s)-1
i,jعضو s
i برابر j نیست
S زیرمجموعه N و ناتهی
سلام ممنون
set
v/1*2/
s/1*3/
j(s)/1*3/
i(s)/1,2/
;
limit10(s).. sum((v,i,j) $(ord(i) ne ord(j)),x(i,j,v)) =l= abs(card(s))-1;
اعداد ست را بر اساس داده هات می تونی تغییر بدی
سلام خسته نباشید
چگونه میشه محدودیت شرطی به صورت زیر رو تو گمز نوشت؟
Sum(l,x(l,j)) + sum((l,x(i,l))d(i,j و برا بخش دوم d(i,l)< d(i,j) باید باشه.
جواب بدین ممنون میشمممم
سلام
لطفا سوالتون رو واضح بپرسین. اصلا مشخص نیست سوالتون چیه. و اینکه کامنتهای بالا رو هم بخونین قبلش
mammon az pasokhgoiton vaghean site khob va mofidi darid insaalla movafagh bashid
ممنون از شما
salam agar mahdodiat haye moteghayer ghaire khatti bashad va sabet nabashad aya beyesti dar ghesmate equation on ro lahaz konam ya variables
سلام
یعنی چی؟
فرضدکنید در مثالی که شما آوردید در شرط های غیر مساوی به جای 10 یک تابع از خود X ها داشتیم و همیشه کران بالا رو اون تعیین میکرد ا
سلام فکر کنم منظورتون اینه که در محدودیت بنویسید x>10 یا اینکه در قسمت تعریف متغیرها بنویسید x.lo=10 . اگر منظورتون اینه فرقی نداره. اگر منظورتون این نیست پس بیشتر توضیح بدید
من یک مسئله غیر خطی دارم که محدودیت بالایی یک متغییر تابعی از از خود متغیر و دیگر متغیر هاست به این منظور من بایستی این محدودیت رو در قسمت متغییر ها تعریف کنم یا نه توی معادلات ایجادش کنم؟ تلگرام دارید ؟
سلام
باید محدودیت بذارین حتما حتما
سلام…ببخشید لایسنس DICOPT که مربوط به سالور MINLP را از کجا باید دانلود کنم؟ برنامه که اجرا می کنم می گه لایسنس می خواد.
باتشکر از زحمات شما.
سلام
تو سایت لایسنس های مناسبی گذاشتیم. شما تاپیک زیر رو بخونین و نسخه ی 24.7.3 رو دانلود کنین.
دانلود لایسنس نرم افزار گمز
سلام مهندس محمودی عزیز
خسته نباشید
میخاستم بپرسم آیا میشود نرم افزار متلب 64 بیتی را با گمز 32 بیتی لینک کرد. امکانش وجود داره؟
با تشکر
سلام
ممنونم همچنین
بله. مهم فایلهایی هست که تولید میشه.
سلام….لطفا چندتا مرجع معرفی کنین می خوام گمز رو حرفه ای یاد بگیریم…لطفا هر راهنمایی می دونید بهم بگین…خیلی لطف می کنید.
سلام
دو منبع زیر برای شروع کافی هستن.
Mccarl gams user guide
GAMS user guide
هر کدوم رو بزنین تو گوگل پی دی افش رو بهتون پیشنهاد میده
سلام….ببخشید من دنبال تابع مصرف سوخت و تابع آلودگی یک واحد تولیدی هستم یک مرجعی بهم معرفی کنین که این توابع درش باشن؟
باتشکر.
سلام
این توابع تو مدلای مختلف به شکلای مختلف تعریف میشن.
مثلا حمل و نقل جاده ای، مدله ای CGE، مدلهای مصرف انرژی. شما باید با توجه به خواسته ای که دارین موارد مورد نیاز رو مطالعه کنین.
سلام….آیا ممکن هست مثلا برنامه گمزی که نوشتیم برای یک شبکه جواب بدهد ولی اگر مثلا شبکه را تغییر دادیم برنامه جواب فیزیبل پیدا نکند؟
باتشکر.
سلام
ببنید من سوالتون رو اینجوری جواب میدم:
برا اینکه جواب شدنی بگیرید.
1- هم باید داده ها کاملا صحیح باشن و به مدل بخورن
2- هم باید مدل صحیح بوده و محدودیت ها با هم تناقض نداشته باشن. باتوجه به داده ها البته.
3- سالور مناسب داشته باشد.
بعضی وقتا هم لازمه مدلتون رو اگه غیر خطی هست خطی کنین.
سلام دوست عزیز
در خصوص خطی سازی ضرب چند متغییر باینری درهم که هر کدام دارای دو تا سه اندیس هستند اگر امکان داره راهنمایی بفرمایید.
شکل این حالت :
( X(I,j,k) * Y(t,f) * W(n,f) * NC(I,j,t,f
همینطور در خصوص وارد کردن این موارد در محدودیت ها (من برای 2 متغییر باینری را میدونم ولی برای چند متغییر باینری را نه متاسفانه).
ممنونم
سلام
روش مشابه هست. چیزی که باید بدونین اینه: حاصلضرب این عبارت یا یک میشه، یا یک! پس هر وقت همه این عبارات برابر یک بشن، اونوقت حاصلضرب هم یک میشه. ولی اگه حداقل یکی صفر بشه بقیه هم صفر میشن. شما این اصول رو در نظر داشته باشین، و مشابه ضرب دوتا باینری عمل کنین.
اگه نتونستین، میتونین دوتا دوتا برین جلو. حاصلضرب X*Y رو خطی کنین اول. مثلا اسمشو گذاشتین XY . تو مرحله بعد XY*W رو خطی کنین.
خواهش میکنم و موفق باشین
سلام…اگر یک مدل غیرخطی را خطی کنیم و تو گمز حل کنیم آیا در جواب نهایی تاثیر داره؟ منظورم اینه که چقدر خطا داره؟ آخه گمز غیرخطی خوب حل نمی کنه.
سلام
معمولا تو سایزای بزرگ و مسائل پیچیده خطی سازی خیلی روش خوبی هست و بعضی جاها هم الزامی هست.
ممکنه مدل شما وقتی غیر خطی هست کامل حل نشه و یا اصلا حل نشه و سالور حریفش نشه. خطی سازی همیشه پیشنهاد میشه
سلام
چگونه ميشه محدوديت زير را در گمس نوشت
فرض كنيم t دوره از يك تا چهار داريم:
t=1,…,4
محدوديتي براي هر دوره
t=1 : y(t=1) < t * 10
t=2 : y(t=2) < t * 10 – y(t=1)
t=3 : y(t=3) < t * 10 – y(t=2) – y(t=1)
t=4 : y(t=3) < t * 10 – y(t=3) – y(t=2) – y(t=1)
با تشكر
توضيح اينكه y يك متغير بر حسب t است
سلام
مقداری کامنتها رو بخونین مهندس. ord و uel رو سرچ بزنین تو کامنت ها. و اینکه این رو راحت میشه به یه محدودیت تبدیل کرد. نمیدوتم شما چرا انقد گسسته نوشتین
سلام…دستور شرط را برای متغیر چطوری می نویسن؟ دقت کنید برای پارامتر یا ست نمی خوام دستور شرط بنویسم یعنی نمی تونم از علامت دلار استفاده کنم برای متغیر می خوام شرط بنویسم.
باتشکر.
سلام
علامت دلار متغیر رو قبول نمیکنه. شما باید با یکم خلاقیت محدودیتی که دارین رو یه جور دیگه بنویسین. یا اینکه از ifthen هم استفاده بکنین.
سلام, نوشتن حلقه در گمز (مثل حلقه for) به چه صورته؟ لطفا طرز نوشتن حلقه رو بنویسید.
سلام
for (i = start to|downto end [by incr],
statements;
);
برای مثال
for (i = 1 to 1000,
x.l(j) = uniform(0,1) ;
solve ml using nlp minimizing obj ;
) ;
سلام،
میشه لطفا طرز نوشتن دستور انتگرال تو گمز رو بنویسید.
سلام چنین دستوری نداره به طور مستقیم نمی توان در گمز انتگرال گرفت
ممنون از شما بابت کمکتون
سلام
من میخوام مساله ای رو در گمز کد نویسی کنم که دوتا تابع هدف داره. تابع هدف هزینه و تابع هدف آلودگی؛ که هر دو همزمان باید مینیمم بشوند. چجوری باید این رو وارد گمز کنم؟
سلام
روشهای مختلفی برای بهینه سازی چندهدفه هست. بسته به تشخصی و نیاز شما باید یکی رو انتخاب کنین.
شما میتونین روشهای زیر رو بخونین و ببینین کدم به دردتون میخوره.
روشهای وزنی، مانند وزنی، نرمال سازی شده، روش معیار جامع، روش حداقل انحراف و..
روشهای لکسیکوگراف
روشهای برنامه ریزی آرمانی
روشهای تجزیه
روشهای محدودیت اپسیلون
من فرصت محدودی دارم.
نمیتونم همه این روش ها رو مطالعه کنم.
امانش هست شما سوالم رو ببینید و روش رو تشخیص بدین که من مستقیم همون یک روش رو مطالعه کنم؟
اگه فرصتتون محدوده روش معیار جامع با حداقل انحراف رو استفاده کنین.
سلام .خسته نباشید…
من می خوام دو تا محدودیت به صورت زیر تعریف کنم
به ازای هر i<j قرار بده Wij=X(i)+X(j)
به ازای هر i<j قرار بده Wij<X(i) و Wij<X(j)
میشه لطفا راهنماییم کنید که چطور باید این کار رو انجام بدم؟
سلام
کامنتها رو بخونین. دستور شرطی دلار $ و مشخصه ی ord رو جستجو کنین
سلام . ممنون.
به این صورت که نوشتم درسته؟؟؟
F2(i,j)$(ord(i)<ord(j)).. W(i,j)=g=x(i)+x(j);
F3(i,j)$(ord(i)<ord(j)).. W(i,j)=l=x(i);
F4(i,j)$(ord(i)<ord(j)).. W(i,j)=l=x(j);
اگه i و j قبلش alias شده باشن ، مشکلی تو شناختن قید ها به وجود نمی یاد؟؟
سلام
مهندس شما از اعضای فعال و خوب سایت هستین. خوشحالم که هر سوال براتون پیش میاد میان تو سایت میپرسین. این قوت قلبه برامون.
فقط مقداری توصیه میکنم مقداری صبور باشین. شما میتونستین این رو تست کنین اگه مشکلی پیش اومد بعد اینجا میپرسیدین، یا مثلا درست ویرایش میکردین. عجله کار شیطونه.
درست تعریف کردین ولی دقت کنین شرط هایی که تعریف کردین سه تاش یه چیز رو نشون میده. تغییرش بدین
حق با شماست من خیلی عجولم. ببخشید اگه خسته تون کردم.
آخه قیدها همون جوری که می خواستم تعریف شدن اما خروجی رو صفر میده بازم.
اگه بخوام همه قیدها توی صفحه خروجی نمایش داده بشن باید از چه دستوری استفاده کنم؟
از دستور زیر استفاده کنید.
option limrow=10;
10 اون عددیه که انتظار دارین به این تعداد قیدا براتون بسط داده بشن. میتونین عدد بزرگی بگیرین. مث 100
سلام استاد گرامی
امیدوارم حالتون خوب باشد
کد نویسی محدودیت پنجره زمانی در نرم افزار گمز چگونه است؟؟
من یک نمونه نوشتم ببینید درست است؟؟
ممنون
CO12(PN,K).. LOW_PN(PN)=l=y(PN,K
CO13(PN,K).. y(PN,K)=l=UPP_PN(PN)
سلام
ممنون و همچنین
هر کدی از رو یه مدل و مفهوم نوشته میشه. باید ببینیم مفهوم اینایی که نوشتین چی هست و فرمول ریاضی واقعیش چی هست
سلام.من یک محدودیت تعریف کردم و میخام بنویسم اگه مثلا t بزرگتر 2 بود از این معادله استفاده کن و گه کوچکتر بود از یه معادله دیگه.چطور میتونم این محدودیتم رو به دو محدودیت تبدیل کنم ؟لطفا راهنمایی کنید
سلام
اولا دو تا اسم نیاز دارین، مثلا c1 و c2 برا این دو معادله.
ثانیه برای این شرطی که گفتین از دستورات شرطی دلار $ که با ord نوشته شدن استفاده کنین. کامنتای همین تاپیک رو بخونین. دنبال ord بگیردین.
ord(t) > 2
با سلام و خسته نباشید به شما، ممنون از سایت خوبتون.
من تعدادی محدودیت غیرخطی دارم که شامل متغیرهای باینری هستن. می خوام در گمز به خطی تبدیل شون کنم. آیا میشه که یک متغیر باینری جدیدی مثل Z تعریف کرد که برابر با حاصلضرب اون دو متغیر باینری x1 و x2 باشد و z رو در محدودیت غیرخطی، جایگزین شان کرد؟
و هم چنین دو محدودیت جدید( 2z-x1-x2 کوچکتر مساوی صفر) و ( منهای z + ایکس 1+ ایکس 2 کوچکتر مساوی یک ) رو اضافه کرد؟
سلام
ممنون و خواهش میکنم.
به طور کلی هر روش خطی سازی رو میشه تو گمز پیاده کرد. بله
با سلام
یک سوال دیگه هم از خدمتتون داشتم.
در جواب مسئله ، حد پایین و بالای متغیر x رو مثلا 200 نمایش میده اما مقدار level رو صفر!!!
دلیل این موضوع چی میتونه باشه، چون با منطق ریاضی اصلا همخونی نداره؟
سلام
اگر حد بالا و پایین هر دو 200 باشن الزاما ایکس باید 200 باشه. مدل نشدنی نیست؟
محدودیت ها را دوباره چک کنید و درستی آنها رو بررسی کنید.
اگر مساله نشدنی باشه خود نرم افزار اعلام نمیکنه؟
در ضمن حتی وقتی یک محدودیت تعریف میکنم که متغیر رو مساوی با یک عدد ثابت در نظر بگیره، باز هم در جواب اون رو صفر نشون میده!
سلام
سوال اولتون: بله میگه نشدنیه. process window رو چک کنین.
سوال دوم هم به همون دلیله
درسته، مساله نشدنی هستش که نرم افزار هم در توضیحات حل، بهش اشاره کرده.
ممنون از سایت خوبتون
با سلام و تشکر از سایت بسیار مفیدتون
محدودیت زیر رو چطور باید در گمز نوشت – به ازای هر j,t
x(j,t+1)=x(j,t)+15
سلام
c(j,t)..x(j,t+1)=e=x(j,t)+15;
ممنون از پاسختون
سلام و تشکر بابت راهنمایی هاتون
تو گمز چجور بنویسم متغیرم positive variable هست و مخالف صفره؟؟؟
سلام
یه حد پایین براش در نظر بگیرین. فرض کنیم x متغیر شماست. بعد این که متغیر رو تعریف کردین، کد زیر رو بذارین.
x.lo=eps;
که به جای eps میتونین عددی خیلی نزدیک به صفر رو در نظر بگیرین. یا همین eps براش کافیه.
با سلام و تشکر بابت وقتی که میذارید
وقتی مدل حل میشه کنار محدودیت ها نوشته lhs=0
این خوبه یا نه؟ اصلا lhs میخاد چی رو بگه؟
ممنون
سلام
مقدار سمت چپ. left hand side
سلام ممنون از اینکه وقت میذارید و به سوالات کامل و جامع جواب میدید مسئله من vrp با pickup and delivery نمیدونم این محدودیت رو چطور بنویسم میشه کمکم کنید؟؟
هر مشتری که برداشته میشه توسط همون ماشین تحویل داده شود .
i,j,k,nاندیس هستن و i نقاط برداشت و i+n نقاط تحویل
Xijk-∑Xji+nk=0
سلام
خواهش میکنم.
شما فضای مربوط به نقاط و اندیس ها رو بیشتر باید توضیح بدین.
توصیه من اینه که از مقالات پایه که این محدودیت رو دارن استفاده کنین. مخصوصا مقالاتی که دپو دارن توشون
iنقاط برداشت مشتری هست و n+i نقاط برداشت به عنوان ما اگه ما 3 مشتری داشته باشیم iمیشود 1 و 2 و 3 و n+i میشود 4 و 5 و 6
مشکلی که من دارم اینه که وقتی مشتری 2 برداشته میشه در همان تور نقطه 5 در نظر گرفته نمیشود چون مسله P_D نمیشه
من از مقاله کمک کردم
نمیدونم چه جوری کد کنممحدودیت را
اگه امکان باشه مقاله را براتونم میل میکنم
ایمیل کنید
سلام و وقت بخیر
ممنون از سلیت خوبتوت که همیشه مشکلمون رو حل میکنه
تابع من چند هدفست و میخاستم با روش اپسیلون حل کنم
میشه برای این روش یک کد نمونه یا اموزش بزارید
بازم ممنون بابت این سایت خوب
سلام
ممنون و خواهش میکنم.
متاسفانه الان مثال ساده نداریم. کدایی که داریم مربوط به پروژه مشتریاست که تعهد داریم پخش نکنیم. ولی حتما یه مقدار سرمون خلوت بشه. چشم
بهرحال ممنون از جوابتون
من یک سوال دارم
تو حل مساله چند هدفه، اگر سه تابع هدف داشته باشیم و بخوایم یکی رو تابع هدف اصلی و بقیه رو بصورت محدودیت بنویسیم و هر بار حد توابعی که بصورت محدودیت نوشتیم رو تغییر بدیم، آیا جوابی که بدست می اوریم درسته؟؟ یعنی این کار منطقی هست؟
درواقع خودمون دستی با گمز مساله رو حل کنیم و نه با کدنویسی برای محدودیت اپسیلون
باتشکر
سلام
همه جوره میشه. فقط باید دقت کنین که چه وقت مسئله نشدنی میشه. مفهوم رو مسلط بشین اول. بعد پیاده سازیش سخت نیست.
باعرض سلام و خسته نباشید خدمت شما، ممنون از سایت خوبتون
یک متغیر باینری مانند (XP(r,rprime موجود است بطوریکه اگر rrprime مقدار متغیر برابر صفر می گردد.
می خواستم ازتون سوال کنم که آیا نحوه نوشتن کد و دستور ord درست است؟ (MPC عدد بزرگ است)
حالت اول:
const1a(r,rprime,v)$(ord(r)ord(rprime))..CP(r)=g=CP(rprime)-MPC*((XP(r,rprime
سلام
سوالتون مشخص نیست.. ولی کد باید به شکل زیر حتما بازنویسی بشه. من فرض کردم بین ord ها مساوی هست.
const1a(r,rprime,v)$(ord(r) = ord(rprime))..CP(r)=g=CP(rprime)-MPC*((XP(r,rprime
در محدودیت اول فرض بر این است که اگر rprime بزرگتر از r باشد متغیر باینری برابر 1 هست و در در محدودیت دوم در صورتی که r بزرگتر از rprime باشد، متغیر باینری صفر می شود. در این دو وضعیت، آیا باید در محدودیت اول ord(rprime بزرگتر از ord(r نوشته شود و در محدودیت دوم ord(r کوچکتر از ord(rprime ؟
سلام
با این اطلاعاتی که قطعی دادین. بله باید اینکار رو بکنین
سلام وققتون بخیر یه سوال در باره نحوه کد کردن
داشتم که Z خودش متغییر باینری هست
Z(S,I,T)>=Z(S,I-1,T)
سلام
ممنون همچنین
الان سوالتون چیه خب؟
سلام. خسته نباشید و ممنون بابت پاسخگویی سریعتون
ببخشید ی سوال داشتم از خدمتتون.من توی مدلم متغیرهام رو باینری تعریف کردم و مساله م جوری هست که این مدل توی ی loop چندین بار باید حل بشه ولی بعد از چند تا تکرار این متغیرها مقدار منفی می گیرن در صورتی که باینری تعریفشون کردم. چطور چنین چیزی امکان داره؟؟
سلام
سالور مناسب رو براش انتخاب کنین مثلا بارون و کد optcr هم صفر بگیرین. این دو تا کد زیر رو بعد از دستور Model بنویسین. احتمالا مشکل حل میشه.
option minlp=baron;
option optcr=0;
این برا وقتیه که مدل شما از نوع Minlp باشه.
با سلام
امكانش هست كه با وجود دستور minimizing تابع هدف، بتوان كدي نوشت كه دستور maximizing رو هم اجرا كند و بتوان حد بالايي رو هم براي تابع هدف بدست آورد؟
سلام
من یک مدل دو هدفه دارم که در حالت minimizing جواب شدنی دارد ولی در حالت maximizing مدل نشدنی می شود. می خواستم بدونم بغیر از دستور using MIP maximizing z آیا باید تغییرات دیگری را هم در تابع هدف و محدودیت ها ایجاد کنم؟
سلام
جواب بیکران داره احتمالا مسئله ماکسیمایز شما.
ممنون از پاسخ تون. امكانش هست كه كدي رو معرفي كنيد كه بتوان حد بالايي رو هم براي تابع هدف بدست آورد؟
خواهش میکنم. خب مهندس وقتی میگیم که بیکرانه یعنی حد بالاش بی نهایته. نمیشه
ولی اگه میخواین خودتون براش کران تعیین کنین. بعد از تعریف متغیر مربوط به تابع هدف در بخش متغیر ها، این کد رو اضافه کنین.
z.UP=10000;
اینجا مثلا متغیر z هست و ما بهش گفتیم بیشتر از ده هزار نری جلو
ممنون از لطف تون جناب محمودي. با اين حساب ميشه يك مقدار ماكزيمم براي تابع هدف در نظرگرفت.
خواهش میکنم
با عرض سلام و خسته نباشید بابت سایت خوب و مفیدتون
من توی مدلسازی خودم میخوام یک سری متغیر را محاسبه کنم که یک ماتریس 70*70 میشه، حالا میخوام بگم در هر سطر حداقل مجموع درایه ها برابر با 1 باشه، برای این کار از مجموعه دستورات زیر استفاده می کنم:
EQ26(B,B1).. Be(B,B1) =E= rel_gt(S(B,B1),0)
EQ27(B).. SUM(B1,Be(B,B1)) =E= 1
S یه مجموعه ای است که در معادلات قبلی من محاسبه میشه، هرچند اگر EQ27 در معادلات نباشه و مثلا کامنتش کنم این شرایط همیشه برقرار هست ولی با اضافه کردن قید eq27 یه اروری به این مضمون میگیرم
Domain error(s) in nonlinear functions.
Check bounds on variables.
با توجه به این که این شرط اصلا برقراره و نباید محدودیت خاصی رو ایجاد کنه، نظر شما در این مورد چیه؟
امیدوارم سوالم رو واضح پرسیده باشم.
با تشکر از زحماتتون
سلام
ممنون لطف دارین.
حقیقتش اطلاعات زیادی دادین. مثلا مجموعه s که اصن نمیدونم چرا بهش اشاره فرمودین. ولی خب خواسته شما توش گم شد و نمیدونم دقیقا سوال چیه. اگه که برقراره بردارین.
سلام و خسته نباشید بابت سایت فوق العاده تون
ببخشید مساله من طوریه که اگر جواب، نشدنی یا نامحدود بود باید کات شدنی بودن بهش اضافه کنم و در غیر این صورت یک کات بهینگی. حالا سوال من اینه که دستوری هست که بتونه چک کنه یک مدل infeasible یا unbounded هست یا نه؟ برای حل اینجور مسائل که معمولا از masterproblem و subproblem تشکیل شده و هر بار باید بهش برش اضافه بشه چیکار باید کرد؟
ممنونم از وقتی که برای پاسخگویی میذارین
سلام
ممنون و خواهش میکنم. لطف دارین شما
برا سوال اولتون modelstat میتونه کمکتون باشه.
برا سوال دوم سوالتون کلیه. شاید یه لوپ به کارتون بیاد
سلام مجدد. متشکرم ازتون
میشه ی مثال بزنید از همین modelstat و با استقاده از دستور if؟
خیلی خیلی ممنونتون میشم
سلام
parameter ssss;
if(mymodel.modelstat=1,
ssss=0;
else
ssss=1;
);
display ssss;
سلام.خسته نباشید.تشکر بابت پاسخ های عالیتون.
من یه سوال داشتم میخواستم بپرسم توی گمز چطور میشه d1 به توان مثبت یا منفی نوشت؟برای برنامه ریزی آرمانی میخوام که باید توی گمز بنویسم.ممنون میشم پاسخ بدید.
سلام
ببینید تو آرمانی اون مثبت و منفی نشون دهنده ی توان نیست.
مثلا سه تا هدف داشته باشین، میتونین به شکل زیر تعریف کنین d ها رو:
dplus1,dminus1
dplus2,dminus2
dplus3,dminus3
با سلام و تشکر بابت راهنمایی های ارزشمندتون
امکانش هست در مورد optca و optcr توضیح بدین.
بسیارممنونم
سلام
دیدگاه های بخش سفارشی سازی خروجی رو مطالعه بفرمایین. توضیح دادم یه جایی.
تفاوت optcr و optca
با سلام و احترام
با توجه به مجموعه های زیر و اینکه V عضوی از مجموعه R می باشد، چگونه میتوان محدودیتی را که دارای دو سیگما با زیروند i عضو R و v عضو R است را وارد نرم افزار کرد؟
I: : انديس بکار رفته براي نقاط تقاضا با پسماند جامد شهری
L: انديس بکار رفته براي ایستگاههای انتقال
R: مجموعه نقاط تقاضا با پسماند جامد شهری و ایستگاههای انتقال (iUl)=R
با تشکر
سلام
اگه منظورتون L نیست و i,v خواص مشابهی دارن. کافیه i,R,v رو آلیاس کنین. بعد خیلی ساده sum((i,v), رو بزنین
سلام خیلی ممنون از سایت خوبتون
چطور میشه یک معادله رو به تعدادی از زیرمجموعه های یک ست وابسته کنیم. مثلا برای تک عضو با ” ” وابسته می شود اما اگر اعضای یک ست از شماره 1 تا 10 هستش چطور میشه یک معادله را برای 1 تا 5 وابسته کرد؟؟؟
سلام
با شرط ord
کامنتهای بالا براتون مفیدن
سلام
میخاستم یه متغییر وابسته رو بر اساس متغییر باینری دیگری تعریف کنم.یعنی زمانیکه برنامه در حال یکایک شماری متغییر باینری هست مطابق با همان تغییرات متغییر وابسته عدد صحیح مرا نیز تغییر دهد. از مقداری که این متغییر وابسته عدد صحیح به خود میگیرد باید در ادامه حل مسئله استفاده کنم. من معادله ای را با علامت =e= در قسمت equations مینویسم. ولی برنامه به مانند یک قید با آن رفتار میکند و فقط شرط درستی آنرا بررسی میکند.با علامت = نیز که نمیتوان در قسمت equations چیزی نوشت. در قسمت parameter هم که نمیتوان یک متغییر وابسته تعریف نمود.
ممنون میشم راهنماییم کنید
سلام
ممنون بابت توضیحات. ولی مقداری گنگه درخواست شما. لطفا با x و y توضیح بدین. و دقیقا بگین چی متغیره، چی پارامتر، چی باید حین حل مدل محاسبه بشه، وچی بعد از حل مدل. مرسی
سلام دوباره. خسته نباشید
مثلا x یه متغییر مستقل باینری هستش. و y یک متغییر عدد صحیح در بازه [5,0] و وابسته به x هستش یعنی y(x) حالا من میخواهم بعد از یکایک شماری برنامه برای x در هر حالت متغییر y نیز مطابق با تغییرات x تغییر کنه. این معادله را با چه علامتی و در کدام قسمت از برنامه بنویسم؟
مهندس سوال اصلی من رو جواب ندادین. میخواین بعد از حل مدل این عمل انجام بشه، یا همزمان با اینکه مدل داره حل میشه این y هم حساب بشه. اگرم تونستین تعاریف y رو که تو مقاله ی که دارین اینجا بذارین
مرسی از راهنمایی و همراهی شما.
من میخام همزمان با حل مسئله و یکایک شماری برای متغییر x، همزمان نیز متغییر عدد صحیح y نیز حساب شود.
مهندس خب y باید طبق فرمول خاصی نسبت به x تغییر کنه. اون فرموله چیه؟
منظور من اینه که این معادله را باید با این علامت =e= در قسمت equations بنویسم. برنامه گمز مقدار y را بدست میآورد و هر جا که در ادامه معادلات احتیاج به مقدار y باشد از جدیدترین y برای حل استفاده می کند؟ یه جورایی درباره منطق برنامه نویسی گمز میخاستم بدونم و میخاستم مطمئن بشم برنامه من در این قسمت مشکلی ندارد.
ممنون
اها. در مورد منطقش اینجوریه که مثلا متغیر x یه عدد میگیره. مثلا 1. بعد با این دید محدودیت ها رو باز میکنه و میگه که این x منه. برای بقیه هم همینطور. یعنی همه به طور همزمان بررسی میشن. خط به خط نیست معادلات. همه با هم یه فضا رو تشکیل میدین. دقیقا یه چیزی شبیه اون دیدی که شما نسبت به مدلهای تحقیق در عملیات دارین عمل میکنه.
باسلام و خسته نباشید به شما
چطور میشه سوپریمم بین دو عدد(پارامتر) را کد زد؟ از دستور smax میشه استفاده کرد؟
باسلام و خسته نباشید به شما
چطور میشه دستور سوپریمم را بین دو عدد(پارامتر) کد زد؟ از دستور smax میشه استفاده کرد؟
سلام
بله میشه.
قسمت مجموعه ها رو مطالعه کردم و جوابمو پیدا کردم
ممنون به خاطر سایت خوبتون
با سلام و احترام
من توی قسمت تعریف مجموعه ها(sets) یک مجموعه دارم که اجتماع دو مجموعه دیگس،چطور میتونم وارد نرم افزار بکنم؟؟
I: انديس بکار رفته براي نقاط تقاضا با پسماند جامد شهری
L: انديس بکار رفته براي ایستگاههای انتقال
R: مجموعه نقاط تقاضا با پسماند جامد شهری و ایستگاههای انتقال (iUl)=R
مجموعه R چطوری وارد نرم افزار میشه؟
سلام
دسته بندی سایت رو مطالعه بفرمایین. منوی کناری، بخش دسته بندی یا لینک زیر:
اجتماع مجموعه ها در گمز
با سلام
چطور میتونم محدودیتی رو کد کنم که بزرگترین عدد رو از بین یک متغیر تصمیم پیدا کنه مثلا بزرگترین مقدار (x(i,j,c به ازای تمام iوj ها برای یک cخاص
سلام
از دستور smax استفاده کنین.
مثلا:
a(c)=smax((i,j),x.L(i,j,c));
این برای وقتیه که مدل حل شده (یعنی بعد از دستور solve)، اگه مدل حل نشده که قضیه فرق میکنه.
برای وقتی که مدل حل نشده چطور میشه؟
چون من میخوام از بزرگترین مقدار یک متغیر تصمیم تو محدودیت بعدی استفاده کنم؟
به عنوان مثال متغیر تصمیم (T(c میشه بزرگترین مقدار (x(i,j,c به ازای تمام i,j ها برای هر c
سلام
ی کاری نکنین که زمان حل مدل بره بالا. خیلی ساده محدودیت زیر رو به کدتون اضافه کنین:
eq(e,i,j).. x(i,j,c)=l=T(c);
سلام و خسته نباشید
ببخشید در مدل من شاخص i رو که تعریف کردم حدودش مثلا از یک تا 30 هست ولی توی محدودیت هام که به شکل سیگما روی i هست میخام i از یک تا 29 باشه، باید چطوری بگم اینو؟؟
یه سوال دیگه ای هم که دارم ، در مدل من i=1,…,T-1 روز ورود، j=1,…,T مدت اقامت در هتل هست، حالا یک محدودیت میخام تعریف کنم که برای هر روز معمولی p برایند ورود و خروج در ان روز را کمتر از ظرفیت اتاف های هتل قرار می دهد ، که p=1,…,T-1 میخواستم بدونم اندیس p رو چطوری باید تعریف کنم ؟
سلام
چند تا از کامنتای بالا که مربوط به ord و دستور شرطی دلار یا $ هست رو بخونین متوجه میشین.
این شرط لازمه براتون:
$(ord(i) <=29)
خیلی ممنون ، متوجه شدم، فقط برای اندیس p باید چکار کنم ؟ از دستور alias که نمیشه استفاده کرد ، درسته ؟
اگه از دستور alias استفاده کنم ، باید متغیر X که قبلا با اندیس i در متغیرها تعریف شده ، با اندیس p هم مجددا در متغیرها تعریف بشه؟
سلام
نه مشکلی نیست. آلیاس کنید
سلام
آلیاس کنین. مشکلی پیش نمیاد احتمالا
سلام
چطوری میشه که گمز خروجی های صفر را هم نشان بده و به صورت فضای خالی نشان نده؟
ممنون میشم جواب بدید
سلام
تو بخش solution report و زیر بخش SolVar تو lst فایل میتونین کامل ببینید چجوری حل شده.
یه کار دیگه هم میتونین بکنین. اینکه یه شرط if بنویسین بعد دستور solve و بگین که مثلا اگه متغیر x(i) برابر صفر شد، به جاش بنویس مثلا هزار. بعد display کنین
با سلام و احترام
در مدل سازی مساله QAP (تخصیص درجه 2) به مشکل برخوردم.متغیر x(i,k) باینری تعریف کردم. ولی میخام به ازای i=9 , k=10 این متغیر برابر 1 باشد. تو محدودیت ها تعریفش کردم.
constr5..x(9,10)=e=1
ولی با این error مواجه شدم
set identifier or quoted element expected
ممنون میشم کمکم کنین
سلام
عدد خالی نباید استفاده کنین. باید از کوتیشن استفاده کنین:
constr6.. x('9','10')=e=1;
سلام
من میخوام معادله زیر را توی گمز بنویسم ولی چون نمیشه ifرا توی معادلات نوشت به مشکل خوردم
اگر n(g,t) منفی باشد sum(g,n(g,t))=e=b(t)
از طرفی توی محدودیت ها داریم که n(g,t) باید مثبت باشد بنابراین نمیتونم عبارت شرطی را هم به صورت محدودیت بنویسم چون به تناقض میخوره!
ممنون میشم راهنمایی کنید.
سلام
خواهش میکنم ولی خب من چی بگم الان. بلاخره n باید منفی باشه یا مثبت. مشکل تو محدودیت نیست که، تو تعریف شماست. مگه میشه هم مثبت باشه و هم منفی
سلام یه معادله خطی به این شکل در داخل گمز میخواهیم بنویسم ک
L (T)= 0 ,T<ET
L(T)= T-ET/E-ET,ET<T<E
L(T)=1,E<T<L
L(T)=EL-T/EL-L,L<TEL
که در اینجا ET ,EL, E,L,پارامتر اندیس دار هستند، و Tمتغییر است، L هم متغییر،این و چطوری باید نوشت از طریق IFTHEN بنویسیم در نمیاد، معادله رو غیر مشتق پذیر می کنه، از DNLP مدل می گه حل کنین که حل نمی شه، راهکاری داره ایا ؟
سلام
فرض کنید مجموعه ای {1,2,3,4}=t داریم و میخواهیم یک SUM بزنیم از t=2 تا t به ازای هر t در محدودیت مورد نظر.چه طوری میشه نوشت؟
ممنون
سلام
یه tt به t الیاس کنین.
تعریف Alias در گمز
بعد بگین t بزرگتر مساوی 2 هست و کوچکتر مساوی tt
c(tt).. sum(t$ord(t) >=2 and ord(t) <= ord(tt)),x(t))=l=A(tt);
اقا سلام بسیار لنگ هستم
چطور میتونم مقدادیری ک مقدار صفر میگیره در گمز رو تو خروجی بجای فضای خالی ..همون مقدار صفر واردش بشه
چون میخام بریزم تو مطلب. اونجا ی فضا خالی ایجاد میشه کل ماتریس بهم میخوره..
ممنون میشم زود کمکم کنید
مثلا pi خروجیاهاش بترتیب ۱ ۲ ۳ ۰ ۵ هستش…این صفرو نشون نمیده و گپ هستش….وقتی میفرستم مطبل ۵ جا صفرو میگیره… چکار کنم تو گمز همون صفر نشون بده.
ممنون
سلام خسته نباشید.من داخل معادلاتم رادیکال دارم و زیر رادیکال دو متغیر با توان دوم. از SQRT و SQR استفاده کردم خطا داد.
ممنون میشم راهنماییم کنین
سلام
زیر قدر مطلق رو بذارین تو قدر مطلق: abs()
ببخشید من منظورمو اشتباه رسوندم و شما تصور کردیم که متغیرهارو از رادیکال بیرون بیارم. ولی چون زیر رادیکال دو تا سیگما دارم نمیشه اینکارو انجام داد. در کل رادیکال و توان رو چجوری باید کد کرد؟وآیا شما تو سایتتون نمونه برنامه ریزی چند هدفه دارین؟
من متوجه حرف شما شده بودم. میگم که تو گمز، عددی که دارین به توان میرسونین رو باید بذارین تو قدر مطلق. خیر نمونه نذاشتیم تو سایت
من فکر می کردم میشه یک متغیر تصمیم رو قبل از equation ،معادله اش رو نوشت که الان فهمیدم نمی شه و حتما باید تو equation نوشته شه.
بعد اینکه 2 تا سوال بود 🙂
خیلی ممنون از راهنمایی هاتون در ضمن اون کد execspeed که برای تولید اعداد تصادفی تو سایت گذاشتید ،خیلی بدردم خورد چون اعداد تصادفی ام تو اجراها اصلا تغییر نمی کرد.
ممنون
سلام.
فرض کنید یک مجموعه تعریف کردیم که اسمشو میذاریم A. روی این مجموعه بکمک آلیاس، مجموعه دیگه ای به نام B تعریف میکنیم.مجموعه سومی هم تعریف میکنیم با نام I.حالا فرض کنید یک محدودیت داریم به شکل زیر:
SUMMATION(i,Q_IC)=1) FORALL C(C’)، که در اون C روی مجموعه A و C’ روی مجموعه B حرکت میکنه. میخواستم بدونم ما باید دو تا محدودیت تعریف کنیم بازای A و B یا اینکه چون تعریف کردیم B آلیاس A، گمز محدودیت روی C که عضو A هست رو برای C’ که عضو B هست هم محاسبه می کنه؟
ممنون.
سلام
نه نیازی نیست و محاسبه میکنه
با سلام و تشکر از سایت خوبتون
ببخشید این محدودیت در گمز چه جور نوشته میشه (علامت عضویت چه جوری تعریف میشه)
Sum ((n|(I,n)∈A),z(I,n))=x(I,j) be ezai i∈I, j∈J, i≠j
سلام
یه زحمت بکشین و دقیقا همین تاپیک که توش کامت گذاشتین رو مطالعه کنین!
ممنون از پاسخ تون
ببینید تقریبا یک چنین چیزی هست ،
objfunc = sum((i,j)$(ord(i) ne ord(j),l(i,j) * n(i,j)));
n(i,j) قبلا به عنوان پارامتر تعریف شذه، یک ماتریسه 2 بعدی هس و مقدار داره.
l(i,j) هم قبلا به عنوان متغیر تعریف شده و قبل از equations ، فرمول بدست آوردنش بیان شده. منتها یک مساله اینه که مینیمم ماکزیمم تابع هدف رو می خوایم، برای این کار مثل مساله مونتاژ باید ماکزیمم تابع هدف رو به عنوان محدودیت بیارم و هدف solve رو مینیمم کردن بیان کنم؟
مساله بعدی اینه که در فرمول بدست آوردن تابع هدف دو پارامتر دارم که ابتدای کار مقدار دارند، بعد باید در طی 2 مرحله مثلا از بین چند گره یکی که قبلا انتخاب نشده و مثلا کمترین فاصله با گره جاری را داره انتخاب شه و اینجا بسته به اینکه چه گره ای انتخاب میشه یکی از پارامترها که در بالا ذکر کردم، اینجا برای این گره مقدارش باید عوض شه.
هر دو پارامتر از نوع بردار هستند.
پارامتر دیگه هم وقتی تمام مراحل انتخاب انجام شد و مسیرها مشخص شدند در رندی که قبلا حداکثرش رو مشخص کردیم مقدار اون پارامتر دوم برای گره های متناظر هم طبق فرمولی تغییر می کنه.
این روند رو چطور می تونم پیاده کنم؟
این کار رو در متلب انجام دادم ولی اینجا می خوام با نوشتن این کدها بگم که اون چیزی که قبلا در متلب نوشته بودم ،در گمز مدل ریاضی اش این هست.
ببخشید خیلی زیاد شد ، ولی گفتم توضیح کامل بدم که ازتون راهنمایی بگیرم.
ممنون
و یک چیز دیگه، من تو برنامه هایی که دیدم و نوشتم ، برنامه ای که مقدار پارامتر رو کاراکتر بده ندیدم ، خودم هم وقتی از کوتیشن یا دابل کوتیشن استفاده میکنم خطا میده.
میشه بگید چطوری میشه مقداردهی پارامتر رو با کاراکتر انجام داد؟
ممنون
سلام
یعنی چی کاراکتر بده؟
یعنی اینکه مثلا پارامتر a مساوی با گردو باشه و b مساوی با سیب؟
یا اینکه با کوتیشن a(‘tehran’) رو برابر 5 قرار بدین مثلا؟
ممنون
منظورم اینه که اگر status اسم یک پارامتر باشه و من می خوام این پارامتر رو مقداردهی کنم با ‘normal’
status = ‘normal’
این چیزی که بالا نوشتم خطا میده ، حتی اگه اینجوری بنویسم
status = “normal”
چطوری می شه این مقدار این پارامتر را با عبارت normal مقدار بدم؟
با تشکر فراوان
فک کنم منظورتون این باشه:
status('normal')=10;
سلام خانم جعفری
در مورد سوال اولتون. یعنی چی معادله L قبل از دستور equation اومده؟ اینکه کار درستی نیست. به عنوان جواب اولیه میاد یا چجوریه؟
سوال دوم: بله مینیمم و ماکسیممف با همون شرایط و فضای جواب
سوال سوم به بعدو نفهمیدم. سعی کنین با فرمول توضیح بدین.
شما 14 کامنت دارین تو سایت ما. کامنتاتون معمولا خیلی زبان روانی دارن. ولی این یکی دو تای آخر خیلی سخت بود فهمشون خدایی. 😀 شاید من مقداری حوصله ندارم
سلام
ایا دستور SUM()، لزوما می باید که روی متغیرها اعمال بشه؟نمیشه روی پارامتر اعمال کرد و جمع گرفت؟
سلام. نه اصلا مشکلی نیست. میشه
سلام و خسته نباشید، ممنون برای سایت بسیار خوبتون.
یک سوال داشتم ، اگر پارامتر یا متغیری در تابع هدف داشته باشیم که در ابتدای امر مقدارش مشخص نیست ولی در برنامه ی ابتکاری ش مرحله مرحله مقدار می گیرد، می خوام بدونم چطوری میشه این مقدار دهی رو هنگام تعریف محدودیت ها یا تابع هدف انجام داد؟ مثلا این متغیر یا پارامتر ،تعداد فرزندان یک گره در یک درخت باشه ، در ابتدای کار نمی دونیم که هر گره چه تعداد فرزند داره ولی در طول روند برنامه البته توی برنامه ابتکاریش مرحله به مرحله مشخص می شهکه چه گره هایی در این درخت ، فرزند چه گره های دیگری می شوند. چطوری میشه این کار را در برنامه نویسی گمز انجام داد؟
البته کاملا مشخصه که اگر فیلدی را از نوع پارامتر بگیریم، یعنی مقدار آن از ابتدا مشخص است و جز معلومات مساله ست ولی اگر از نوع متغیر بگیریم، یعنی فقط مجهول است. من ابتدای امر، نوع این فیلد را متغیر گذاشتم ولی چون در معادله ای که داشتم این فیلد در صورت کسر قرار می گیره و یک متغیر در مخرج، با سالور های مختلف که گذاشتم ، حل نشد برای همین تصمیم گرفتم نوعش را پارامتر بذارم ولی پارامتر هم در طول اجرا در تابع هدف مقدارش تغییر نمی کنه .برای همین گفتم یا پارامتر یا متغیر.
ممنون و سپاس فراوان
سلام
اینکه مخرج گذاشتین چه مشکلی داشت؟ ارور تقسیم بر صفر میداد؟
و اینکه اگه پارامتر بذارین، مشکلی هست براش loop بنویسین؟
نه ، ارور تقسیم بر صفر نمی داد ولی اگه صورت کسر متغیر باشه مخرج هم متغیر،خب نمیشه سالور رو مثلا lp یا mip تعریف کرد،نشدنی میشه.
من تو برنامه اصلی ام که ابتکاریه با while کار کردم که دلیلش هم این بود که نمی دونستم چقدر تکرار می خواد ، اینجا به بن بست خوردم.
یه مثال میشه بزنید از اینکه پارامتر رو در loop مقدارش رو تغییر بدیم و البته این loop در قسمت equation باشه؟
ممنون
ببینید من این رو پیشنهاد میکنم:
parameter zz,objValue(i);
equations
.
.
;
c1.. zz=e=something;
model mymodel /all/;
loop(i,
zz=z(i);
solve mymodel us lp min obj;
objValu(i)=obj.l;
);
display objValue;
نمیدونم چقد به دردتون بخوره. ولی loop نباید توش دستور model باشه و بهش دقت کنین
لطفا یه شبه کد بذارین اینجا. ببینم. مجهول دقیقا چیه
سلام
بنده یک مدل نوشتم که علامت ترم های تابع هدفم منفی است.یعنی متغیر و پارامتر مثبتند ولی علامت منفی در تابع هدف گرفته اند.زمان حل مقدار تابع هدف مثبت به من میده و نمیده مشکل از کجاست.وقتی در نتایج میرم همه هم منفی نوشته ولی تابع هدف مثبت نشان می دهد.به نظرتون دلیل خاصی داره؟
سلام
غیر ممکنه. display کنین متغیر مربوط به تابع هدف رو
با سلام و تشکر از راهنمایی های ارزشمندتون
قسمتی از تابع هدفم بصورت زیر هست
میشه کمکم کنید چطور خطیش کنم؟
y(y-x)
که xو y هر دو متغیر باینری هستند
سلام
این میشه y*y-y*x
y*y همون y میشه. چون باینریه. البته اگه اندیسا یکین.
y*x هم بارها تو سایت گذاشتیم چجوری خطی میشه.
سلام مجدد،
من سه تا مجموعه دارم j1،j2،c. یک متغیر باینری هم دارم، q. دو تا محدودیت دارم به شکل زیر،
cons(c,j1)..sum(j1,q(j1,j2,c))=e=1
cons(c,j2)..sum(j2,q(j1,j2,c))=e=1
میخواستم ببینم مشکلی نداره یک متغیر روی دو دسته اندیس متمایز j1 و j2 جمع گرفته بشه؟؟الان این دو تا محدودیت که نوشتم از نظر گمز مشکل نداره؟
سلام دستور درست به صورت زیر هست
;cons1(c,j2)..sum(j1,q(j1,j2,c))=e=1
;cons2(c,j1)..sum(j2,q(j1,j2,c))=e=1
سلام و سپاس بابت راهنمایی هاتون
میشه کمکم کنید این محدودیت رو چطور برای t های کمتر از n بنویسم
sum(j,x(f,j,t))=1
متغیرx باینری است
و n متغیری هست که مقدارش مجهوله
و j از یک تا سه است
خودم اینجور نوشتم ولی بعد یک رو
نمیدونم چی بذارم
sum(j,x(f,j,t))=e=ifthen(t<n,1,???)
چون برای t≥n فقط x(f,1,t)و x(f,2,t) صفر هستن ولی x(f,3,t) همچنان یک هست برای همین نمیتونم صفربذارم.
ممنون
سلام
T
سلام و ممنون
چون در /set T/1*8 دارم نمیتونم اونجا T بذارم چون براش ارور 148میده
میشه لطفا کمکم کنید
کدتونو برام ارسال کنین .
pc88bu@gmail.com
سلام مجدد،
من تابع هدف زیر را در گمر نوشته ام، می خواهم اندیس t، به جای اینکه تا آخرین مقدار تعریف شده در مجموعه برای اندیس t، فرضا T، شمرده شود، تا T-1 شمرده شود.آیا چیزی که در تابع هدف زیر نوشته ام، چنین خواسته ای را برآورده میکنه؟
SUM((C1,C2,J1,T)$(ORD(T)<=ORD(T)-1)AND ORD(C2) NE ORD(C1),RC(J)*Q1(C1,J1,T)*Q2(C2,J1,T+1))
سلام
خیلی واضح نبود
اگه منظورتون اینه که از یک مثلا شروع بشه تا یک عضو مونده به آخر: به جای ord دومی که نوشتین بنویسین card(t)
بله، منظورم همین بود.
اندیس یکی از متغیرهام t+1 هست، لذا اندیس t نباید تا خود مقدار T حرکت کنه دیگه.
سلام ببخشید چطور میتونم سه تا حلقه for تو هم بنویسم که به هر for ی فرمولی اختصاص داده شه و برای هر حلقه مثلا به این صورت باشه: برای i از یک تا یازده به طوری که شمارنده سه تا سه تا بالا بره یعنی مقادیر زیر رو فقط حساب کنه
i=1,4,7,11
در واقع هم نوشتن forرو بلد نیستم
هم اینکه چندتا for تو هم باشه که به هر for ی محدودیت اختصاص داده شه
و هم اینکه شمارنده به ی اندازه مشخصی هربار اضافه شه
و اگه از حلقه for استفاده کنم نیاز به solver خاصی هست یا با bonmin ران میشه؟
ممنون از لطفتون
سلام
خب for رو یاد بگیرین. تو در تو هم باشن اصلن هیچ مشکلی ایجاد نمیشه.
برای هیچ سالوری مشکل ایجاد نمیشه
با سلام مجدد
مقادیر بدست اومده برای یکی از متغییرهام با محدودیت مربوط به اون متغییر صدق نمیکنه
علت چیست؟
با تشکر
سلام
ریزتر چک کنین. بسط بدین محدودیت رو
و اینکه مسئله شایدم نشدنی باشه
با عرض سلام و خسته نباشید
بنده یه برنامه دارم به این صورت:
/24*0,1/ tt
/24*1/ (t(tt
بعد خواستم که به ازای زمان 0 یکی دو تا از پارامترهام صفر بشه یا یه مقدار از پیش تعیین شده بگیره
P.fx (h,tt)$(ord(tt) eq 0)=0
ولی این خواسته من اجرا نمیشه و P برای زمان 0 هم مقدار میگیره،لطف کنید بفرمایید که مشکل از کجا میتونه باشه.
با تشکر
سلام
فرض میکنم که منظورتون از پارامتر همون متغیره.
P.fx(h,"0")=0;
من این محدودیت در گمز نوشتم
(ooc(i,j).. sum(k$(ord(k)>=1 and ord(k)<=9),x(i,j,k)*x(i,j,k+1))=e=(d(i)-1)*z(i,j
ولی نمیدونم چرا اینطوری بازش می کنه و در جواب مینویسه یکی از ایکسهارو صفر نشان میده
(ooc(a,a1).. (0)*x(a,a1,1) + (0)*x(a,a1,2) + (0)*x(a,a1,3) + (0)*x(a,a1,4)
+ (x(a,a1,5)*(0) + (0)*x(a,a1,6) + (0)*x(a,a1,7) + (0)*x(a,a1,8
(x(a,a1,9)*(0) + (0)*x(a,a1,10) – z(a,a1) =E= 0 ; (LHS = 0
سلام
صحیحه این اکستند کردن گمز
لطفا بیشتر توضیح می دهید
ببینید قانون اول تو اگاریتم اینه که پایه صفر نشه. یعنی لگاریتم 0 بر مبنای 10 مثلا بی معنیه. تو گمزم همینه. شما نباید بذارین که لگاریتم واسه یه لحظه هم که شده صفر بگیره جلوش.
مثلا وقتی logx دارین. باید برای x یه حد پایین بگیرین
اینجا که من لگاریتم ندارم چرا صفر میشه
لطفا همونطوری که گفته، خط 37 فایل lst رو اینجا کپی کنین.
البته اگه فایل رو تغییر ندادین. اگه دادین، مجددا ران کنین، و خطی که گفته را کپی کنین همینجا
شما سوال قبلی من جواب میدین
من منظورم این سوالم است در مورد صفر خواهشا بیشتر توضیح دهید من دلیل گذاشتن صفر جای یکی از ایکسهارو متوجه نمیشم
“من این محدودیت در گمز نوشتم
(ooc(i,j).. sum(k$(ord(k)>=1 and ord(k)<=9),x(i,j,k)*x(i,j,k+1))=e=(d(i)-1)*z(i,j
ولی نمیدونم چرا اینطوری بازش می کنه و در جواب مینویسه یکی از ایکسهارو صفر نشان میده
(ooc(a,a1).. (0)*x(a,a1,1) + (0)*x(a,a1,2) + (0)*x(a,a1,3) + (0)*x(a,a1,4)
+ (x(a,a1,5)*(0) + (0)*x(a,a1,6) + (0)*x(a,a1,7) + (0)*x(a,a1,8
(x(a,a1,9)*(0) + (0)*x(a,a1,10) – z(a,a1) =E= 0 ; (LHS = 0
سلام
لطفا کدتون رو به ایمیل سایت بفرستین.
سلام
کدتون رو دیدم. چند تا نکته:
اول اینکه وقتی مدل حل میشه، درصورتی که دو تا متغیر در هم ضرب شده باشن، یکیشون رو عدد بهینه ش رو میذاره و یکیشون رو هم همینجوری به صورت مجهول میذاره. مث همین چیزی که برای شما رخ داده. همه x ها تو حالت بهینه صفر شدن. واسه همین فر مول شده صفر ضربدر متغیر.
نکته بعدی اینکه جواب مدل شما بهینه هست. ولی همه چی صفر میشه. مشکلی هم برای مدل ایجاد نمیشه! هدف ماکسیمم سازی هست که به x ربط داره. ولی تو محدودیت lc شما مجموع x ها رو برابر صفر گرفتین. انتظار درستی نیست مجموع چند عدد مثبت برابر صفر بشه، ولی عدد مثبت و غیر صفر به خودشون بگیرن. مثلا به جای اون صفر که گذاشتین، یک بذارین. ببینین چه بلایی سر جواب میاد.
مشکل از محدودیت آخر نمیدونم چرا وقتی حذفش می کنم جواب میده تا حدودی جواب میده
با سلام مجدد،
من توی تابع هدف مساله ام، عبارتی شامل قدر مطلق هست. تابع هدفم خطی شدنی نیست و از سالور MINLP استفاده می کنم. میشه بفرمایید دستور قدرمطلق تو گمز چی هست؟ و آیا اینکه این دستور میتونه متغیر بگیره و در عینحال، متغیر دیگری هم در این تابع ضرب بشه؟
سلام
مشکلی نیست هر جوری بخواین استفاده کنین، توصیه میکنم خطی کنین، اگه نشد که هیچی.
Abs(x)
وقتی مسئله رو حل می کنم جوابی بهم نمیده و پیام های خطای آبی رنگ می دهد و روی آنها که کلیک می کنم بعنوان نمونه بصورت لینک شده عبارت زیر را نمایش می دهد لطفا راهنمایی بفرمایید
Exec Error at line 37: log: FUNC SINGULAR: x = 0
**** (Exec Error at line 37: overflow in * operation (mulop
سلام
جلو لگاریتم نباید صفر بشه به هیچ وجه. پس متغیری که تو لگاریتم هست باید بزرگتر و نامساوی صفر باشه. میتونین براش کران پانن در نطر بگیرین.
X.lo=0.0001
تمام متغیرهایی که در لگاریتم است را بزرگتر از صفر گذاشتم اما هنوز این جنس پیغام خطا را می دهد
لطفا خط مربوط به خطا، و اجزایی که در الگوریتم هستن رو به همراه نحوه تعریفشون اینجا بذارین
بعنوان مثال این محدودیت
((db(t).. dT(t)=e=aT(t)- 30*log(pT(t))+ 21*log(s(t
این هم محدودیتهایی که داخل لگاریتم صفر نشود
gh(t)..pT(t)=g=0.01;
sh(t)..s(t)=g=0.01;
پیغام خطا برای محدودیت
**** Exec Error at line 42: log: FUNC SINGULAR: x = 0
**** Exec Error at line 42: overflow in * operation (mulop)
—- db =E= every site every day one request logical
db(1).. (UNDF)*s(1) + (UNDF)*pT(1) + dT(1) =E= 56.5458191457125 ; (LHS = UNDF)
db(2).. (UNDF)*s(2) + (UNDF)*pT(2) + dT(2) =E= 56.0952572431513 ; (LHS = UNDF)
db(3).. (UNDF)*s(3) + (UNDF)*pT(3) + dT(3) =E= 55.6482854562008 ; (LHS = UNDF)
سلام
داخل log ها +0.01 را اضافه کنید.
سلام و خسته نباشید
میخواسم بدانم این عبارت را چگونه می توان در گمز نوشت
3 + 2*(ln(X
واین مسئله چه نوع مسئله ای است آیا NLP است؟
سلام
اگه منظورتون از x متغیره بله مسئله nlp هست.
لگاریتم رو بر مبنای نپر به شکل log و لگاریتم بر مبنای 10 هم به شکل log10 باید بنویسین.
log(x)*2+3
سلام و بسیار ممنون بابت راهنمایی های ارزشمندتون
سوالی داشتم امکانش هست کمکم کنید tپارامتر هست از یک تا ۸ و در set تعریف شده ، tnمتغیر هست که باید مقدار بهینه اش مشخص بشه
برای بیان اینکه اگر t<tn آنگاه متغیر xصفر درغیر اینصورت یک بشه ،چرا این طرز نوشتن اشتباهه؟
E1..x(f,a,t)=e=if then (t<tn,0,1);
سوال دومم اینه دو تامحدودیت دارم که میخام برای t<tn بررسی بشن برای همین میخاستم t<tn رو بصورت یه محدودیت بنویسم اما ارور داد چون t در set هست اشتباهه
میشه کمکم کنید
سلام
اولا E1 باید به ازای اندیس ها باشه
ifthen هم باید سر هم باشه
به جای t باید بنویسین ord(t)
سالور هم باید چیزی مث sbb باشه.
تو کامنتای همین تاپیک بگردین. جواب سوالاتون رو با کلمات ord.ifthen پیدا میکنین
خیلی خیلی ممنون
اون دوتا محدودیت رو به اینصورت نوشتم خطای ۵۲ داد:
Endogenous $-control operations not allowed
;((E3(f,t,a)$(ord(t)<tn)..x(f,a,t)=l=Nperiod*(1-x(f,a,t
ببخشید بد کپی شد
E3(f,t,a)$(ord(t)<tn) ..
x(f,a,t)=l=Nperiod*(1-x(f,a,t));
سلام
وقتی tn متغیره نمیتونین از دستور شرطی استفاده کنین که.
فقط ifthen یا اینکه مدلسازیرو مقداری دستکار کنین.
با سلام خدمت شما
ببخشید من سه تا تابع هدف دارم که به صورت تک هدفه برنامه گمز آن را نوشته ام، حال میخاستم آنها را به صورت چندهدفه از روش اپسیلون محدودیت حل نمایم کسی در این رابطه اطلاعی داره کمکم بکنه ممنون میشم. بنظرتون کد زیر در این رابطه درست می باشد؟آخه بهم اررور میده.اگه میشه لطف کنید راهنمایی بفرمایید خیلی ممنون از شما.
MODEL SM1 /ALL/ ;
solve SM1 using mip minimizing z1;
display x.l,d,In.l,y.l;
parameter z11;
z11=z1.l;
equation cont10;
cont10..z1=l=z11;
MODEL SM2 /ALL/ ;
solve SM2 using mip minimizing z2;
display x.l,d,In.l,y.l;
MODEL SM3 /ALL/ ;
solve SM3 using mip minimizing z3;
display x.l,d,In.l,y.l;
MODEL SMt /ALL/ ;
solve SMt using mip minimizing zt;
display x.l,d,In.l,y.l;
سلام
برای روش اپسیلن به شماره ای که در سایت زنگ هست و یا ایمیلی که هست پیام بدین تا راهنماییتون کنن.
با سلام خدمت شما . و با تشکر از راهنماییتان.
خیلی ممنون.
با سلام مجدد
ببخشید میخواستم به این معادله نگاه کنید ببینید این معادله کجاش اشکال داره.ارور میده که :
Equation infeasible due to rhs value
demandcon(t,busp).. sum(i $ map(i,busp),w(i,t)*p(i,t))-sum(bus,linedata(bus,busp,’1/x’)*(d(bus)-d(busp)))=e=sum(bus,demand(t,bus));
در کل یعنی چی که مقادیر سمت راست غیر ممکن هستند.این یکی از محدودیت های مسئله من هستند.
سلام . مقدار سمت راست با چپ مساوی نیست برای همین نشدنی هست. من مدلتونو ندیدم . با تغییر داده سعی کنید مشکل بر طرف کنین یا برای سایت مدلتونو ایمیل کنید تا راهنماییتون کنیم.
سلام
من ی متغیر دارم با سه تا اندیس متمایز، قرار روی هر سه این محدودیتها، سیگما بگیرم تو تابع هدفم، منتها مشکلی که هست اینه که حدود بالا و پایین این سبگما ها بهم مرتبط اند، مثلا فرض کنید سیگما اول(بیرونی ترین سیگما از چپ) روی i از یک تا n ، گرفته میشه، سیگمای دوم روی k از یک تا k_i که k_i بصورت پارامتر به مدل تزریق میشه، بعبارت دیگه مقدار k_i با توجه به مقداری که i بخودش میگیره تغییر میکنه، و در نهایتم سیگما آخر هم روی s از یک تا S_ki گرفته میشه.S_ki هم مقادیرش با توجه به مقادیر k و i تعیین میشه. معادله مربوط به این قسمت از تابع هدفمو جطوری باید بنویسم؟
ممنون.
سلام
من ی متغیر دارم با سه تا اندیس متمایز، قرار روی هر سه این محدودیتها، سیگما بگیرتو تابع هدفم، منتها مشکلی که هست اینه که حدود بالا و پایین این سبگما ها بهم مرتبط اند، مثلا فرض کنید سیگما اول روی i از یک تا n ، گرفته میشه، سبگمای دوم روی k از یک تا k_i که k_i بصورت پارامتر به مدل تزریق میشه، و سیگما آخر هم روی s از یک تا S_ki گرفته میشه. معادله مربوط به این قسمت از تابع هدفمو جطوری باید بنویسم؟
ممنون.
سلام
تو کامتای همین تاپیک به دستورات شرطی دلار $ و ord دقت کنین متوجه میشین
کدهای فوق قبل از تعریف SET ها اضافه کنم یا قبل از تعریف مدل؟
قبل از دستور solve هر جا بذارین مشکلی نیست
اگر جواب بدهید ممنون میشوم
MINLP
minlp یک سالور نیست. یک دسته مدلسازیه
این کد ها رو به اول کدتون اضافه کنین.
option minlp=baron;
option optcr=0;
البته قبلش هم باید لایسنس رو نصب کنین و تاریخ لپتاپ رو بزنین رو 2004
دانلود لایسنس نرم افزار گمز
برنامه بدون خطا است ولی زمانی که به روش MINLP حل می کنیم پیغام کمبود حافظه میده
سلام و خسته نباشید
علت اینکه در حل پاسخ کمبود حافظه میزنه چیست؟
متشکرم
سلام
مرسی همچنین.
سالورتون چیه؟
با سلام
گمز یکی از محدودیت هام رو غلط میگیره.یعنی صفحه ارور نمیاد که قرمز باشه ولی حل نمیکنه.آیا شما توی این خطایی مشاهده می کنید؟
DGOEN(t) .. p(‘gen11’,t)/(sum(i , p(i,t)))=l=0.06;
جالب اینه که اگر جای اون تقسیم ضرب بنویسم حلش میکنه.
نوشته هاش آبی هست و نوشته:
eror at line 343:division by zero(0)
سلام
بله. ارور تقسیم بر صفره. شما به مخرج یه مقدار خیلی کوچیک مث 0.000001 اضافه کنین. مشکل حل میشه
با تشکر از پاسخگویی شما.
با توجه به اینکه p(i,t) خودش متغیر تصمیم گیری من هست چه جوری میتونم بهش مقدار بهش بدم؟
نگفتم مقدار بدین که، گفتم وقتی فرمول شما به شکل زیر هست:
a/b
اونو اینجوری تغییرش بدین:
a/(b+0.0001)
من اینجوری نوشتم بازم ارور داد:
DGOEN(t) .. p(‘gen11’,t) / sum(i,( p(i,t)))+0.000001=l=u;
اینجا تو مخرج نیست. آقا مخرج
با سلام
آقا عالی بوددددددد.واقعا ساییتون یه دنیایی هست واسه خودش.
انشالله موفق باشی
خواهش میکنم. ممنونم.
شمام همچنین
سلام
VARIABLE profit.L = 2.314621E+7
این نمایش جواب بهینه یعنی چی؟بالاخره جواب آخرش چنده؟
سلام
این e+7 یعنی ضربدر ده به توان 7
شما جواب متغیرها رو display کنین. اونجا بهتر نشون میده معمولا
سلام ممنون از سایت خوبتون
من میخوام متغیرهای دوگان مربوط به هر محدودیت را بدست آورم وقتی به قسمت MARGINAL در قسمت جواب گمز نگاه میکنم برای برخی متغیرها EPS تعریف شده ممکنه راهنماییم کنید؟
ممنون
سلام
شما با دستور display میتونین دوگان یه متغیر و یا محدودیت رو ببینید. مثلا یه متغیر دارین به اسم x و یه محدودیت به اسم c1:
display x.m,c1.m;
که تو کد بالا m دوگان یا مارجینال مربوط به هر المنت محسوب میشه. هر جا هم eps گرفت. منظورش یه عدد خیلی کوچیک نزدیک به صفره
سلام
من ی مدل جهار هدفه دارم که به روش محدودیت اپسیلن تو گمز حلش کردم. برای هر کدوم از سه تابع هدفی که به عنوان توابع فرعی درنظر گرفته شدن پنج سطح اپسیلن بعد از حل این توابع به صورت تک هدفه با محدودیتای مدل تولید شده. می خواستم لطف کنید راهنماییم کنید که چطور میتونم جواب های پارتوی مدل رو به دست بیارم.
در حال حاضر من مدلم رو با انتخاب یک مقدار از هر بردار اپسیلن و اضافه کردن توابع فرعی به صورت محدودیت به تابع اصلی حل کردم و یک جواب گرفتم و فقط میدونم که برای تولید جواب های پارتو باید از loop استفاده کنم. اما نمیدونم جای اعداد اپسیلن تو محدودیتا چی بذارم و اینکه loop رو چطور بنویسم.
خیلی ممنون میشم راهنماییم کنید.
سلام
خب سوالتون خیلی کلیه. الان من گیج شدم چی بگم
سلام
در واقع من الان مدلی دارم که سه تا از محدودیتاش کران داره مثلا
5*(x+y)<=e1
6x=e3
به طوری که e1 و e2 و e3 هرکدوم یک بردار با پنج آرایه هستن (مثلا e1=(2,8,5,0,7))
همونطوری که مشخصه میتونیم ترکیبات مختلفی از e ها رو تو نامساوی ها بذاریم که در اون صورت به ازای هر ترکیب ی جواب میده. من میخوام جواب حاصل از همه ترکیباتو از طریق نرم افزار به دست بیارم و به من گفتن این کار با loop ممکنه ولی نوشتن loop رو نمیدونم که چطوریه و اینکه eهارو چطور تو گمز معرفی کنم با توجه به اینکه هر کدوم از eها یک پارامتر پنج مقداره هستن
ممنون از لطفتون
ببخشید یکی از معادلات پاک شده
5*(x+y)<=e1
6x=e3
که هر کدوم از eها یک بردار با پنج آرایه ن
سلام
خب برای e1 مثلا یه اندیس تعریف کنین. بگین e1(i). و تو محدودیت هم اونجوری که لازمه به کارش ببرین. لوپ هم نمیخواد اصن. مشکلی داره اینجوری؟ مقداری از زبانای برنامه نویسی دیگه بیاین بیرون. گمزی ببینین مدل رو
خیلی ممنون از راهنماییتون
باید بنویسم ران کنم و ببینم 125 جواب رو میده یا نه
این کار رو انجام دادم اما به جای اینکه بیشتر از یک جواب بده نتیجه ش این بود که مدل نشدنیه.
راهی هست که تو دستور display بگم برای هر کدوم از eها نتیجه رو نمایش بده؟
خب نمیدونم چجوری تعریف کردین شما و چی رو چجوری نشون بده. اینکه e چجوری تعریف شده و مدل چجوری داره حل میشه و e چه مقادیری میگیره یا گرفته مهمه خب
سلام
من خیلی از سایتتون استفاده می کنم واقعا ممنونم.
من یه کد گمز نوشتم وقتی که ران می کنم جوابی که بهم میده تو یکی از محدودیت ها صدق نمی کنه در حالی که در تعریف model ان محدودیت هم نوشته شده و اخرش هم همه محدودیت ها را با all فعال کردم . ممنون می شم اگه راهنمایی کنید که مشکل از کجا می تونه باشه؟
سلام
سالورتون چیه؟ مطمئنین که جواب بهینه و شدنی هست؟ تو process window اینا رو مینویسه
جوابم بهینه نیست چون محدودیت زمان گذاشتم براش اما مگه ممکنه که جواب نشدنی گمز بده؟ در process window می نویه :
Returning a primal only solution to GAMS
این جواب کافی نیست. ده خط آخر رو بذارین ببینم.
سلام
من میخوام اول با استفاده از یه معادله عملکرد تامین کننده ها را محاسبه کنم. بعدش به ترتیب امتیاز عملکردشون به اونها مقدار سفارش تخصیص بدم. مثلا تامین کننده ای که امتیاز عملکردش کمتره مقدار کمتری هم سفارش بهش تخصیص داده بشه. میشه کمک کنید که از چه دستوری باید استفاده کنم؟ با تشکر
سلام
دستور که نباید بگیم. بهتره بگیم که چه محدودیت یا عبارتی رو بذاریم.
میتونین یه محدودیت مث محدودیت زیر تعریف کنین:
value(i)< perform(i) *1/10;
دیگه بستگی به نیاز و مفروضات شما داره
آیا لازم نیست اول عملکرد تامین کننده ها مرتب بشن؟ من هرچی دنبال sorting تو گمز گشتم چیزی پیدا نکردم
بستگی داره چی بخواین از خروجی. این پیج براتون مفیده
سورت sort کردن در گمز
با سلام
خواهش مي كنم در مورد كد كردن محدوديت زير در گمز راهنمايي بفرماييد.
مجموعه اي داريم به نام N كه شامل تمامي نقاط يك شبكه است.
مثلا N={1,2,3,…,10}، حال مي خواهيم متغيري تعريف كنيم كه نشان دهنده ميزان جريان بين هر دو نقطه در اين شبكه باشد كه به شرح زير كد شده است.
متغير: X(i,j) : ميزان جريان از گره i به گره j
Sets
i nodes /1,2,3,4,5,6,7,8,9,10/
j nodes /1,2,3,4,5,6,7,8,9,10/;
variables
x(i,j) flow;
حال مي خواهيم محدوديتي بنويسيم كه تضمين كند مجموع جريان ورودي به هر گرهي مثل k از آن خارج نيز بشود:
جمع xik = جمع xkj به ازاي تمامي k هاي عضو N
ممنونم
سلام
قبل از هر چیزی توصیه میکنم که به جای اینکه هم i رو تعریف کنین و هم j رو، قط یه بار i رو تعریف کنین، بعدش j رو به i آلیاس کنین.
دستور آلیاس در گمز
برای اینکه همچین محدودیتی بنویسین، شما باید عبارت زیر رو بنویسین: (فقط یادتون نره که از آلیاس استفاده کنین حتما)
sum(i,x(i,j))-sum(i,x(j,i))=0;
با سلام
بنده توی کد گمز دچار مشکلی شدم که خیلی خیلی ممنون میشم اگه راهنماییم کنید.
متاسفانه محدودیت موجودی با فرض کمبود به صورت فروش از دست رفته دارم که هیچ گاه موجودی مقدار نمیگیره و همیشه کمبود ایجاد میشه در جواب. با اینکه هزینه کمبود را هم زیاد در نظر گرفتم.
inventory(r,j,t)=e=inventory(r-1,j,t-1)-sum((k,v),lin(r,j,k,v,t))+b1(r,j,t);
b1(r,j,t)=g=sum((k,v),lin(r,j,k,v,t))-inventory(r-1,j,t-1);
inventory(r,j,t)=g=inventory(r-1,j,t-1)-sum((k,v),lin(r,j,k,v,t));
b1 and inventory are positive variables.
با تشکر
سلام
مدلتونو برای سایت بفرستین تا مشکل رو پیدا و رفع کنیم.
gamsbook.ir@gmail.com
چشم.خیلی ممنونم
با سلام و تشکر از وقتی که صرف می کنید.یک مشکل داشتم.ممنون میشم راهنمایی کنید:
یک تابع هدف قدرمطلق دارم که برای خطی کردنش مقدار |x| در تابع هدف به صورت جمع دو متغییر مثبت (با توجه به آزاد در علامت بودن x) L1(b,k)+L2(b,k) نوشتم و در محدودیتی که x بود نیز آن را با L1(b,k)-L2(b,k) جایگزین کردم.فقط اینکه می دونیم که باید یکی از دو متغییر L1یا L2 مقدار مثبت بگیرن به عبارتی ضرب این دو متغییر باید همیشه برابر صفر باشه. من این محدودیت رو به این صورت کد کردم
cons20(b,k)..L1(b,k)=l=Mbig*U;
cons21(b,k)..L2(b,k)=l=Mbig*(1-U);
اما وقتی مدل رو ران می کنم متغییرها مقدار صفر می گیرن.فکر می کم مشکل از این دو محدودیت باشه که استفاده کردم.ممنون میشم بهم کمک کنید.
U یک متغییر باینریه.
سلام
مرسی و خواهش میکنم.
اینکه همه چی صفر بشه کلی دلیل داره. پیامی که تو process window به شما داده شده رو اینجا بذارین.
ممنون از پاسخ شما.چیزی که من متوجه شدم اینه که خود گمز فقط به یکی از مقادیر L1 و L2 که جایگزین متغییر آزاد در علامت میشن مقدار مثبت میده مثل همون چیزی که تو سیمپلکس رخ میده و نیاز به تعریف محدودیت برای اینکه فقط یکی از این دو متغییر مقدار مثبت بگیرن نیست بنابراین این محدودیت زائده.البته نمیدونم درست متوجه شدم یا نه؟
یک سوال دیگه ای که دارم اینه که تو همه سالورهای این کار انجام میشه یا فقط بعضی از سالورها برای مثال Cplex که براساس سیمپلکس کار می کنه این محدودیت بطور خودکار اعمال میشه؟
سلام
همچین چیزی اصلا وجود نداره. اگر هم تو مدل شما این پیش اومده صرفا به خاطر ساختار مدل شما هست. من این حرف رو قویا رد میکنم
با سلام
خسته نباشید. یه مشکلی در کد نویسی ام داشتم ممن.ن می شم اگه کمکم کنید:
در مسئله من بخشی از تابع هدف درجه دوم است. وقتی مسئله رو بدون این بخش حل میکنم، گمز جواب درست می ده اما به محض این که این بخش رو به تابع هدف اضافه می کنم گمز تمام متغییر ها را صفر می کنه ( در حالی که اگر همه متغییر ها صفر باشد برخی محدودیت ها نقض می شوند) . اگر ممکنه راهنماییم کنید که علنت چیه؟
این هم قسمت درجه دو تابع هدفم:
sum((product,customer), sum((batch) ,B(product,customer,batch)* *c(batch)) -sum((slot) ,q(product,customer,slot)*ft(slot)))
سلام
لطفا پیام سالور رو بدین. پیام قسمت process window
سالور من سیپلکسه و پیام سالور اینه:
Cplex error 5002:Q in s% is not posetive semi defifnite
Cplex error 1217:no solution exists
سوال من دقیقا اینه که پیش از اضافه کردن این ترم درجه دو به تابع هدف جواب درستی از مدل می گیرم اما وقتی این ترم رو اصافه می کنم این اتفاق می افتد در حالی که فضای جوابم رو تغییر نمی دم پس چرا نمی تواند جواب پیدا کنه؟
البته بعدش دوباره نوشته
restarting execution
سلام
سالور cplex برای mip طراحی شده. برای مدلهای غیر خطی مناسب نیست. یه سالور دیگه مث baron رو امتحان کنین
سسلام
من یه مدل با تابع هدف درجه دو و محدودیت های خطی دارم که متاسفانه غیر محدب هست. برای حل ان از سیپلکس استفاده کردم و برای اینکه بتونه مسئله غیر محدب من رو حل کنه optimality target را برابر 3 قرار دادم.
اما وقتی مدل رو حل می کنم جوابی که بهم می ده در یکی از محدودیت ها صدق نمی کنه در حالی که کلیه محدودیت ها با all فعال شسدند. مسئله را از طریق دیگه که حل کردم هیچ مشکلی نداره جواب شدنی داره اما نمی دونم چرا اینجور میشه؟ تا الان هم هرچی تلاش کردم نتونستم مشکلش رو حل کنم ممنون می شم کمکم کنید.
پیام های process window هم به صورت زیر هست:
flow cuts applied: 4
mixed integer rounding cuts applied: 3
root node processing (befor b&c):
real time=0.64 sec.(25.46 ticks)
sequential b&c:
real time= 9.38 sec.(8843.03 ticks)
total (root+branch&cut)=10.01 (8868.49 ticks)
MIQP status(107): time limit exceeded
Cplex Time: 10.03sec (det. 8868.49 ticks)
Returning a primal only solution to GAMS (marginals all set to NA).
Resource limit exceeded.
MIP Solution: 2228.450000 (10884 iterations, 2293 nodes)
Best possible: 180.941848
Absolute gap: 2047.508152
Relative gap: 0.918804
restarting execution
slotbatch1.gams(190) 2 Mb
reading solution for model slotbatch
***
solver did not provide marginals for model slotbatch
***
executing after solve elapsed: 0:00:12.250
slotbatch.gams(192) 3Mb
statuse: normal completion
job slotbatch.gams stop….
البته من محدودیت زمان ده ثانیه برای مدل گذاشتم
سلام
اینکه یه مدل به گپ برسه، یعنی اینکه مدل جواب شدنی پیدا کرده. مدل شما به گپ رسیده. اینکه بگین صدق نمیکنه غیر ممکنه.
مشکل من وجود ترم درجه دوم غیرمحدب در تابع هدفه. اگر اون نباشه مشکل نداره مدل درست عمل می کنه اما وقتی این ترم رو اضافه می کنم نمی دونم چرا اینجور می شه. در جوابی که می ده یکی از مغییرها رو صفر می ذاره (بقیه متغیرر ها درست محاسبه شدند) در حالی که اگر این متغییر صفر باشه در محدودیت مربوطش صدق نمی کنه (این متغییر تنها در یک دسته محدودیت ظاهر می شه)
ممنون میشم اگر چیزی به نظرتون می رسه راهنماییم کنید
پیامی که تو بخش process window داده چی هست؟
بالا گذاشتم کاملش رو براتون گذاشتم فرمودید اگه به گپ برسه یعنی جواب شدنی پیدا کرده اما اینجور نیست یه دسته از متغییرها رو صفر میده انگار که اصلا محدودیت مربوط به انها رو نخونده باشه(تنها در یک محدودیت این دسته متغییر وجود دارند)… در حالی که اون محدودیت در قسمت تعریف مدل با all فعال شده
.
.
.
البته من محدودیت زمان ده ثانیه برای مدل گذاشتم
ولقعا گیجم… نمی دونم چکار باید کرذ. الان خیلی وقته گیر این کدم… ممنون می شم اگه چیزی به ذهنتون می رسه راهنمایی بفرمایید
سلام
مدلتون رو ران کردم
همچین چیزی اصن برای من نمیاره.
میگه no solution exist نمیدونم چجوری برا شما جواب داده.
از طرفی این target رو نمیخونه. دقیقا نمیدونم چرا.
معرفی opt رو یه جور دیگه هم براتون نوشتم که اسونتر تغییر بدین.
مدل رو هم با minlp با سالورهایی مث baron حل کنین. مدل در کل نشدنیه. باید بررسی کنین
سلام.
من ی مدل دارم که غیرخطیه و تو گمز نوشتمش. الان میخوام خطیش کنم. میشه راهنماییم کنید از چه روشی میتونم مدل غیرخطی رو به خطی تبدیل کنم؟
ممنون.
سلام
بستگی داره به اینکه ساختار مدل و متغیرهاتون چجوریه و اینکه چی باعث شده که غیر خطی بشه
تو چندتا از محدودیت هام ، چند تا از پارامترها در هم ضرب میشن. برای همین غیرخطیه
خوب با روش های خطی کردن خطی شون کنین. این دیگه برمیگرده به مدلسازیتون. سرچ بزنین خطی سازی ضرب دو متغیر (البته انگلیسی). کلی صفحه براتون پیشنهاد میشه
خیلی ممنونم از راهنماییتون فقط میبخشین واسه دستور ifthen مگه نباید expressioniffalse وجود داشته باشه؟برنامه من این رو نداره… یکیش Tst+dt هست واون یکی Tst-dt یعنی حالت درستش باید بزرگتر از شرط اول و حالت غلطش کوچکتر از شرط دومه ..یعنی دو تا condition دارم….منظورم اینکه من نمیتونم بنویسم
eq21(t) .. S(t)=e=ifthen(Tln(t)>Tst+dt,1,0);
eq22(t) .. S(t)=e=ifthen(Tln(t)<Tst-dt,0,1);
ارور میده چون نقض همدیگن….
شرمنده من دقت نکردم dt+ اینا رو ندیدم. مدلتونو برام بفرستین تا مشکل رو برطرف کنم.
خیلی خیلی لطف میکنین…ببینین Tln دمای داخله خانه هست که میخوام بین رنج 20 تا 24 نگهش دارم…برای این کار از یه تهویه کننده ی هوا باترموستات استفاده میکنم…که ترموستات خودش متغیر با قیمت برقه….میخوام بگم که اگه دمای داخل خونه بیشتر از Tst+2 بشه ترموستات حالت on بگیره و اگه کمتر از Tst-2 بشه ترموستات خاموش بشه….
dt همون 2 درجه هست….،،Tln جز متغیرهاست و Tst(t)=.89*X(t)+20 خودش یه پارامتره که وابسته به یه پارامتر دیگه هست(X قیمت برق)…. الان منظورت از اینکه مدل بگم همیناست؟در ضمن تابع هدفم min کردن C=e=sum(t,X(t)*Prated*S(t)) هست که بازم p جز پارامترهاست…واقعا ممنونم که وقت میزارین
set
t time slot /1*24/
;
parameters
qq cooling effect of on AC state/2.64/
wf warming effect of tem difference/.0408/
D time interval duration/.25/
dt limit duration/2/
Prated rating of air conditioner/11.5/
N total no of time slots/96/
Tmin minimum temp of house/20/;
parameter X(t);
$call gdxxrw RTP.xlsx par=X rng=sheet1!a2 rdim=1 cdim=0
$gdxin RTP.gdx
$load X
$gdxin
parameter Tout(t);
$call gdxxrw Tambient.xlsx par=Tout rng=sheet1!a2 rdim=1 cdim=0
$gdxin Tambient.gdx
$load Tout
$gdxin
parameter Tst(t);
Tst(t)=.89*X(t)+20;
*execute_unload’Tst(t).gdx’;
parameter Tmax(t);
Tmax(t)=Tst(t)+dt;
*execute_unload’Tmax(t).gdx’;
variables
Tln(t) inside temperature of house
*execute_unload’Tinside.gdx’;
C cost
S(t) status of AC thermostat
*execute_unload’S(t).gdx’;
*Tln.fx(‘0’)=21.5
binary variable S(t)
free variable C;
equations
constraint1(t) air conditioner
constraint2(t) starting temp
eq1(t) on state of thermostat
eq2(t) off state of thermostat
eq3(t) minimum temperature constraint
eq4(t) maximum temperature constraint
eq5 objective;
constraint1(t)$(ord(t) ge 2) .. Tln(t)=e=Tln(t-1)+D*(wf*(Tout(t)-Tln(t))-qq*S(t));
constraint2(t)$(ord(t) eq 1) .. Tln(t)=e=21.5 +D*(wf*(Tout(t)-Tln(t))-qq*S(t));
eq1(t)$(Tln(t)=g=Tst+dt) .. S(t)=e=1;
eq2(t)$(Tln(t)=l=20) .. S(t)=e=0;
eq3(t) .. Tln(t)=g=Tmin ;
eq4(t) .. Tln(t)=l=Tmax(t);
eq5 .. C=e=sum(t,X(t)*Prated*S(t)) ;
model reschedual/all/;
solve reschedual using lP minimizng C;
display C.l,Tln.l,S.l;
مدلم هنوز کامل نشده ولی ارور اصلی سر معادلات 2 و 1 هست…. و اینکه میتونم به جای حد پایین عدد 20 رو بزارم ولی حد بالا حتما باید Tst+dt باشه…بازم ممنونم
سلام
eq1(t)$(Tln(t)>Tst(t)+dt) .. S(t)=e=1;
eq2(t)$(Tln(t)<20) .. S(t)=e=0;
این طوری این دو خط ارور ندارن. فایل اکسل نداشتم ران بگیرم . بررسی کنین
سلام… واقعا ممنونم…خطا برطرف شد….با سپاس فراوان
خواهش می کنم
سلام و وقتتون بخیر…
من در ران کردن برنامه زیر به مشکل برخوردم…ارور 57 (واسه معادلات 2و 3)میاد میگه نباید از $ در MIP استفاده کنم باید با dnlp ران بشه …اون میزنم بازم یه ارور دیگه میاد65 و 52 که اصلا این متغرها فقط باید تو MIP ,MINLP… تعریف بشن…نمیدونم چیکار کنم …هرچه قدرم سعی میکنم این 2 معادله اصلاح کنم نمیتونم…خیلی خیلی ممنون میشم اگه کمکم کنین…
variables
Tln(t) inside temperature of house
.
.
;
eq2(t)$(Tln(t)>24) .. S(t)=e=1;
سلام
گمز اجازه استفاده از متغیرها رو تو دستورات شرطی دلار نمیده. مگه اینکه از ifthen استفاده کنین یا ساختار رو عوض کنین
مرسی…ممنون از راهنماییتون
سلام و وقت بخیر
من میخوام یک معادله 2 شرطی بنویسم که شرط روی متغیر اعمال میشه :اگه Tln بزرگتر از Tst+dt باشه S برابر یک و اگه کوچکتر ازTst-dt باشه s برابر 0 بشه
eq2(t)$(ord(Tln(t)) le Tst-dt) .. S(t)=e=0
eq1(t)$(ord(Tln(t)) ge Tst+dt) .. S(t)=e=1…………..
S , Tln متغیرند .Tst , dt پارامترند این دستور میزنم خطا میده…..ممنون میشم کمکم کنین
با دستور ifthen این کارو انجام بدین. قبلش هم S باینری تعریف کنین.
سلام
از دستور ifthen استفاده کنین. تو کامنتای همین تاپیک به وفور دیده میشه.
خواهش میکنم
سلام
برای محدودیت زیر نرم افزار ارور 148 رو میده. مشکل کجاست؟
st2(k,t)..sum((i,p)$(ord(p)<=ord(t)),d(i,p)*x(i,k))=l=t*Q
pعضو مجموعه {t,…,1} هست و Q هم پارامتر هست.
سلام
در مدل مساله من t اندیس زمان هست. در یکی از محدودیت های مساله سامیشن روی p که pعضو مجموعه {t,…,1} هست، این به چه صورتی در مدل نوشته می شود و آیا اینکه در set چگونه p را معرفی کنم ؟
سلام
نه کافیه که شما t رو به عنوان مجموعه تعریف کنین، بعدش p رو بهش alias کنین.
اینجا رو هم ببینید.
ممنون
خودم هم p رو alias کرده بودم، ولی تو محدودیت زیر ارور 148 رو میده .مشکلش کجاست
st2(k,t)..sum((i,p)$(ord(p)<=ord(t)),d(i,p)*x(i,k))=l=t*Q
pعضو مجموعه {t,…,۱} هست و Q هم پارامتر هست.
سلام
اندیس t نمی تونه توی پارامتر Q ضرب بشه.
واقعا ممنونم که وقتتون میذارین
یعنی ضرب اندیس در اسکالر در گمز نداریم؟
اگه داریم چطور باید بنویسم ؟
سلام
بله نمیتونه ضرب بشه. تو این محدودیت شما به جای t باید از t.uel یا ord(t) باید استفاده کنین. احتمالا اولی براتون مناسبتر باشه
بسیار ممنونم
جناب محمودی عزیز بسیار متشکرم هم از راهنمایی هاتون و هم از سایت بسیار پر محتواتون که یک کاربر مبتی رو به یک کاربر حرفه ای تبدیل میکنه!
من مدلم رو ران کردم جواب میده اما توی نتایج یک ارور لایسنس هم میده، شما یه لایسنس خوب سراغ دارید که اروره من از بین بره؟
(من از لایسنس توی سایتتون استفاده کردم)
سلام
خواهش میکنم.
سوالای شما رو خانم رمضانی جواب دادن.
تاریخ لپتاپ رو ببرین رو 2004 و مجددا ران کنین. مشکل رفع میشه احتمالا
سلام. دستور لاپلاس در نرم افزار Gams چی هست؟آیا میشه در این نرم افزار لاپلاس گرفت؟
سلام
Laplace(MU,BETA)
که mu , beta پارامتر هاشن
ممنون که جواب دادید. این دستور برای توزیع لاپلاس نیست مگه؟ من به عنوان مثال می خوام از t^2 لاپلاس بگیرم، در این صورت دستورش چی هست؟آیا از این دستور شما باید استفاده کنم؟
سلام
دستوره مال توزیع لاپلاس بود . شما کارتون تبدیل لاپلاسه . من تاحالا ندیم مستقیما دستوری برای تبدیل لاپلاس باشه. توی متلب این امکان وجود داره می خواین این قسمت از کد توی متلب انجام بدین جوابشو توی گمز بیارین . یا اینکه فرمول لاپلاسو کد کنین .
ممنون از اینکه جواب دادید.
شما در جواب سوال من فرمودید که فرمول لاپلاس کد کنم. منظور شما از کد کردن فرمول لاپلاس چیه؟میتونید واضح تر بگید؟
سلام
شما لاپلاس T^n می خواستین توی ریاضی مهندسی لاپلاسش میشه
n!/s^n+1
اینو باید کد کنین .
سلام و عرض ادب
ببخشید من تو یه جای مدل موندم که چجوری میشه کد کرد و اونم اینه که توی یه محدودیتی زیگما محدوده i عضو p رو میگیره که p اجتماع i و j هستش و در جای دیگه i عضو I میشه که I بزرگ همون i هستش که تعداد مشتریهامون هست، حالا من چجوری میتون اینو برا گمز توضیح
سلام یک راهش اینه i و j زیر مجموعه p تعریف کنین.
p/1*5/
i(p)/1,4/
j(p)/3/2/5/
;
برای I بزرگتر از i هم از alias استفاده کنین.
بسیار بسیار ممنونم از راهنماییتون، واقعا لطف کردین
بسیار عذر می خوام، الان تو این کد
e5(i,k).. sum(j,z(i,j,k))-sum(j,z(j,i,k))=e=0;
j وi عضو p هستن و مجموعه p هم به شکل بالا تعریف شده حالا من اینجا چطوری p رو بنویسم؟ من فکر می کنم اشتباه کدش کردم چون error میده!
لزومی نداره شما از P صحبت کنین تو این محدودیت. I و J کافی هستن
با سلام
قبل از اینکه سوالمو بپرسم از راه اندازی این سایت مفید ازتون تشکر میکنم، واقعا عالی و کاربردی هست.
سوالم اینه که اگه اندیسی داشته باشیم که متعلق به اجتماع دو مجموعه باشه چطور باید این رو در محدودیت کدنویسی کرد؟
یعنی اجتماع دو مجموعه رو چطور باید کد کرد؟
یا وقتی اندیسی اجتماع یک مجموعه و یک عضو از مجموعه دیگه رو شامل میشه.
سلام
خواهش میکنم و ممنونم از شما.
اینجا توضیح دادیم.
سلام
نوشتن دوتا سیگما (sum) کنار هم به چه صورتی هست؟ ∑∑
ممنون
سلام
مثالاش تو کامنتای بالا هست.
sum((i,j),x(i,j))
سلام وقت بخیر. اگر متغیر x مقدار بزرگتر از 0 گرفت ، متغیر y ، مقدار 1 بگیرد، و اگر متغیر x مقدار 0 گرفت متغیر y هم صفر بگیرد. به چه صورت باید اعمال شود. سپاس
سلام
این میتونه مفید باشه براتون.
x
با سلام. من یک تابع دو ضابطه ای دارم چه طور باید کدش کنم.
می خوام بگم w=0 است اگر L بزرگتر مساوی صفر باشه و در غیر این صورت W=1. در ضمن L متغییر است. ممنون میشم جواب بدید.
سلام
اگر l,w متغیر هستن که از دستور ifthen استفاده کنین. مثالاش تو کامنتای بالا هست.
اگه پارامترن که خیلی ساده از دستور if استفاده کنین.
با سلام
سوالی در خصوص تعریف محدودیتی به فرم زیر داشتم :
(S(I,t-1) + x(I,t) = d(I,t) + s(I,t
در این محدودیت منظور از S مقدار موجودی است و X مقدار تولید و d میزان تقاضا و اندیس i مربوط به قطعه و t مربوط به زمان هست.من set مربوط به زمان را نمیخوام به فرم /0*t/ تعریف کنم و بایستی از 1 تا t شروع بشه (البته t یک عدد هست).
ولی با هر روشی که میخوام انجام بشه این محدودیت مربوط به موجودی را حل نمیکنه.
همینطور من شرطی در محدودیت به فرم
(s(i,t)$(s(i,”0″)=S0(i
که بیانگر برابر موجودی در دوره 0 با میزان موجودی اولیه است هم در محدودیت قرار میدم خطای Endogenous relational operations require model type “dnlp”
را میده.
اصلا راهی هست که بشه مسایل کنترل موجودی را درست برای gams تعریف کرد؟
سلام
یه t1 تعریف کنین. که شامل همه t ها بشه به اضافه صفر. بعد t رو به عنوان زیر مجموعه ش بکار ببرین.
set
t1/0,1*10/
t(t1)/1*10/
همه جا از t استفاده کنین بجز اونجاهایی که صفر هم شامل میشه. اونجا دیگه t1 رو استفاده کنین.
ممنون از محبت شما
در خصوص شرطي كه نوشته شده(s(i,t)$(s(i,”0″) = S0(i از نظر نوشتاري و ساختاري درست هست يا بايستي به نحو ديگه اي تعريف بشه؟
ممنون
خواهش میکنم
خب بستگی به این داره که s رو چجوری تعریف کردین. باید s رو به صورت s(i,t1) تعریف کرده باشین. s0 هم دیگه باید دقت کنین. در ضمن اون شرط رو نمیخواد. فقط بزنین s(i,”0″)
سلام ببخشید خطی سازی یک متغییر اینتجر تقسیم بر متغییر پیوسته چه طوری انجام میشه؟قبلا یک فایل خطی سازی برام ارسال کرده بودید ولی این فایل متغییر باینری رو گفته بود.ممنون میشم جواب بدی.
با سلام
Cik^t ( تی اندیس بالای پارامتر هست ) پارامترم اینه که میخوام جدول هزینه بین k و i رو بنویسم وقتی که t=1 یعنی هزینه حمل و نقل از نوع زمینی(اتوبوس)
و همچنین برای t=2 یعنی هزینه حمل و نقل از نوع دیگر مثلا هوایی
T حالت ها یا روش های مختلف حمل و نقل هستند
i=5 k=5 وقتی که از دو نوع روش حمل و نقل استفاده می شود که برای هر t یک جدول داریم
امیدوارم که منظورمو رسونده باشم با تشکر
5 4 3 2 1
1
2
3
4
5
من منظورتونو متوجه شدم و باز همون جواب بهتون میدم. می خواین مدلتونو برامون ارسال کنید تا براتون انجام بدیم.
با سلام
table c(i,k,t) ‘the cost between node i and k , if t=e=1’
میخوام بصورت کد در گمز بنویسم ولی ارور 222 میده هزینه بین i و k به شرطی که t=1
میخوام جدول i و k رو بنویسم خطای دیمانسیون ردیف با دیمانسیون ستون رو میده و میگه ناسازگار هستند به احتمال زیاد t رو هم به عنوان یه بعد(دیمانسیون) در نظر گرفته
سلام فقط سطری که t یک هست را مقدار بدین . پیش فرض برای بقیه t ها را گمز هزینه صفر در نظر می گیره.
با سلام
من در کدی که نوشتم محدودیت هایی دارم که یکی از شرط های برقراری آنها که باید وارد کنم این است که ‘i<i یعنی اگر بچ تولید i قبل از 'i بود، آن شرط برقرار شود. منتها مسئله مهمی که وجود دارد این است که ترتیب ساخت بچ ها را خود مدل بایستی مشخص کند و برای ما از ابتدا مشخص نیست تا مثلا بتوانیم با تابع ord این شرط را وارد محدودیت کنم. می خواستم بدونم چطور باید این کاررو انجام بدم؟
سلام
خب بچ ها رو مدل چجوری تشخیص میده؟ یا چجوری تعریفش کردین شما؟
سلام به همگی. ببخشید میخاستم داده هام را وارد گمز کنم، به مشکل بر خوردم. مثلا هزینه فروش اگر c(i,t) باشد و i=10 و t=12تعریف شده باشد چگونه داده ها را وارد نمایم.
12 11 10 9 8 7 6 5 4 3 2 1
1 1
1 2
1 3
و…
است .لطفا کمک کنید.اگر شبیه به اون را داریذ میشه واسم کپی کنید بگذارید تا متوجه بشم چطوری. حالا اگر ابعاد مثال شما کمتر است نیز مشکلی نیست فقط میخام طرز نوشتنشا یاد بگیرم.
خیلی ممنون میشم کمکم کنید.
با تشکر
سلام
دستور table رو مطالعه بفرمایین.
با عرض سلام و خسته نباشید.
من ی مدل دارم که تعداد اندیس های آن بیشتر از 10 تاست. 12 تا اندیس داره. میخواستم بدونم میشه این مدل رو توی گمز نوشت ؟؟ یا فقط مدل های تا 10 اندیس رو میشه توی گمز نوشت. مرسی.
سلام
محدودیتی نداره.
سلام وقت بخیر . اگر داشته باشیم e به نمای یه عبارتی ، تو گمز چطوری توشته میشه ؟. مرسی
سلام
با دستور power میتونین توان رو مشخص کنین (یا از علامت ** به منظور توان استفاده کنین). و برای e یه مقدار اولیه هم در نظر بگیرین. اگرم تابع نمایی میخواین، از exp استفاده کنین.
پرنشاط باشین
سلام و خسته نباشید
بنده یکی از پارامترهای مدلم دارای توزیع تصادفی نرمال هست.ولی به ازای هر بار ران کردن مدل این پارامترها با اینکه نرمال و تصادفی هستند ولی تغییر نمیکنن و جواب مدل مانند قبل می شود.آیا راه حلی هست که به ازای هر بار اجرای مدل تصادفی بودن تغییر کنه و جواب مدل تغییر کنه؟
سلام
بله این مشکلی هست که خیلی از دوستان باهاش مواجه میشن. وحتی شاید خیلیها از این مشکل خبر هم نداشته باشن.
برای تولید عدد تصادفی تو گمز، در واقع یک موتور تعریف شده که هر بار اعداد مشخصی رو تولید کنه که در واقع تصادفی نیستند.
شما برای اینکه موتور رو دوباره راه بندازید و عدد تصادفی جدیدی تولید کنید، باید از دستور execseed استفاده کنید. تو کدی که در زیر نوشتم دقت کنین که عدد بیست هزار میتونه هر عددی بین 0 تا 10 به توان 9 باشه. فقط بدونین که با افزایش این عدد، حساسیت اعداد تصادفی شما هم بیشتر میشه.
set i /1*5/;
parameter x(i);
execseed = 20000*(frac(jnow));
x(i) = uniform(0,1);
display x;
خطی که بولد کردم رو بذارین قبل از داده هایی که قراره به صورت رندم تولید بشن و حالشو ببرین.
ممنون از سایتتون خیلی مفیده
میخواستم در تابع هدف یک اندیس ضرب بشه نمیدونم چکار کنم
((obj21.. Zp1=e=sum((i,j,k,t),k*C(i,j)*x(i,j,k,t
خطا 148 میده!!
سلام
به جای k بذارین k.uel
فقط دقت کنین که این چه مقداری رو بر میگردونه. باید قبل اینکه استفاده کنین مقداری این k.uel رو سر به سرش بذارین
سلام
ظاهرا کلا مشکل خواصی نداره. فقط دستور sum:
obj3.. z3=e=sum((i,j,t,r),A(i,j,t,r)*cv*A(r,t))+sum((r,t),CF*A(r,t)*ZA(r,t));
ببخشید چون فایل را کپی کردم و اینجا گذاشتم یکم بهم ریخته.علامت های(;)در گمز در اخر قرار گرفتع که اینجا اشتباه کپی میشه
Z 13 = ∑ ∑∑∑ A i,j,t,r * CVAr + ∑ ∑CFAr,t * ZAr,t
I i,j,t = I i,j,t-1 + xi,j-1,t – xi,j,t ∀i,j,t
xi,j,t * r ij ≤ capj,t ∀i,j∑
A i,j,t,r ≤ Ar,t * ZAr,t ∀r,t∑∑
A i,j,t,r = xi,j,t,r * Rate A i,j ∀i,j,t∑
ZA=0
ZA=1
ZAمتغیر باینری است،یا صفر است یا یک.وxوIوA متغیر تصمیم است
obj3.. z3=e=sum(i,j,t,r,A(i,j,t,r)*cv*A(r,t)+sum((r,t),CF*A(r,t))*ZA(r,t)
cont6(i,j,t).. I(i,j,t)=e=I(i,j,t-1)+ x(i,j-1,t)- x(i,j,t);
cont7(j,t).. sum(i,x(i,j,t)*r(i,j)=l=cap (j,t);
cont8(r,t).. sum((i,j),A(i,j,t,r))=l=A (r,t) * ZA(r,t);
cont9(i,j,t).. sum(r,A(i,j,t,r)=e=x(i,j,t) * rateA(i,j);
cont10 ZA(r,t)=e=0;
cont6 ZA(r,t)=e=1;
کدی گمزی که نوشتین به نظر می یاد درست باشه ! اما محدودیت 10 و 6 بنظرم بد نوشته شده چون توضیحی در مورد مدل ندارم نظر قطعی نمیدم اگه به مشکل برخورد کردین ، توضیحات مدل را هم بنوسین تا کمکتون کنم.
سلام ممنون از راهنماییتون، محدودیت 6 و 10 مربوط به یک متغیر باینری بوده است که یا می توانسته صفر یا یک باشد.
سلام ، خودتون می گید یا ، چرا توی binary variable تعریف نمی کنید ؟؟ مساوی که گذاشتین یعنی حتما صفر شه و هم حتما یک شه!!
ببخشید چون فایل را کپی کردم و اینجا گذاشتم یکم بهم ریخته.علامت های(;)در گمز در اخر قرار گرفتع که اینجا اشتباه کپی میشه
Z 13 = ∑ ∑∑∑ A i,j,t,r * CVAr + ∑ ∑CFAr,t * ZAr,t
I i,j,t = I i,j,t-1 + xi,j-1,t - xi,j,t ∀i,j,t
xi,j,t * r ij ≤ capj,t ∀i,j∑
A i,j,t,r ≤ Ar,t * ZAr,t ∀r,t∑∑
A i,j,t,r = xi,j,t,r * Rate A i,j ∀i,j,t∑
ZA=0
ZA=1
ZAمتغیر باینری است،یا صفر است یا یک.وxوIوA متغیر تصمیم است
obj3.. z3=e=sum(i,j,t,r,A(i,j,t,r)*cv*A(r,t)+sum((r,t),CF*A(r,t))*ZA(r,t)
cont6(i,j,t).. I(i,j,t)=e=I(i,j,t-1)+ x(i,j-1,t)- x(i,j,t);
cont7(j,t).. sum(i,x(i,j,t)*r(i,j)=l=cap (j,t);
cont8(r,t).. sum((i,j),A(i,j,t,r))=l=A (r,t) * ZA(r,t);
cont9(i,j,t).. sum(r,A(i,j,t,r)=e=x(i,j,t) * rateA(i,j);
cont10 ZA(r,t)=e=0;
cont6 ZA(r,t)=e=1;
با سلام مجدد.یک سوال داشتم.من مدلم که حل می کنم به جواب میرسه ولی به دلیل محدودیت زمان اجرا متوقف میشه.البته من زمان اجرا را به 1000 و 10000 هم تغییر دادم ولی هر بار به دلیل محدودیت زمان اجرا متوقف شده و به جواب رسیده و وضعیت مدل به صورت زیر بیان میشه.
MIP status(107): time limit exceeded
Cplex Time: 10902.03sec (det. 100670.45 ticks)
Fixing integer variables, and solving final LP…
Fixed MIP status(1): optimal
Cplex Time: 0.01sec (det. 5.37 ticks)
Resource limit exceeded.
می خوام بدون اینکه به دلیل محدودیت زمان متوقف شده با اینکه وضعیت نرمال هست مشکلی ایجاد نمی کنه؟آیا مدل درست اجرا شده یا بایستی تغییراتی روشاعمال کنم؟
سلام
ممکنه درست حل شده باشه. بستگی به gapی داره که اعلام کرده. ولی این محدودیت زمانی نشون میده که مدل احتمالا بهینه نیست، هرچند شدنی هست جوابش.
برای افزایش سرعت میتونین مدل رو خطی کنین، میتونین جواب اولیه به گمز بدین، سایز رو کوچیک کنین و یه سری کار دیگه. ولی مطمئن نباید باشین که الان جواب بهینه رو دارین
سلام.ممنون از پاسخ شما.
مقدار گپ اینقدر گزارش شده
Absolute gap: 70.670782
Relative gap: 0.088449
زیاده؟؟؟
مدل من خطیه. باید چه کار کنم؟
یک سوا دیگه داشتم
option optcr=0;
2 option optca=0;
چه کار می کنه؟
هر چقدر به صفر نزدیک تر باشه بهتره!!
مرسوم هست که optcr را 0.05 بگیرین و optca را 0 بگیرین .
Absolute gap : بهنرین برتخمینی که مدل میزنه منهای بهترین عدد صحیح می کنه. مثلا بهترین حد بالا برای جواب بهترین عدد صحیح (بهترین تخمین ) 15 باشه و بهترین عدد انتجر 10 باشه ! Absolute gap برابر میشه با 5 و Relative gap درصد این گپ را حساب می کنه که از فرمول دیگه ای استفاده می کنه که مهم نیست فقط مهم اینه درصدی گپ را می ده ! اگر خواستی فرمولشو بهت می گم!!
با سلام. قبلا از شما پرسیده بودم که مدلم با شرایط بالا که گفتم حل شده می خوام بدونم درسته یا نه.شما فرمودید که بستگی به مقدار گپ داره حالا با توجه به این مقدار گپ که گفتم آیا مدلم درست اجرا شده یا مشکل داره.ممنون میشم راهنمایی کنید.
مقدار گپ هاتون خوبه ولی بهتره هر دو optcr و optca را ۰ بگیرین .
با عرض سلام و خسته نباشید.یک سوال داشتم از خدمتتون.من یک لوپ تو مدل به این شکل نوشتم
scalar
iter ;
parameter
e2;
/1*5/ ;set tt
parameter sol(q1,tt);
iter=0;
repeat
e2=pay('1','2')-((pay('1','2')-pay('2','2'))/gr2)*iter;
solve DVRP_epsilon use MIP minimizing Obj;
sol('1',tt) $(ord(tt)=iter)=Obj1.l;
sol('2',tt) $(ord(tt)=iter)=Obj2.l;
iter=iter+1;
until iter > gr2;
display sol;
وقتی این ران می کنم 5 جواب یکسان میده.در واقع همون جواب اول تکرار میشه انگار که لوپ یکبار اجرا میشه.به نظرم لوپ رو درست نوشتم ولی نمیدونم چرا جواب نمیده.خیلی کلافم کرده.میشه کمکم کنید ایراد کارمو پیدا کنم.متشکرم
سلام شما جواب آخر را برمی گردونین و display قبل از until بنویسین ! مشکلی بود باز بپرسین!
ممنون از پاسخ گویی شما.این کار رو انجام دادم ولی تغییری نکرد.همون جواب رو تکرار می کنه
من sol رو display میکنم که یک برداره با دو سط و 5 ستون.پیشنهاد دیگه ای برای حل مشل دارید؟
سلام
دستور loop رو امتحان کنین، و دستور solve رو بذارین توش، ران کنین. میتونین یه پارامتر هم تعریف کنین که هر بار که ران میشه جواب رو ذخیره کنه. شما ظاهرا با این لوپی که دارین شرایط مدلتون عوض نمیشه پس جوابش هم همون میمونه. برای iter و بقیه هم display بزنین. ظاهرا تغییری نمیکنن
سلام.من دستور loop رو به این شکل نوشتم.
scalar
gr2 ‘number of grid point of 2th objective function’ /5/;
parameter
e2 ‘epsilon caonstraint methid RHS’;
set iter ‘solution counter’ /0*5/ ;
parameter sol(q1,iter) ‘pareto solutions’;
loop(iter,
e2=pay(‘1′,’2’)-((pay(‘1′,’2’)-pay(‘2′,’2’))/gr2)*iter;
solve DVRP_epsilon use MIP minimizing Obj;
sol(‘1’,iter)=Obj1.l;
sol(‘2’,iter)=Obj2.l;
display sol;
);
اما تو خطی که مقدار e2 محاسبه میشه این خطا رو میگیره
Dimension different – The symbol is referenced with more/less
indices as declared
مشکل از چیه؟
با تشکر از شما
سلام.میشه لطفا جواب منو بدید.مشکل این لوپ چیه.ممنون
مشکلش ممکنه این باشه که شما pay را با سه اندیس تعریف کردین ! اما توی حلقه pay با دو اندیس نوشته شده
سلام.ممنون از شما.ولی مشکل این نیست چون pay در همه جا دو سطر و دو ستون داره و اندیس هاش در همه جا یکی تعریف شده
کدتونو بفرستین به ایمیلی که در سایت ذکر شده تا بررسی شود.
با سلام و تشکر.گفته بودید کدتون به ایمیل بفرستید تا بررسی بشه من الان دو روز فرستادم ولی جوابی دریافت نکردم.ممنون میشم جواب منو بدید.
سلام
مطمئن بشید که e2 رو تابع هدفتون تاثیر میذاره. بررسیش کنین. نمیخواد شما هر بار که مدل رو ران میکنین منتظر بشین تا کامل حل بشه، بعد دوباره دستکاری کنین، وقتی وسط یک لوپ interrupt بزنین یه جواب شدنی بهتون میده و میره لوپ بعدی (باید به گپ زیر صد رسیده باشه).
با مقادیر بالاتر iter هم امتحان کنین.
سلام
سوالی داشتم اینکه مدلم خطی است ولی زمانی که قدر مطلق برای یک جزء از تابع هدفم قرار میدهم ارور میزنه میگه مسئله با روش خطی حل نمیشه.قدرمطلق مدل را غیر خطی میکنه؟
سلام
بله
بازهم سلام.
جز صحیح هم مدل رو غیرخطی میکنه؟ هیچ راهی وجود نداره که مدلی رو که جز صحیح داره، خطی کنیم؟؟؟
ممنون
سلام
غیر خطی میشه بله.
نمیدونم والا اطلاعی ندارم. باید مطالعه کنین در موردش. تو منابع انگلیسی قطعا هست.
سلام من چندتا سوال دارم کوتاه کوتاه:)))
1- در محدودیت های زیر y متغیر باینری هست و c ها پارامتر هستند حالا من اگر y رو ببرم سمت دیگه تساوی جواب نشدنی میشه اخه چرا؟میگه یکی از متغیر های باینری میشه 5
co7(p,c).. y(p)*ce(p,c)=l= cdup(p,c);
co8(p,c).. y(p)* cin(p,c)=l= cup(p,c);
2- من همین کد رو در حالتی که ce متغیر بود نوشتم(چون یه اروری میداد که نمیتونستم رفع کنم) و مسئله غیر خطی میشد حالا که ارور خطیه رو رفع کردم و هر دو ران میگیرم تایع هدف تو مدل خطی 3000 تا بیشتر از غیر خطی میشه و جواب غیر خطی درسته با اینکه اعداد هر دو یکسانه کاملا و هر دو مدل متغیر باینری دوم رو 1 کردن…میشه بگید چه باید بکنم….من چک کردم مدل رو کاملا
سلام
هستم خدمتتون.
این که ارور میده وقتی سمت راست می برینش، به خاطر رفتن تو مخرجه احتمالا، شما یه عدد خیلی کوچیک به مخرج اضافه کنین و بازم امتحان کنین.
برای اینکه جواب جفتشون یکی بشه، احتمالا optcr رو صفر بذارین و ران کنین یه جواب بدست بیاد.
سلام،خیلی ممنون که به سوال قبلیم پاسخ دادید،انشاالله خدا خیرتون بده چون واقعا به کمکتان نیاز داشتم،و هرچی توی گمز میزنم همه اش errorمیده.اگر میشه لطفا کمکم کنید در مورد خطی کردن تابع زیر،البته بنظر خطی است آیا شما هم تاییدش می کنید؟
Z 13 = ∑ ∑∑∑ E i,j,t,r * CVEr + ∑ ∑CFEr,t * ZEr,t
E وZEمتغیرند و CVو CFپارامترند که اندیس گرفته اند.و اندیس ها به صورت مجموعه قبلا تعریف گشته.پارامترها نیز تعریف گشته اند.
اگر محدودیت ها به صورت زیر باشند:
∑ E i,j,t,r = xi,j,t,r * Rate E i,j
∑ ∑∑∑ E i,j,t,r ≤ Avail Er * ZEr
میشه لطف کنید کدهای چنین تابع هدف با محدودیت هایش را بهم بگویید.
البته خودم نوشته ام ولی بازم errorداد.نمیدونم باید بعد از خطی شدن تابع هدف محدودیت های جدید و تابع هدف جدید را وارد نمود؟ممنون از زحماتتان.خیلی ممنون میشم که کمکم نمایید.
سلام
خواهش میکنم. نظر لطفتونه
مدلتون خطیه. لطفا ارورهایی که میده رو تو بخش خطاهای گمز سوال بفرمایید. هستیم خدمتتون
سلام،خیلی ممنون که به سوال قبلیم پاسخ دادید،انشاالله خدا خیرتون بده چون واقعا به کمکتان نیاز داشتم،و هرچی توی گمز میزنم همه اش errorمیده.اگر میشه لطفا کمکم کنید در مورد خطی کردن تابع زیر،البته بنظر خطی است آیا شما هم تاییدش می کنید؟
Z 13 = ∑ ∑∑∑ E i,j,t,r * CVEr + ∑ ∑CFEr,t * ZEr,t
E وZEمتغیرند و CVو CFپارامترند که اندیس گرفته اند.و اندیس ها به صورت مجموعه قبلا تعریف گشته.پارامترها نیز تعریف گشته اند.
اگر محدودیت ها به صورت زیر باشند:
∑ E i,j,t,r = xi,j,t,r * Rate E i,j
∑ ∑∑∑ E i,j,t,r ≤ Avail Er * ZEr
میشه لطف کنید کدهای چنین تابع هدف با محدودیت هایش را بهم بگویید.
البته خودم نوشته ام ولی بازم errorداد.نمیدونم باید بعد از خطی شدن تابع هدف محدودیت های جدید و تابع هدف جدید را وارد نمایم؟قبلا گفتم چون رشته تحصیلیم صنایع نبوده خیلی به مشکل بر می خورم.ممنون از زحماتتان.خیلی ممنون میشم که کمکم نمایید.
سلام
عدد تصادفی با میانگین 1 را چه طوری در گمز میشه نوشت؟
سلام
با چه توزیعی
نرمال و یکنواخت
سلام
توزیع یکنواخت در gams رو به شکل زیر تعریف میکنن:
x=uniform(a,b)
توزیع نرمال در gams هم به شکل زیر تعریف میشه:
x=normal(m,n)
m میانگین و n انجراف معیار توزیع نرمال و a و b هم بازه ی یکنواخت هستن
میخواستم بدونم چرا این مدل ارور میزنه؟
sets
/j/1,2,3
;/t/1,2,3
;(variable y(j,t
equation
;(eq1(t
;(eq1(t) $ (ord(t) = 2 and ord(t) = 3) .. y(j,t-1) =l= y(j,t
مشکل حل شد
سلام
and که زدین یعنی چی؟ یعنی t هم برابر با 2 باشه و هم برابر با 3؟ میشه به نظرتون؟ or بذارین
سلام
می خواستم بگم این کد برای t خطا می دهد و میگه setایی که انجام شده تحت کنترل نیست.
راه حل چیست؟
ممنون
سلام
مثلا بنویسین
Con(t)…
با سلام خدمت شما و با تشکر از سایت خوبتان.ببخشید من رشته تحصیلی ام مهندسی صنایع نبوده ولی پایان نامه ام مدلسازی و حل آن با گمز است، مدل را نوشته ام اما نمیدانم چگونه می شود تابع هدف را خطی نمود!!!میشه لطفا کمکم کنید مثلا اگر تابع به صورت زیر باشد:
Z 11 = h1* ∑ max ( 0 , Xidealijt – X i,j,t) + h2* max ( 0 ,X i,j,t –X ideal i,j,t) * C12
با تشکر فراوان
سلام
خب اینکه کدوم پارامتره و کدوم متغیر، رو جوابتون تاثیر داره. شما اگه اسم max اول رو بذارین مثلا A(i,j,t) اونوقت میتونین به جاش دقیقا همین A رو بنویسین. پس فعلا max خطی شد.
ولی رابطه ای که مورد نیاز هست اینه که شما محدودیت زیر رو به مدل اضافه کنین. (دقت کنین وقتی A برابر بزرگترین این مقادیر هست، پس از تک تکشون هم بزرگتر هست:
z11=e=........sum(......,A(i,j,t)......
A(i,j,t)=g=0;
A(i,i,t)=g=xideal(i,j,t)-x(i,j,t);
به همین صورت واسه بقیه هم ادامه بدین.
خواهش میکنم
با سلام خدمت شما و با تشکر از سایت خوبتان.ببخشید من رشته تحصیلی ام مهندسی صنایع نبوده ولی پایان نامه ام مدلسازی و حل آن با گمز است، مدل را نوشته ام اما نمیدانم چگونه می شود تابع هدف را خطی نمود!!!میشه لطفا کمکم کنید مثلا اگر تابع به صورت زیر باشد:
Z 11 = h1* ∑ max ( 0 , Xidealijt – X i,j,t) + h2* max ( 0 ,X i,j,t –X ideal i,j,t) * C12
سلام
وقتی بخواهیم تو نوشتن دستورsum بگیم همه موارد را بشماره بغیر از یه مورد خاص باید چه کار کنیم .مثلا مجموعه خروجی های یه واحد به واحد دیگه بره به غیر از خودش یعنی recycle نداشته باشه
سپاس
سلام
سوالتون کلی هست. اگه کامنتا رو بخونین، بقیه هم همچین سوالی پرسیدن. تو همین تاپیک
شما باید از دستورات شرطی ord و همچنین احتمالا باید از دستور alias هم استفاده کنین
سلام
فرض کنید میخواهیم انتخاب کنیم از بین چندتا فناوری برای یه مسئله خاص کدوم هاش رو انتخاب کنیم/i1*i4/ست مربوط به فناوری هامون هست (میشه یک یا چند فناوری انتخاب بشه)اول باید مشخص کنیم جریان اولیه وارد کدوم فناوری بشه بعد خروجی فناوری انتخابی دو تا اتفاق براش میافته یا قید رو ارضا میکنه و خارج میشه تا وارد یه فناوری دیگه بشه حالا فرض کنید وارد i1 شده و قید لازم برای خروج رو ارضا نکرده و باید به یکی از فناوری های بعدی بره
qo(imm)=sum(imm,qimm(imm))
y(imm)*qimm(imm)=l=qup
y(imm)=e=1
immستی هست که تعدادش برابر فناوری هاست و با متغیر باینریy انتخاب میکنه وارد کدوم فناوری بشه حالا دو تا مشکل دارم اینکه بعد از نوشتن فرمولا که qe (خروجی فناوری )مشخص شده دوتا حالت داره یا qis’ که شرط رو ارضا کرده و خارج میشه یا میشه qisکه باید وارد مرحله بعد شه که نمیدونم چه جوری تفکیکش رو بنویسم و حالا تو ورودی فناوری باید دونوع ورودی رو برای هر فناوری تعریف کنم یکی qoممکن واردش بشه یا خروجی فناوری قبلی البته فقططط یک نوع ورودی داریم و مخلوط شدن جریانا رو نداریم
حالا تو دستور sum میخوام بگم روی I بده اما اگه تو i1هست اونو حساب نکنه و برای 3 تا فناوری دیگه در نظر بگیره.
میدونم بد توضیح دادم نتونستم شکلش رو اینجا بزارم و به ایمیلی که تو بخش تماسه فرستادم تصویرش رو ممنون میشم نگاش کنید.
دستور ord رو هو دیدم ولی هر جا یه سری حروف جدید به غیر از حالت های مساوی و … داشت کتابی هست اینا رو کامل توضیح داده باشه؟
سپاس فراوان
سلام
خیلی زیاد نوشتین خدایی. حوصله نداشتم بخونم. فقط میدونم احتمالا باید از مجموعه های چند بعدی استفاده کنین. شایدم نه. خیلی زیاده متن
باشه ممنون
باسلام
من یکسری داده را در اکسل وارد کردم و از طریق اموززش های مختلف سعی کردم فایل اکسل را در گمز فراخانی کنم.فایل gdx ساخته میشود و همه مراحل درست پیش میرود ولی در اخر بعد از ران روی display که میززنم چیزی نمایش نمیدهد مشسکلم کجاست.
set r/1,2/
c/1,2,3/;
parameter p(r,c) ;
$call gdxxrw data.xlsx par=p rng=sheet1!b1 rdim=1 cdim=1
$gdxin data.gdx
$load p
$gdxin
display p;
سلام
یعنی چی چیزی نشون نمیده؟ display تو فایل lst اصن بهتون نشون داده میشه؟ rdim و cdim رو دقیق بزنین
با سلام
من یک مسئله غیرخطی رو با گمز حل کردم، جواب داده و چون جوابها رو از قبل میدونستم، مقادیر متغیرها درسته، ولی در خروجی تابع هدف ضرایب متغیرها رو صفر نشون میده، ایراد کار از کجاست؟
یه سوال دیگه اینکه داده های کسری نمیشه در گمز وارد کرد؟ مثلا یک سوم رو حتما باید به صورت 0.33 نوشت؟
با تشکر
سلام
مهم جوابیه که بهتون داده. اون محاسبات رو ولش کنین. قضیه ش فرق میکنه.
داده های کسری هم میشه بله مثلا این:
(1/2)*3
خیلی ممنونم
ولی من یک سوم رو که 1/3 نوشتم در table ارور unrecognizable item گرفت!
سلام
اها منظورتون تو جدولا بود. تو جدول من ندیدم که کسری بنویسن. مگه اینکه با یه فرمولی چیزی وارد کرده باشن.
سلام جناب محموی
پیرو سوال قبلی در مورد “توان”
۱٫۱۲)**(t-1)
1.12 پایه هست
t-1 توان هست
(پایه و توان رو از نظر ریاضی درست نوشتم، توی کپی کردن جابجا شده)
جنس t “اندیس” هست!
و از 1 شروع میشه و نهایتا به 10 میرسه
سلام
اندیس رو همینجوری نمیشه خالی خالی استفاده کرد که.
شما به جای t یا بنویسین ord(t) یا بنویسین t.uel، ببینین کدومش به تعریفتون میخوره، احتمالا ord مناسب باشه
با سلام.
سوالی در خصوص حل مسئله TSP داشتم.
من کد زیر را برای حل با 20 شهر استفاده میکنم که با در نظر نگرفتن محدودیت سوم که برای حذف subtour ها هست، به سرعت حل میشه ولی با فعال کردن ان بعد از گذشت تقریبا 10 دقیقه مسئله بدون جواب باقی میماند و حل نمیشود.
ایا اشکالی در محدودیت سوم وجود دارد؟
;((OF .. Z =e= sum((i,j)$(ord(i) ne ord(j)),x(i,j)*c(i,j
;Co1(i) .. sum(j,x(i,j)$(ord(i) ne ord(j))) =e= 1
;Co2(j) .. sum(i,x(i,j)$(ord(i) ne ord(j))) =e= 1
((Co3(i,j)$(ord(i) ne ord(j
;(u1(i)-u2(j)+(card(i)*x(i,j)) =l= (card(i)-1 ..
و اینکه اگر کد بهتری برای حل این مسئله هست، راهنمایی بفرمایید.
با تشکر فراوان
سلام
سایز مدلتون بالاست. تعداد نقاط رو کم کنید
با سلام مجدد.
با توجه به فرمایش شما یعنی گمز توانایی حل این مسئله با این سایز و بالاتر را نداره؟
چطور میتونم این مسئله را حل کنم؟
با تشکر
سلام
شما میتونین ی نوع دیگه مدل رو بنویسین، یا سایز رو کوچیکتر کنین. یه راهش اینه که شما برین تو model library تو همون گمز. بزنین tsp یه ده تا مورد بهتون نشون میده. ببینین کدوم به درد شما میخوره و همونه. همونو استفاده کنین
با تشكر فراوان
سلام
فرض کنید محدوده ی 3,2,1و4=t باشه و هم چنین محدودیت ساده ای داشته باشیم که فقط به ازای 1 و 4 (عدد اول و آخر) برقرار باشد.این محدودیت را چطوری میشه نوشت؟؟؟
با تشکر
سلام
c1(t)$(ord(t) = 1 and ord(t) =4).. lhs=rhs;
ممنون
فرض کنید تعداد t بالا باشد و محدودیتی داشته باشیم که گفته باشد به جز، جزء اول و آخر برای همه ی t ها برقرار باشد؟ این محدودیت چه طوری میشه؟؟ مرسی
سلام.
همون ord به کارتون میاد. بگین ord(t) بزرگتر از فلان و کوچکتر از فلان
به نام خدا
باسلام وعرض تبریک سال نو
مدل یک مساله زمانبندی رو توی گمز نوشتم و جواب گرفتم، بعد از اضافه کردن این محدودیت ها برنامه خطاهای 148 , 654 , 409 میده که هرچه تلاش میکنم برطرف نمیشه
ممنون میشم اگر راهنماییم کنید
con3(i)$(ord(i)< 1)..sum(k,y(i,k))=e=k;
con4(i)$(ord(i) gt 0)..sum(k,y(i,k))=e=1
con6(k).. sum(i,q(i)*y(i,k))=l=U;
باتشکر مجدد
سلام
سال نو شما هم مبارک
شما در سمت راست محدودیت اول از اندیس k استفاده کردید که این اشتباه هست. اگه منظورتون اندیس k هست که باید مقداری تغییر بدین تعریفاتون رو، یا یه اندیس مانند kk به k آلیاس کنین. بخش مجموعه ها رو ببینید.
بعد محدودیت دوم سیمیکالون نذاشتین. و ارور بعدی هم احتمالا اینه که شما یه متغیر یا پارامتر رو با یه اندیس کمتر یا بیشتر استفاده کردین.
سلام
آقای محمودی و رمضانی، ممنون از لطفتون!
دوستان یه سوالی در مورد “توان” دارم
من یه اندیس به اسم t دارم
یه عدد رو میخوام به توان t برسونم
مانند: 1.15 به توان t
با علامت ** توان رو گذاشتم خطا داد.
تابعی هست که توان این شکلی رو بپذیره؟؟
پی نوشت: برای روابط اقتصاد مهندسی میخوام
ممنون
اینکه چجوری پایه و توان رو بنویسین تو خطا دادن گمز تأثیر داره. به چه شکل نوشتین شما؟
(1.12)**(t-1)
1.12 پایه هست
t-1 توان هست
و t چه مقادیری رو میتونه بگیره و دقیقا از چه نوعی هست. متغیر یا پارامتر؟
سلام سال نو مبارک
سوالی از خدمت شما دارم.
من پارامتر هایی با 4-5 بعد دارم . به عنوان مثال d(i,j,,k,l,m). عملا تعریف جدول امکان پذیر نیست. علاوه بر این من میخوام تابع یونیفرم به این پارامترها تخصیص بدم.
ممنونم میشم منو راهنمایی کنید
salam sale no shoma ham mobarak.
injori tarif mishe :
parameter d(i,j,k,l,m);
d(i,j,k,l,m)=uniform(a,b);
ke a va b adad baze haton hastand.
ممنونم لطف کردید.
سوال دیگه ای داشتم
co3 (j,t).. sum((i,l), z(i,j,l,t))=g= sum((b,l), y(j,b,l,t))
زیر صور عمومی این معادله خطای 409 داده و هیچ جور رفع نمیشه، درحالی که رابطه درست نوشته شده…
سلام
شما احتمالا یه سیمیکالون (;) رو جا گذاشتین، احتمالا تو محدودیت قبلیتون.
سلام دوست عزیز.پیشنهادی داشتم.
اگر امکانش هست یک گروه تلگرام تخصصی برای گمز راه اندازی کنید.
با تشکر
سلام
ممنونم از پیشنهاد خوبتون.
راهبرد اصلی ما تولید محتوای خوب و ماندگاره، واسه همین از تلگرام استفاده نمی کنیم. تلگرام هر لحظه ممکنه بسته بشه، قطع بشه یا هر مشکل دیگه ای.
و اگه ما از تلگرام استفاده کنیم، فقط یه نسل (یکی دو سال) رو راضی کردیم. ولی اگه از سایت استفاده کنیم، سالها افراد مختلف میتونن استفاده کنن. از طرفی تقریبا همه دوستانی که تا حالا ازمون سوال پرسیدن بی جواب بر نگشتن معمولاً.
به هر حال ممنونم از پیشنهادتون. همه جوره در خدمتتون هستیم
سلام دوست بزرگوار.
ممنون از محبت شما.
خواهش میکنم و ممنون از شما
سلام و درود
توی یکی از قیود مسئلم یه متغیر تصمیم (y) باید با اندیس یه متغیر تصمیم دیگه جمع بشه. بصورت زیر:
Eq(i,t).. x(i+y,t)=l=3
ولی ارور میده.پیشنهاد ما چیه؟ البته i+y از محدوده i خارج نمیشه
فک کنم یه دستوری برعکس ord لازم داره. اگه میشه راهمناییم کنید
سلام
تو این شرایط معمولا بهتره که شما مدلسازی رو تغییر بدین. پیشنهاد من اینه که یه مجموعه دیگه به اسم ii تعریف کنید و بهش مقدار ندید. بعد یه محدودیت تعریف کنید که ii برابر با i+y باشه. فقط توجه کنید که i+y جمعشون باید به صورت i.uel+y باشه و همینجوری ساده جمع نمیشن
سلام
من می خواستم بدونم در محدودیت هام چه جوری می تونم شرط بگذارم. یعنی اینکه اگر در انجام محاسبات انجام کار برروی محصول i زودتر از ‘i بود، آنوقت بیاید به آن محدودیت عمل کند. آیا باید از دستور if استفاده کنم یا $ استفاده کنم یا راه دیگه ای داره؟
سلام
این شرطی که فرمودید، چجوریه ماهیتش. مدل (یا ما) از رو چی میدونیم که i قبل j بوده. اگه از قبل بدونیم که با مجموعه های چند بعدی میتونین این کار رو بکنین براش. یا اینکه یه پارامتر تعریف میکنین، که هر وقت i برابر فلان شد و j برای بهمان، آنوقت E(i,j) برابر یک باشه. بعد همین رو ببرین تو شرطی که با دلار تعریف میکنین. اگه حالت دیگه ای هست که بفرمایین در خدمتتون هستم
با سلام
در خصوص انجام چند شرط همزمان در تابع هدف و محدودیت ها روی چند مجموعه سوال داشتم.
فرض کنید دو مجموعه iوj با شرایط (0و1و2و…وn) داشته باشیم و بخوایم چند شرط همزمان زیر را روی تابع هدف و محدودیت ها اعمال کنیم:
اندیش i,j بزگتر از یه مقدار خاص
اندیس iوj برابر هم نباشند
یکی از اندیسها در مقدار نهایی (n-1) داشته باشد.
من برای یک شرط میتونم بنویسم ولی برای چند شرط همزمان روی چند اندیس چطور میشه اینکارو انجام داد؟
و سوال دوم اینکه اگر برای متغییری در قسمت تعریف متغییرها اندیس در نظر گرفته نشه و در تابع و محدودیتها این اندیسها قرار داده بشوند، ایا مشکلی ایجاد میکنه؟(مسئله با روش جواب دارد ولی به دلیل بزرگ بودن امتحان نکردم که جواب نهایی درست هست یا نه)
با تشکر فراوان
سلام
سوال اولتون، شرط یه همچین چیزی میشه:
$(ord(i) > 2 and ord(j) > 5 and ord(i) ne ord(j) and ord(i) = card(i)-1)
سوال دوم: نه مشکلی ایجاد نمیشه، ولی اگه اندیس بذارین، باعث میشه سرعت جل مدل بیشتر شه
سلام دوست عزيز
ممنون از راهنمايي شما.
در قسمتي از پاسخ ها شما براي تعريف متغيير باينري با چند انديس از يك فرم semi استفاده كرديد.ايا اگر با همان فرم integer variable براي متغييري با بيش از 2 انديس قرار بگيره ايجاد اشكال ميكنه؟
با تشكر فراوان
سلام
خواهش میکنم. تا جایی که از سوالتون برداشت کردم، نه مشکلی نیست
با سلام و احترام
اگر Y(j,l,pp,t)، U(j,pp,t) و B(l,pp,t) متغیرهای تصمیم باشند و d(l,pp,t) پارامتر مسئله و z متغیر باینری، چگونه می توان محدودیت زیر را کد نمود؟
(Y-U)*z+(Y+B)*(1-z)=d
l
متغیر باینری z، زمانی مقدار صفر میگیرد که Y-d، مثبت شود و زمانی مقدار یک را میگیرد که Y-d، منفی شود
لطفا بنده را راهنمایی بفرمایید
سلام
این محدودیتی که نوشتین دقیقا قراره این مفهومی که گفتین رو نشون بده؟ (خط های آخر)؟ یا اینکه اطلاعات اضافی هست خط آخرتون.
به هر حال برای خط آخر شما می توانید یک محدودیت تعریف کنید، با M بزرگ که این کار رو براتون انجام بده.
در مورد اون معادله هم که نوشتین همینجوری میتونین تایپش کنین مشکلش چیه؟
با سلام مجدد
در واقع جمله ی آخری که نوشته بودم، شرط if برای محدودیت ذکر شده بود و من نمیدونم که چطوری شرط if را برای یک محدودیت در گمز کد کنم
سلام از دستور های حلقه و شروط ایف نمیشه در محدودیت ها استفاده کرد. شما یا باید شروطتونو به محدودیت تبدیل کنین و یا اینکه از دستور ifthen استفاده کنید.
سلام وقتتون بخیر ممنون از راهنماییهاتون.من یک مدل سه هدفه دارم برای دفاع هم وقت کمی دارم کسی با محدودیت اپسیلون کار کرده برای مدلهای بیشتر از دو هدف جواب میده؟ لطفا کسی بلده راهنماییم کنه.
برنامه ریزی ارمانی و nsga2چطور هستش؟
سلام
بله به تعداد هدفهای زیاد هم جواب میده. آرمانی هم میشه نوشتم. nsga2 فک کنم با متلب میزننش
سلام
من در مدلم متغییری به صورت زیر دارم:
X(j,i,k,l
متغیر باینری است که اگر کار j روی ماشین i قبل از کارk روی ماشینl پردازش شود مقدار1،و در غیر این صورت مقدار صفر می گیرد(k>j)
لطفا نحوه کد کردن این متغیر را بفرمائید.
ممنون
سلام
اینکه شما یک متغیر رو جوری تعریف کنید که یه سری شرط داشته باشه ممکن نیست. مثلا بگین که X متغیرمونه به شرطی که I بزرگتر از J باشه. این رو دقیقا تو همون دستور variable نمیتونین بزنین. این شرط رو باید تو تک تک محدودیت هایی که این متغیر استفاده شده باید بیارین.
حالا روابط پیشنیازی تو کار شما هم باید یه مجموعه چند بعدی تعریف کنید، همون پستی که عرض کردم خدمتتون. مث مثال زیر:
set
i/1*2/
j/1*3/
;
alias (j,k),(i,l);
set E(j,i,j,l)/2.1.3.2/
این مجموعه E نشون میده که هر وقت j برابر 2، i=1 و k=3 و l=2 بشه، اونوقت E برابر با yes میشه. با این روش شما هم پیشنیازی تعریف کنید. سری قبل عرض کردم خدمتتون که پست مجموعه های چند بعدی رو بخونین به جواب سوالاتون میرسین.
اینجا
سلام خسته نباشید
گمز دستوری داره که بشه برای ماینگین گیری ازش استفاده کرد
یک جدول دارم که چهارتا ستون داره، می خوام از میانگین هر سطر استفاده کنم
یک پیشنهاد : یک تاپیک اضافه کنین و دستورای مثل این و تولید عدد تصادفی در گمز و … و معرفی کنین
شادکام پاشید در پناه خدا
سلام
من دستوری خاصی که باهاش میانگین گرفته بشه تا حالا استفاده نکردم. معمولا خیلی ساده فرمولش رو می نویسم. پیشنهاد میکنم شما هم این کار رو بکنین. اول یه پارامتر تعریف کنین. بعدش فرمول میانگین رو براش بنویسین.
در مورد پیشنهادتون بله حتما. امیدوارم بیشتر بتونیم پست بذاریم. مرسی و موفق باشید
بزارین واضح تر بگم. مثلا من یک سری نقاط تقاضای i دارم که با توجه به فاصله با یک هاب یا بصورت مستقیم به مقصد میرسن. محدودیت اول باعث میشه که همه نقاط چه مستقیم یا با هاب به مقصد برسن. در محدودیت 2 میخام برای اون نقاطی که با هاب رفتن یک محدودیت دیگه قرار بدم. آیا میشه این کارو کرد؟؟؟؟مرسی
بله می شه ! شما کدشو می تونین بنویسین. باید دو مجموعه در نظر بگیرین یکی برای هاب ها یکی برای مستقیم ها . یا اینکه یک مجموعه در نظر بگیرین که هاب و مستقیم ها زیر مجموعه اش باشن.
سلام وقت بخیر. آیا میتونم محدودیتی بنویسم که به ازای xهایی از محدودیت قبلیش که 1 میشن برقرار باشه. ینی محدودیت اول تقدم داره به دومی و دومی فقط به ازای x هایی از اون که 1 میشن برقرار خواهد بود.
با سلام
من مدل پایان نامه ام را جهت چک کردن صحت آن، با گمز کد نمودم، هیچ خطایی ندارد، ران می شود ولی خروجی تمام متغیرها و تابع هدف هایم را صفر نمایش می دهد. ایراد این موضوع از داده هاست یا مدل صحت ندارد؟
لطفا بنده را راهنمایی بفرمایید
سلام
مدلتون ممکن است نشدنی باشه که چنین جواب هایی را می دهد و ایراد از داده هاتون باشد و یا شاید ایراد از محدودیت ها باشد. نیاز به بررسی و آنالیز داده ها دارد.
سلام
برای نوشتن اندیس های t-1 در محددیت ها از جه دستوری باید استفاده کرد؟
به عنوان مثال:
sb6(p,t)$(Ord(t) gt 1) .. Y(p,t) =e= Y(p,(t-1)) + sum(v, Xi(v,p,t)) – sum(s, Xo(s,p,t))
سلام
برای مثال اگه متغیر (y(p,t تعریف شده است ، توی محدودیت ها می تونین بنویسین (1-y(p,t و گمز ارور نمی گیرد. فقط حواستان باید باشد که در تعریف set ها t را از چه عددی شروع کردین که اگر نیاز بود شرط بزرگتر بزارین. مثالی که زدین درست است اما دیگر نیازی نیست t-1 را توی پرانتز بنویسین.
ممنون از راهنماییتون
محدودیت به صورت زیر نوشتم
cont19(i,j).. sum(b,W(i,j,b))=e=ifthen(Y(i,j)=1,1,0);
این بار خطاهای 57 و 256 رو میده
اینطور تعریف کردن اشتباه در ضمن روش حل مسئله Mip هستش
سلام، بله اینجوری دیگه minlp هست وباید با sbb حلش کرد. یا اینکه باید مقداری مدلسازی کنین
سلام ببخشید کاربرد دستور solvelink تو گمز چیه؟
مثلا تو اول اسم مدل نوشته شده باشه بعدش .solvelink=2
سلام
استفاده نکردم تا حالا من
با سلام.
من در مدلم محدودیت توالی دارم که زمانی که دو بچ ‘i,i بخواهند در یک واحد عملیاتی ساخته شوند بایستی این محدودیت برقرار باشه.
Si’ ≥ Sp+Lp −M(1 –Uip)-M(1 – Xii’ ) −M(2 − Y ij− Y i’j)
∀i, i’ ∈ I : ord(i) < ord(i’) , j ∈ Ji∩ Ji’ ,p∈Pi
میشه راهنمایی کنید که چه جوری باید این شرط j که مربوط به اشتراک دو مجموعه است رو بنویسم. در واقع این اشتراک نشان می دهد در صورتی که هر دو بچ i, i’ در یک واحد عملیاتی ساخته شوند این محدودیت برقرار می باشد.فکر می کنم که اینطوری باید شروع کنم. درسته؟ میشه شما درستش رو بنویسید یا تکمیلش کنید؟
seqconst1(i,ii,j,p)..$(ord(i)<ord(ii) and
سلام
متوجه نشدم که ji دقیقا منظور چیه، فقط اینو بدونین که از قبل باید یه مجموعه براش تعریف کنین و تو محدودیت از اون استفاده کنین
سلام
در تعریف محدودیت های مدل یک مسئله MIP در یکی از محدودیت ها برای تعریف شرط اینکه به ازای متغیر باینری Y که برابر 1 می باشد محدودیت برقرار است را بصورت زیر تعریف کردم اما خطا میده
cont19(i,j)$(ord(Y(i,j)=1)).. sum(b,W(i,j,b))=e=1;
لطفا در صورت ممکن راهنمایی کنید فکر کنم بکار بردن ord برای متغیر اشتباه می باشد.
سلام
اینکه ord به کار بردین که بله غلطه. Ord فقط واسه اندیس هاست.
شما یا از دستور ifthen که تو کامنتای همین تاپیک زیاد دیده میشه استفاده کنید، یا اینکه مدلسازی رو مقداری تغییر بدید و این شرط رو به یکی دو تا محدودیت دیگه تبدیل کنید.
ممنون از راهنماییتون
محدودیت به صورت زیر نوشتم
cont19(i,j).. sum(b,W(i,j,b))=e=ifthen(Y(i,j)=1,1,0);
این بار خطاهای 57 و 256 رو میده
اینطور تعریف کردن اشتباه در ضمن روش حل مسئله Mip هستش
بله با این دستور مدلتون دیگه خطی نیست بلکه minlp هست و باید با sbb solver حلش کنین، اگه این کارو نکنین باید مدل تویسی کنین مقداری
سلام. من با پیام EXIT – the superbasics limit is too small مواجه می شم در انتهای حل برنامه. هرچی سرچ هم کردم به جایی نرسیدم. تا الان فقط میدونم که مشکل از تعداد متغیرهای غیرخطی زیاده. ولی نمی دونم چطور می شه حد superbasics limit رو تغییر داد. می تونید لطفا کمک کنید؟
سلام
نمیدونم حقیقتش. کار نکردم باهاش
سلام مرسی از وب سایت خوبتون. یک متغیر دارم وابسته به مجموعه i مثل متغیر x(i) حال میخوام بنویسیم cos(x(i)) برای وقتی که مثلا i=2 است توجه کنید که بنا به دلایلی نمیخوام به این صورت بنویسم cos(x(‘2’)) . آیا روشی هست ؟
سلام
این پاسخ به وفور تو همین تاپیک به دوستان پاسخ داده شده، از دستور ord استفاده کنید.
دقیقا مشکل اینجاست که این تابع کسینوس بخشی از یک محدودیت بزرگ است و ord رو نباید برای محدودیت بگزارم مشکل اینجاست که قبل از تابع کسینوس میزارم خطا میدم بعدش میزارم باز هم خطا میده داخل پرانتز بعد از متغیر ایکس میزارم خطا میده و الی آخر …
به هر حال ممنون از پاسخ
خب شما یه Alias برای i تعریف کنید، و از الیاسی که تعریف کردید استفاده کنید
سلام
2 تا سوال داشتم از خدمتتون،اول اینکه: در مدلی ک در حال توسعه دادن هستم، محدودیتی هست که یک طرفش پارامتری رو به عنوان یک عدد بزرگ نوشته(داخل مدل های دیگر هم دیدم)، اصلا دلیل این محدودیت و منطقش چیه؟؟(البته این سوالم شاید خیلی ب گمز ربط نداشته باشه)
R(j,t)=l=M*F(j,t( اینجا، M عدد بزرگیه و F باینری , R هم متغیر معمولی
سوال دومم اینه که
حالا این M رو چطور به عنوان یک عدد بزرگ باید وارد گمز کرد؟؟؟
پیشاپیش ممنون از جوابتون
سلام
این محدودیتا یعنی اینکه اگه R مقدار بگیره، الزاما باید F هم مقدار بگیره.
M بزرگ رو به عنوان پارامتر یا اسکالر تو گمز میشه تعریف کرد و مقدار بزرگی بهش داد
سپاس از لطفتون
سلام … ممنون از این سایت… وقتی دیدمش آرامش گرفتم که میشه جواب سوالمو اینجا بگیرم
من یک مدل خطی برنامه ریزی دارم که 95 محصول، 47 مشتری، 6 دوره زمانی دارم …. تعداد محدودیت ها در حدود 50000 هست… آیا نرم افزار gams جواب میده؟
ممنون میشم راهنمایی کنید
سلام
خواهش میکنم، این حرفتون قوت قلبه برا ما.
به طور قطع نمیشه گفت میتونه یا نه، بستگی به پیچیده گی مدل شما داره، سایزهای بالاتر از این هم میتونه حل کنه. احتمالا مشکلی براتون پیش نمیاد
جدی ؟ خیلی عالیه…. اما من توی یک سایت دیگه دیدم توی شرایط استفاده از گمز گفته بودن که بیش از 300 محدودیت و متغیر امکان پذیر نیست
اون احتمالا واسه یه مدل خاص نظر دادن. همیشه نمیشه جواب قطعی داد. مورد داشتیم چند صد هزار متغیر رو هم حل کرده
ممنونم. موفق باشید
با سلام.
من برنامه ریزی آرمانی goal programming رو توی گمز نوشتم.(دو تابع هدف دارم) با اینکه متغیرهای انحراف از آرمان رو positive تعریف کردم. ولی مقدار تابع هدف صفر بدست میاد؟ میدونین دلیلش چیه. آخه تابع هدف min انحراف از آرمان هاست و حتما انحراف از آرمان ها را داریم.پس چرا صفر میشه؟؟
سلام
سایر متغیرها مقدار گرفتن؟ و اینکه شاید توابع هدفتون هم جهت هستن
سلام وقت بخیر خسته نباشید
یه سوال در مورد محدودیتی که توش min داره داشتم
x دارای 2 اندیس و y دارای 1 اندیس و هر دو متغیر هستند
limit1(t,i)..y(t)=e=min(x(t,i))
به این صورت مینویسم ارور میده
متشکرم
سلام
شما محدودیت رو به شکل زیر بنویسین. وقتی y برابر کمترین x هست. پس y از همه x ها کوچیکتره. محدودیت برو به شکل زیر تبدیل کنین. احتمالا مشکلی براتون پیش نمیاد.
y(t)=l=x(t,i);
سلام خدمت شما
من کدی رو وارد گمز کردم، جوابی ک از تابع هدف بدست میارم خیلی کمه
چون بصورت چشمی هم نیگاه میکنم مشخصه که جواب ی عدد خیلی بزرگی بدست میاد
معادله حل شده گمز رو هم ک نگاه میکنم مسیرش درسته و نمیدونم چرا جواب خیلی کم بدست میاد؛ اینم بگم ک معادله minlp هست و تابع هدف max , البته معادله چن هدفه است و اینم تابع هدف اوله
obj1.. z1 - 276.13352258*P(1,1,1) - 289.6005018*P(1,1,2)
- 295.70315505*P(1,1,3) - 277.67429394*P(1,1,4) - 276.13352258*P(1,2,1)
- 289.6005018*P(1,2,2) - 295.70315505*P(1,2,3) - 277.67429394*P(1,2,4)
- 276.13352258*P(1,3,1) - 289.6005018*P(1,3,2) - 295.70315505*P(1,3,3)
- 277.67429394*P(1,3,4) - 276.13352258*P(1,4,1) - 289.6005018*P(1,4,2)
- 295.70315505*P(1,4,3) - 277.67429394*P(1,4,4) - 280.54590203*P(2,1,1)
- 308.32661208*P(2,1,2) - 268.7891492*P(2,1,3) - 283.48550066*P(2,1,4)
اینم قسمتایی از معادله ای ک گمز حل کرده، تا آخرش همینه، متغیر p هم عدد مثبت و بزرگی
اگه راهنمایی کنید ی دنیا ممنون میشم
البته اینم بگم ک جواب 4.614339E+7 اینجوری بدست میاد، مقدار دقیق این عدد چند میشه؟
سلام
این عدد خیلی بزرگیه که. یعنی همون عدد ضربدر 10 به توان 7 که عدد کوچیکی نیست
بسیار ممنونم از راهنماییتون، احساس میکنم سوالم خیلی ابتدایی بود
خیلی لطف کردید
فقط ی درخواست دیگ داشتم، راهنمایی برای خروجی گمز به اکسل دارید؟
چون تو سایت گشتم پیدا نکردم
بازم از کمکی ک کردید تشکر می کنم
سلام
من نمیدونم چرا بچه ها دنبال خروجی به اکسلن واقعا اگه از اشتراک چند نرم افزار استفاده نمیکنید مقداری الکیه انرژی گذاشتن روش
با سلام
می خواستم یه محدودیت تعریف کنم که اندیس متغیرها تو دو تا سامیشن عوض میشه، دو مجموعه i وj داریم که اولی از 1 تا 5 و دومی از 1 تا 10 و یک مجموعه اجتماع این دو مجموعه رو داریم مثلا با نامu. حالا تو محدودیت ما سامیشن اول رو متغیر x(i,g) که اندیس g عضو مجموعه j هست و در سامیشن بعدی متغیر x(g,j) داریم که اندیس g عضو مجموعه u(اجتماع iوj). این محدودیت مربوط به پیوستگی یک مسیر می باشد. ممنون میشم اگه تو دستورش کمکم کنید.
سلام
این خوبه براتون:
set i/i1*i5/
j/j1*j10/
u/set.i,set.j/
;
alias (i,ii),(j,jj),(u,uu);
بعد تو اون دو تا سامیشن اولی رو رو jj بزنین و دومی رو رو uu . فقط دقت کنید که x رو چحوری تعریف میکنین. x(i,*) یه راهکار میتونه باشه. بخش اجتماع مجموعه ها رو هم ببینید بد نیست.
ممنون از راهنماییتون، بله تو قسمت تعریف متغیر ارور داد باید اونو درستش کنم.
سلام
ببخشید من بعد از همون محدودیتی بود که خدمتتون عرض کردم یه محدودیت بالانس دارم به این صورت که سامیشن اولم روی x(i,j) هستش که این بار j عضو u (اجتماع iوj) منهای سامیشن دوم که روی x(j,i) هستش که j عضو u هست. چون ترتیب اندیس ها واسه متغیر xعوض میشه همنطوری که گفتید ارور میده منم به این صورت تعریفش کردم: x(u,h) و alis(h,j) که تو همون محدودیت اول مشکلی پیش نیاد.الان مشکلی که دارم اینه محدودیت بالانسمو چطور بنویسم ممنون میشم راهنمایی بفرمایید.
خواهش میکنم.
ببینید شما بهتره x رو به صورت x(*,*) تعریف کنید. این مشکل براتون پیش نمیاد
ممنون از پاسختون. من متد goal رو خوندم.میخواستم اگه امکانش هست یک مثال ساده از نحوه بکارگیری متغیرهای انحراف از آرمان در گمز برام بنویسید. چجوری باید تعریف شن. چجوری توی تابع هدف بیان.مثال فارسی ندیدم.مثال های سایت های خارجی رو خوندم ولی چون پیچیده بود و ابعاد مساله بزرگ متوجه نشدم.
سلام
منم ساده ندارم. هر چی هم با همکارا انجام دادیم پیچیده هست و امانت مشتریان سایت.
با عرض سلام و خسته نباشید. من یک مدل دارم با دو تابع هدف.(یکی ماکس و دیگری مین) .که یکی از این توابع هدف رو به محدودیت تبدیل کردم و با گمز مدلمو حلش کردم. حالا استادم ازم خواسته با روشgoal programming هم حل کنم.آیا با گمز میشه حلش کرد؟؟ممنون
سلام
بله میشه حل کرد. فقط قبلش خود متد goal رو خوب یاد بگیرین. مرحله بعدش میتونین با همون مفهومی که یاد گرفتین goal رو پیاده سازی کنین.
سربلند باشید
سلام. من تابع هدف
زد مساوی سیکماj پرانتز باز teta(j) منهای سیکماr( یوr*ایگرگjr) تقسیم بر سیکماi ( ویi * ایکس ji) پرانتز اول بسته به توان 2
رو به صورت :
Z-SUM(J,(TET(J)-SUM(r,U(r)*YY(J,r))/(0.000001+SUM(I,V(I)*XX(J,I))))**2)=e=0;
رو تو مسئله ام نوشتم .همه داده ها درست ثبت شده ولی جواب اشتباه محاسبه میشه. اون عدد کوچک 0.000001 رو هم اگه بردارم خطای تقسیم بر صفر میده.لطفا راهنمایی کنید.
در ضمن توان کسری و یا ریشه بالاتر از دو برای عبارت ها چطور نوشته میشه
مثلا ریشه پنجم یک عبارت و یا یک عبارت به توان یک پنجم.
ممنون
سلام
اینکه جواب صحیح نمیده رو از رو چی میگین. و مشکل جواب چیه
توان کسری و ریشه خودشون به نوعی توان هستن. به جای:
**2
بنویسین
**(1/5)
من یه داده ها و جواب ها رو که با مسئله بالا حل شده رو دارم ولی با گمز که مینویسم جواب ها اشتباه بدست میاد. اگه امکان داره یه ایمیل مشخص کنید که داده ها و مسئله و برنامه ای که نوشتم رو براتون بفرستم .ممنون
سلام
به برگه تماس با ما مراجعه بفرمایین
مرسی آقای محمودی.می خواستم بدونم علت نامحدود شدن و تفاوتش با نشدنی بودن یک مسئله چی می تونه باشه؟
سلام
فرض کنین هدف شما ماکسیم سازیه. بعدیه متغیر دارین توش بتونه اعداد خیلی بزرگ رو بگیره. خب معلومه که ممکنه جوابش نامحدود یا بشه. این تعریف نامحدود بودنه.
یه مسئله هم نشدنیه وقتی که حداقل دو تا از محدودیت هاش با هم تناقض داشته باشن. یعنی فضای شدنی نداشته باشه.
سلام
یه سوال داشتم اگه میشه کمک کنید
اگه تو یه محدودیتی داشته باشیم
sum(j,X(i,j,t))>=si(i,t)*ds(i,t-1) for each i,t
که ds و si دو تا پارامترند و x متغییره , ds(i,0)=0. حالا میخام ببینم اینو چطوری باید نوشت؟
چون ds(i,t) پارامتره نمیشه از ds.fx(i,”0″) =0 استفاده کرد پس باید چجوری اینو بنویسیم؟
سلام
اولا شما باید اندیس t رو از صفر تعریف کنین، بعدشم وقتی به پارامتر ds مقدار میدین مقدارش رو وقتی t برابر صفره، مساوی صفر بگیرین
آخه گفته t=1,2,…T .اگه همینجوری تو گمز بنویسیم مقدار ds رو برای t-1 وقتی t=1 خودش برابر صفر نمیگیره؟
خب شما یا باید t رو از صفر بگیرید، یا با یه شرط به محدودیت بفهمونین که وقتی t از دو بزرگتره اینو اعمال کن، و یا اینکه یه t1 تعریف کنین که صفر هم شامل میشه و t زیر مجموعه اون تعریف بشه. بعد تو تعریف ds هم دقت کنین.
set t1/0,1,2,3,4/
t(t1)/1*4/
;
variable ds(t1)
;
کلیاتش همینه. بسته به مدلتون تغیر بدین
سلام .مرسی از سایت خوبتون.به نظر شما مشکل این قسمت چیه؟
eq8 (m,t)$(ord(m)and ord((t)>1)..-1*q(t)=g=x(m,t-1)-u(m,t-1)+v(m,t-1)
eq9 (m,t)$(ord(m)and ord((t)>1)..x(m,t-1)-u(m,t-1)+v(m,t-1)=l=q(t)
ارور شماره 2 میده
سلام
خواهش میکنم. دقت کنین که دستورای شرطی رو درست به کار ببرید. دستور شرطی شما باید به شکل زیر باشه:
$(ord(m) > 1 and ord(t) > 1 ) ..
حالا اگه رو m شرطی ندارین و مشکلی نداره مساوی یک هم باشه، قسمت مربوط بهش رو حذف کنین. مورد نیاز نیست چون
$(ord(t) > 1)..
سربلند باشید
با سلام
میخواستم ببینم تابع هدف زیر رو که رو اندیس j شرط زیر برقراره باید چطور نوشت.
d(t)={j|td(j,k)>=te(k,t)—-1
z=sum((jCd(t),k,t),(td(j,k)-te(k,t)*x(j,k,t))——–2
jCd(t)——3 منظورم از این یعنی j عضو مجموعه d(t) باشه
با سلام
میخواستم ببینم تابع هدف زیر رو که رو اندیس j شرط زیر برقراره باید چطور نوشت؟
d(t)={j|td(j,k)>=te(k,t)----1
z=sum((jCd(t),k,t),(td(j,k)-te(k,t)*x(j,k,t))--------2
jCd(t)——3 منظورم از این یعنی j عضو مجموعه d(t) باشه
td,te پارامترن و x متغیره
ممنون میشم جواب بدید.
خودم از دستور زیر استفاده کردم ولی فک نکنم درست باشه.
z2=e=sum((j,k,t)$(card(td) >=card(te)),(Td(j,k)-Te(k,t))*X(j,k,t))——–1
لطفا اگه کسی میدونه کمک کنه.
سلام
این معادله که فرمودین، بستگی به فرمول 1 داره. فرمول یک زیاد واضح نیست. اونو توضیح بدین لطفا اول
j باید عضو مجموعه d(t) باشه.مجموعه d(t) هم که شامل jهایی هست که باید
td(j,k)>=te(k,t) باشه.
td(j,k) زمان ارسال از j به k هست و te(k,t) زمان مورد انتظار مشتری kام در دوره t هست.
شما قبل از محدودیت ها یه دستور شرطی بنویسین (حالا ممکنه با ترکیب loop و if باشه یا خود if) و مجموعه jهایی رو بدست بیارین که تو معادله ای که گفتین صدق میکنن (این مجموعه یه پارامتره که یه سری مقادیر گرفته). فرض کنیم این پارامترو اسمشو گذاشتیم A(j). بعد تو تابع هدفتون باید از شرط استفاده کنین. این شرطو اینجوری تعریف کنین:
sum(j$(ord(j) = A(j)), Baghiyeh) ;
اگه من جا شما باشم یه کار دیگه میکنم. میام کل شرط رو میذارم تو تابع هدف و نیازی به چیز دیگه ای پیدا نمیکنم. شما هم این کارو بکنین:
sum(j$(td(j,k)>=te(k,t)), Baghiyeh);
ممنون از پاسخ گویی شما
ولی این خطا رو میده
lag or 'ord' illegal with non costant set
ممنون از پاسخ گویی شما
ولی این خطا رو میده
lag or 'ord' illegal with non constant set
سلام
این ارور به یه جای دیگه مربوط میشه. تعریفتون از j و همچنین اون چیزایی که گفتم رو اینجا بذارین که ببینم
ممنون از پیگیریتون.
1- j index of candidate locations for distribution centers j = 1, . . . , J
2- k index of fixed locations of customer zones k = 1, . . . , K
3- t index of time periods t = 1, . . . , T
4- Parameters:
5- td(j,k) delivery time from distribution center j to customer zone k
6- te(k,t) expected delivery time of customer k in period t
7- D(t) = { j |td(j,k) ≥ te(k,t) } in period t
8- Variables:
9- u(j,k,t) quantity of products shipped from distribution center j to customerzone k at period t
10- Min Z=sum((t,k,j∈D(t),(td(j,k) -te(k,t))*u(j,k,t));
سلام
چیزایی که عرض کردم خدمتتون رو پیاده نکردین، اون شرط رو بذارین تو دستور sum. و D رو حذف کنین. تعریف مجموعه هاتون صحیح نیست. شما به بخش مجموعه ها مراجعه کنین
با کمک چیزایی که تو سایت خوبتون بود تونستم به صورت زیر بنویسم:
parameter d(j,k,t); -1
d(j,k,t) $ (ord(j)>= ord(k))=Yes; -2
equation1 .. hadaf=e=sum((j,k,t)$ d(j,k,t),(td(j,k)-te(k,t))*u(j,k,t)); -3
البته بدون تعاریف بالا به صورت مستقیم هم میشه به صورت پایین نوشته:
equation1 .. hadaf=e=sum((j,k,t)$ (ord(j)>= ord(k)),(td(j,k)-te(k,t))*u(j,k,t)); -4
ممنون از راهنمایتون.
خواهش میکنم. شرطتتون تغییر کرده یا چحوریه..
شرط که همونه ولی وقتی می نویسیم
(ord(td(j,k)>= ord(te(k,t))=Yes; -2
خطا میده و میگه td و te جزو اندیس نیستن.چون تو مجموعه D(t) شرط روی jهاست بنابراین من اومدم فقط برای اندیس j شرط گذاشتم یعنی اگه اندیس j از اندیس k بزرگتر باشه اون تابع هدف رو محاسبه کنه.البته نمیدونم درست هست این کاری که انجام دادم یا نه؟
ببینید تو یکی از کامنتا خدمتتون عرض کردم که باید شرط رو ببرین تو خود دستور sum دقیقا همونطوری که گفتم انجام بدین. این ord غلطه
با سلام.میخواستم ببینم absolute gap چیه و مقدارش باید چقد باشه؟
یرای مدل من مقدارش 550039.269 اومده.و relative gap مقدارش 0.000877اومده.فرق این دوتا چیه؟و مقدار استاندار این دوتا باید چقد باشه؟
سلام
این سوال بارها تو کامنتا جواب داده شده. اگه شما مقدار متغیرهای گسسته رو به پیوسته تبدیل کنین، تو فضای شدنی جدید مقدار جدیدی که تابع هدف میتونه بگیره با مقدار بهینه واقعی مقداری تفاوت داره، این تفاوت رو بهش میگن گپ مطلق.
ممنون از پاسخ سریعتون.
خب این گپ باید وجود داشته باشه یا برای مساله مشکل ایجاد میکنه؟
دستور option optcr=0; رو برای این منظور استفاده میکنن؟که گپ رو صفر کنه و جواب بهینه رو به ما بده؟
خواهش میکنم. شما جز موارد استثنایی نیازی به این ندارین. بله از این دستور برای رسیدن به جواب دقیقه
با سلام.میخواستم ببینم این تابع هدف رو چجوری میشه تو گمز نوشت
متغیر=x و td,te =پارامتر
شرطش اینه: j|td(j,k)>=te(k,t)————1
z=sum((j,k,t),(td(j,k)-te(k,t))*x(j,k,t))————–2
ممنون میشم جواب بدین.
ی دونه ای
سلام.
چطوری باید
رادیکال (سیگما(k)(سیگما(i) سیکما(j)سیگما(l)سیگما(m)(ی عبارتی اینجاست خیلی مهم نیس چی هست)^2)
توی گمز نوشت؟
سلام
sqrt(sum((k,i,j,l,m),something**2)
errorش میگه پارامترا بدون داده هستن. من که پارامترامو با استفاده از uniform پر کردم. چرا این error وو میده؟
ممنون از راهنماییتون
سلام
من رانش کردم همچین اروری نمیده. وحید عزیز مقداری تو کد نویسی دقت کنین. من میگم یه بار دیگه بشین دوباره بنویس. چون خیلی سهل انگاری کردی توش. ارور از این نیست. ارور از جاهای دیگس. از اولین اروری که بهت میده شروع کن. sum(k, چرا نوشتی؟ یا آخر اون سامیشن اولی، اون دوتا ستاره چیه؟
سلام
sets
.
.
.
binary variables y;
free variable z;
.
.
solve test using MIP minimizing z ;
این کد چه مشکلی داره؟؟ دیوونم کرد
ممنون میشم اگه جواب بدین
سلام
این کار درستی نیست که این همه کد رو گذاشتین که بنده براتون رفع ارور کنم. مشکل زیاد داره. گمز خودش راهنماییتون میکنه…
سلام.
اگه بخوام یکی از اندیس هام که زمان هست رو sum ببندم طوری که با شمارنده s باشه از یک تا t به ازای هر t.این رو چطور کد بزنم؟
مرسی
سلام
کد زیر رو ببینید:
sum(s$(ord(s) >=1 and ord(s) <=ord(t) ), something(s));
سلام
وقتتون بخیر
من توی برنامم دوتا از متغیرهام که دارای هم کران بالا و هم کران پایین هستن،وقتی این کران ها رو تعریفشون میکنم مسئله م ران میشه اما قسمت سالور رو نشون نمیده
اما اگر این 4 کران تعریفی رو بردارم قسمت سالور هم میاد!
ممنون میشم اگر بفرمایید مشکل از کجا هست؟
سلام
یعنی چی قسمت سالور رو نشون نمیده؟
در قسمت نتیجه بخش solvar_جمع بندی پاسخ های متغیرها رو نشون نمیده که از اونجا بدونم مقدار هر متغیری چقدر هست
مدلتون حل نشده کامل، باید ببینین دلیلش چیه. ببینین مشکل از مدله، یا لایسنس و یا سالور
پیامی که گمز تو پنجره process window بهتون میده راهنماتونه
البته اگر یکی از محدودیت های هرکدوم رو بردارم جواب میده
چیکار کنم که با داشتن همه محدودیتا جواب بگیرم
اها، پس مدلتون نشدنی میشه با کم کردن دامنه هر کدوم. مشکل این محدوده هست که براش میذارین. حدود متغیرها رو با دقت بیشتری اعمال کنید، ممکنه بازه رو بیشتر کنین بهتر باشه
مشکلم حل شد
چون باند بالا کمتر از پایین بود
یک سوال داشتم
وقتی میگوییم
p>=100
p<=200
برای کران بالا و پایین اینگونه باید نوشت؟
p.lo=100
p.up=200
سلام
بله همین شکلی درسته
سلام با سپاس از سایت پر محتوا و خوبتون
من یه مشکل داشتم . می خوام یه شرط توی گمز بزارم که اگه پارامتر SIM(k,m) بزرگتر ازمتغیر IM(k,m,t) بود ، دراین صورت DDM(k,m,t) برابر با اختلاف اون دوتا بشه یعنی
SIM(k,m)-IM(k,m,t)=DDM(k,m,t) و در غیر این صورت DDM(k,m,t)=0 بشه
نمیدونم چطور باید واردش کنم. همینطور نمیدونم که این شرط رو کجای کد نویسی قرار بدم؟ممنون میشم راهنمایی کنید.
سلام
دو راه دارین
یکی اینکه مدلتون رو مقداری تغییر بدین تا این مفهوم که گفتین رو بتونین پیاده کنین، یکی اینکه از دستور ifthen استفاده کنین که تو کامنت های همین تاپیک به وفور دیده میشه آموزشش.
برای روش اول هم از تعریف متغیر جدید استفاده کنین.
موفق باشید
متشکرم آقای محمودی
سلام. من دستور زیر رو می نویسم خطای 198 رو میده
PMAXLIM(K,G,T)$(ord(T) GT 0)..p(K,G,T) =l= GDATA (G,'PMAX') * v(K,G,T
میخوام شرط رو به جز برای T=0 اعمال کنه
سلام
این سوالی هست که برای خیلیا پیش میاد. دلیلش اینه که شما باید تو تعریف مجموعه T تجدید نظر کنین!
به دو مثال زیر توجه کتید:
Example 1:
SETS
i/ 0, 2, 4 /,
j/ 1, 3, 5 /,
T/ 0 * 5 /;
Example 2:
SETS
T/ 0 * 5 /,
i/ 0, 2, 4 /,
j/ 1, 3, 5 /;
تو مثال اول اگر از دستور ord برای اندیس T استفاده کنیم، چون قبل از اینکه اعضاش کاملا تعریف بشن، تو مجموعه های قبلیش همین اعضا به طور به هم ریخته تعریف شدن، پس وقتی از ord استفاده کنیم، منطقیه که ارور بده. اصولا تعریف ord همینه که از اولین مجموعه شروع به تخصیص اعداد میکنه.
این مشکل تو مجموعه دوم رفع شده
سوالتون رو تو بخش 8 (خطاهای گمز) گذاشتم که همه ببینن
مرسی از شما
موفق باشین
سلام
ممنون از سایت پرمحتوا و مفید جنابعالی
ببخشید من یک محدودیت به صورت زیر در گمز وارد نموده ام. به من خطای 145، 149 و 154 می دهد. متوجه ایراد کار نمیشم
c22(j,k)$(ord(j)<6) .. LoadS((j,l,k)$ ((ord(l)<6)and(ord(j)ord(l)))-LoadS((i,j,k)$((ord(i)<6)and (ord(i)ord(j)))=e=sum((r,p)$ (ord(r)>0 and ord(r)<6),d(p,r)*landa(p)*g(j,r,p,k));
سلام
مرسی لطف دارین.
دقت کنین که اندیس L هم باید کنار j,k توی c22 باید بیاد.
بین دو دستور Ord فاصله بذارین، و بگین چه شرطی میخواد ord(j)ord(l)
پرانتز ها رو هم یه چک بکنین
سلام
خیلی ممنون
سلام آقای محمودی
تشکر از راهنماییهای ارزنده شما
ببخشید من به یک مشکلی برخوردم و اون هم اینه که مساله من یه مساله پیچیده است که معادله ها به هم ربط دارن. یعنی مثلا از یه معادله مقداری که برای یک متغیر بدست میاد ، در چند جای دیگه برای محاسبه بقیه استفاده میشه. همچنین مدل من MINLP هست.
مشکلی که من دارم اینه که در مدل اصلیم که قبلا حل شده برای یه حالتی، میخوام یه معادله جدید اضافه کنم. ولی این معادله از متغیرهای قبلی برای محاسبه متغیر جدید استفاده میکنه. وقتی من میام و متغیر جدید رو به صورت توان یک در سمت چپ، و متغیرهای دیگه که به صورت غیرخطی در هم ضرب و جمع شدند رو در سمت راست میگذارم، به من مقدار متغیر جدید رو میده. ولی وقتی میان و متغیر جدید رو در یه متغیر جدید دیگه ضرب میکنم یا اینکه اصلا همون متغیر رو به توان میرسونم، این ارور رو میده:
infeasible soloution. reduced gradient less than tolerance
با تشکر از شما
سلام
ممنون.
خب مدلتون نشدنیه. ببینین این معادله با کدوم محدودیت یا معادله تضاد داره
با عرض سلام وتشکر از سایت خوبتون
من مدل MIP یه مقاله رو به کمک مطالب سایت شما کد نویسی کردم اما با این که نتیجه Fixed MIP status(1): optimal را نشون میده اما جواب بهینه تقریبا نصف جواب بهینه مقاله هستش تو بررسی جواب متغیرها متوجه شدم که زمان شروع فعالیت بعدی که باید بزرگتر از زمان اتمام فعالیت قبلی باشه برابر صفر! .وقتی هم برای زمان شروع فعالیت بعدی حد پایین تعیین میکنم برابر با اون مقدار میشه ، خلاصه هر ایده ای که به ذهنم اومده انجام دادم و به نتیجه نرسیدم. لطفا در صورت امکان راهنمایی کنید
سلام
شاید شما ترتیب حافظه تو گمز رو در نظر نگرفتین. به این معنی که اول مقادیر کوچیکتر هر اندیس رو در نظر میگیره و بعدش بهش مقدار میده و همینجوری میره جلو تا کل متغییر مقدار بکیره. ولی تو این مدل شما ظاهرا هر بار که محدودیت حل میشه، t یه مقدار به خودش میگیره و وقتی دوباره حل میشه عددی که تولید میشه جای عددی قبلی رو می گیره. باید به این ترتیب دقت کنین.
یه بحث دیگه هم هست. اینکه محدودیت های شما اونقدر زور ندارن که متغیری به نام t (مثلا میگما!) که در سمت چپ محدودیت هست به اعداد بالاتری برسونن. پس شما باید کاری کنین که سمت راست محدودیت مقدار بیشتری به خودش بگیره تا سمت راست هم مجبور شه همین کارو بکنه
میدونم جمله سازیم بد بود. چون الان بیدار شدم هر چی بیاد تو ذهنم مینویسم 🙂
تشکر از راهنماییتون
میشه یکم بیشتر در مورد در نظرگرفتن ترتیب حافظه تو گمز توضیح بدین.
سلام
خواهش میکنم.
شما وقتی یه مجموعه به نام i دارین که از یک تا پنج رو شامل میشه، گمز وقتی متغییر x(i) رو استفاده میکنه، اول میاد x(1) رو بهش مقدار میده، بعدش 2 تا آخر. ممکنه مشکل شما این باشه که هر وقت t(1) عددی میگیره و بعدش t(2) این دومی بره مقدار بگیره و اولی رو هم مجبور کنه همون مقدار رو بگیره.
بهترین حالت واسه شما اینه که برین تو کد و به زبان خود کد فکر کنین، ببینین چرا این اتفاق میفته. محدودیت و کد رو اصلاح کنین مشکل هم از بین میره
حرفام کلیه
سلام وقت بخیر و تشکر بابته سایته بسیار عالیتون من یه محدودیت دارم که سامیشنه xij برابر صفر هست به ازای همه jها فقط رو سامیشنش نوشته که i نباید زیر مجموعه sj باشد sj هم پارامتره اگه میشه یه لطفی کنین بگین چطوری میتونم اینو تو گمز وارد کنم ؟؟؟
سلام
وقتی sum(j رو تعریف کردین، بعدش باید شرط بذارین که ord(i( نامساوی s(j) هست
موفق باشین
سلام
تشکر مجدد از سایت خوبتون و پاسخ دهی سریعتون
من یه مدل LRP رو توی گمز کد کردم که قسمت مسیریابیش کار نمیکنه. به همین دلیل همه محدودیتهای دیگه رو حذف کردم و مدل رو به یک مدل VRP پایه تبدیل کردم. اما وقتی جواب میده یک گره رو با دو یا چند خودرو ویزیت میکنه. حتی محدودیتهای حذف زیرتور هم گذاشتم.
نمیدونم باید چیکار کنم. آیا VRP رو میشه توی گمز حل کرد یا معمولا واسه چنین مسائلی گمز خوب جواب نمیده؟
خیلی ممنون
سلام
ممنون. خواهش میکنم.
نه مشکل از گمز نیست. مشکل مدلسازیه. معمولا تو مقالات یه مقداری از مدل ریاضی رو به صورت مفهومی بیان می کنن بدون اینکه فرمول جبری مربوط بهش رو بنویسن. پس شما باید دنبال این مفاهیم باشین، مثلا یه جا ممکنه گفته بشه که فلان نقطه فقط توسط فلان وسیله فقط باید بازدید بشه ولی فرمولش رو نمیارن؛ شما باید طبق دانشی که دارین این شرطی که گفته شده رو تو کد هم بیارین و به عنوان یه محدودیت یا دستور استفاده کنین. همه شرایط رو بذارین مشکلی ایجاد نمیشه.
موفق باشید
آقای محمودی بعد از کلی سرو کله زدن به یه چیز عجیب رسیدم: وقتی متغیر صفر و یک رو دو اندیسه تعریف میکنم جواب درست میده!!! وقتی اندیس مربوط به خودرو رو بهش اضافه میکنم جوابهای بیربط میده!!!!
*
آقای محمودی بعد از کلی سرو کله زدن به یه چیز عجیب رسیدم: وقتی متغیر صفر و یک رو دو اندیسه تعریف میکنم جواب درست میده!!! وقتی اندیس مربوط به خودرو رو بهش اضافه میکنم جوابهای بیربط میده!!!!
سلام
این در مرحله اول به ذهنتون عجیب میاد. ولی باید ریزتر بشین. دقت رو بیشتر کنین. همچین مسئله ای بی معنی نیست
سلام آقای محمودی
تشکر مجدد از سایت بینظیرتون و پاسخ دهی سریعتون
من یه مدل LRP رو توی گمز کد کردم که قسمت مسیریابیش کار نمیکنه. به همین دلیل همه محدودیتهای دیگه رو حذف کردم و مدل رو به یک مدل VRP پایه تبدیل کردم. اما وقتی جواب میده یک گره رو با دو یا چند خودرو ویزیت میکنه. حتی محدودیتهای حذف زیرتور هم گذاشتم.
نمیدونم باید چیکار کنم. آیا VRP رو میشه توی گمز حل کرد یا معمولا واسه چنین مسائلی گمز خوب جواب نمیده؟
خیلی ممنون
سلام
ممکنخ در مورد خطای 128 توضیح بدهید?
سلام
لطفا متن ارور رو بنویسین اینجا
عرض سلام و تشکر از مطالب خوبتون
من میخوام نتایج مدلم بصورت جدول نشان داده شود درحالیکه متغیرم چند بعدی است
یعنی
x(i.n.j.k.t
سلام
شما میتونین جوابهاش رو با تکنولوژی gdx به اکسل بفرستین