مطالبی که در فصل پیش بیان شد مربوط به کد نویسی مدل و آماده کردن محیط GAMS برای حل مدل به صورتی که بیشترین اطلاعات مفید از خروجی GAMS گرفته شود.
در این فصل به تشریح خروجی های استاندارد، خطاهای متداول و بهبود خروجی GAMS مورد بحث قرار خواهند گرفت.
مثال کاربردی 1 -که قبلاً کد نویسی کردیم- را در نظر بگیرید. این مدل کاملاً آماده ی حل و گرفتن نتایج حاصله می باشد. برای حل یک مدل چند مسیر عمومی وجود دارد که نهایتاً نتیجه ی یکسانی خواهند داشت. 1- به منوی File/Run می رویم. 2- دکمه ی F9 را فشار می دهیم. 3- در روش سوم طبق شکل زیر در قسمت Command Line دستور ساده ی gams example1 را تایپ می کنیم.
3- روش سوم که بسیار متداول تر می باشد، استفاده از دکمه ی Run که در شکل زیر نشان داده شده است می باشد.
مدل را Run کنید. پس از Run کردن مدل، بلافاصله پنجره ی پویای Proccess Window باز خواهد شد. این پنجره فرآیند کد خوانی GAMS، پیشرفت مرحله به مرحله ی حل مدل، فازهای مختلف آن، زمان شروع و زمان پایانِ حل مسئله، میزان Gap و کران های بالا و پایین، Errorهای احتمالی و اطلاعات لحظه ای این فرآیند را نشان می دهد. در این پنجره Error ها با رنگ قرمز و موقعیت ها و شرایط مهم به هنگام حل مدل (بعضا تغییر در رویه ها و نتیجه گیری های مختلف توسط GAMS و…) با رنگ آبی نشان داده می شوند. با دبل کلیک روی سطر قرمز به سطر مربوط به خطا در کد نوشته شده(یا مکان نما در فایل lst) خواهیم رفت. همچنین با دبل کلیک روی سطر آبی به زیر فرآیند مربوطه در فایل lst خواهیم رفت. توجه شود که Error ها در همین فصل به طور کامل و کاربردی، مورد بحث و گفتگو قرار خواهند گرفت و در صورت مشاهده ی هر گونه خطا در برنامه ی خود به این بخش مراجعه کنید.
به علاوه Process window دو کلید و دو گزینه نیز دارد.
Summary only : در صورت زدن تیک این گزینه ، تنها خطوط با رنگ آبی یا قرمز و خطوطی که با (—-) شروع شده اند نمایش داده می شوند. به این ترتیب تعداد خطوط نمایش داده شده، کم خواهند شد.
Update : در صورت زدن تیک این گزینه ، همزمان که فرایندِ حل پیشرفت می کند کاربر قادر خواهد بود بدون scroll کردن، آخرین گزارش اجرایی را همزمان با پیشرفت حل مدل ببیند. اگر این تیک برداشته شود، تنها با scroll کردن می توان سطور مختلف این پنجره را مشاهده نمود.
Stop : با زدن این دکمه، تمامی فرایند حل مدل قطع خواهد شد. اگر مدل کاملاً حل شده باشد، دکمه stop به open log تبدیل خواهد شد.
شایان ذکر است که همزمان با حل مدل، سه فایل دیگر همنام با فایل example1.exe ولی با فرمت های متفاوت شامل، .log و .lxi و .lst در دایرکتوری GAMS -که شامل خروجی های GAMS می باشند- تولید می شوند.
یک log file ، فایلی با فرمت (.log) می باشد (در مثال مورد بررسی ما example1.log) که بلافاصله پس از Run کردن مدل در دایرکتوری GAMS تولید می شود. در واقع یک log file همان اطلاعات موجود در process window است که به صورت ایستا برای زخیره سازی و استفاده ی مجدد تعریف شده است. این فایل با استفاده از برنامه های editor (مانند notepad) نیز قابل خواندن می باشد.
یک lxi :
یک فایل lst اصلی ترین خروجی در نرم افزار GAMS می باشد. این خروجی به طور کامل در بخش بعد تحت عنوان خروجی استاندارد تشریح خواهد شد.
خدمت عزیزانی که آموزش گام به گام را از ابتدا همراه با ما شروع نموده اند توصیه می شود که پس از مطالعه و مرور این صفحه، جهت ادامه مراحل آموزش به بخش خروجی استاندارد، در لیست مطالب مراجعه نمایند.
با تشکر
مدیریت سایت gamsbook.ir
ایمیل: Support@gamsbook.ir
شماره تماس: 3325-405—0919
سلام وقت بخیر
مدام رو وقتی در حالت قطعی حل میکنم جواب میده، غیرقطعی کردم و با رویکرد ترابی حصینی حل کردم. مقادیر همه جواب ها صفر میده، solver status Normal completion , model status integer infeasible ,object value 0 هست، خطی سازی هم داشتم، مقدار m رو هم کم کردم درست نشد، متغیر اینتیجر هم ندارم
ممنون میشم راهنمایی بفرمایید از چه طریقی میتونم متوجه مشکل بشم
با سلام
من یک مدل دارم که minlp هست و jدر جواب 2locally optimal نشان میده و دو تا از مهم ترین متغییرهای مساله رو که باید مقدار بگیرن رو داره پس از حل صفر نشون میده. وقتی داده های مساله را بزرگ در نظر گرفتم یکی از متغییرها مقدار0.5 که اعشاری هست گرفت و جواب 5locally optimal شد.داده ها رو کلی عوض کردم و محدودیت های مساله به نظرم مشکلی ندارند ولی نمیدونم چرا صفرشون می کنه. میشه لطفا راهنمایی کنین که چجوری صفر نشن؟
باتشکر
سلام وقت بخیر
ترجیحا مشکل رو در سایزهای پایین تر رفع کنید، بعد برین برای سایز بالاتر.
این مشکلات معمولا از داده ها یا مشکلات مدلسازی پیش میاد
اگر هم m بزرگ دارین، عدد خیلی بزرگی نذارین، چون اگه خیلی بزرگ باشه، محدودیت رو گمز زائد محسوب میکنه.
سلام وقت بخیر
من یک مدل خطی گمز دارم سه ساعت از ران گذشته اما هنوز جواب ها منفی هستند. راهی هست بتونم سرعت حل را افزایش بدهم
سلام و روز بخير.
منظورتون را دقيقتر ميفرماييد. يعني چي جواب ها منفي هستند!!؟
اگر در حال اجرا هست كه ديگه جوابي نداره در اين فاز كه منفي باشه؟
Best bound منفی هست و هیچ جوابی پیدا نشده،
درصد گپ هم نمایش نمیدهد
اینکه جوابی ارائه نداده و گپ نشون نمیده، یعنی اینکه هنوز جواب فیزیبل پیدا نکرده. بنابراین میشه ابعاد رو کم کنین.
مقداری هم میشه سرعت رو بیشتر کرد که معمولا کم فایده هست:
استفاده از کامپیوتر با کانفیگ بهتر
دادن جواب اولیه به مسئله
افزودن نامعادلات معتبر به مسئله
فیکس کردن تعدادی از متغیرها که از جوابشون مطمئن هستیم.
و این پست
من دقیقا کدی که در پست گفته شده را بعد از مدل می نویسم ولی ارور میده
کدام کد؟
سلام وقتتون بخیر من یک مدل برنامه ریزی سیستم تولید نوشتم داخل گمز خطا نمیده و لی خروجی ها همه صفر و خروجی داده نمیشه مشکل از چی هست ممنون می شوم راهنمایی کنید.
سلام و عرض ادب
علت اینکه به شما خروجی نمیده نداشتن لایسنس هست. که از منوی دانلود تو همین سایت میتونید لایسنس رو دانلود و نصب کنید.
بعد از ران کدن جواب میده، اما چون مخرج مربوط به b1,b2 صفر میشه، یه ارور تقسیم بر صفر خواهید داشت اونجا
سلام و ادب
فایل من در فراخوانی اکسل ارور 510 رو میده با این توضیح که چون متغیر سه بعدی هست توی اکسل ترتیب نوشتن داده ها رو هم عوض کردم ولی تأثیری نداشت و اصلا نمی دونم ربطی داره به ارور یا نه
سلام روز خوش
ارور داره میگه که مسیری که آدرس دهی کردید درست نیست. باید این فایل در دایرکتوری فعال گمز ذخیره بشه.
دایرکتوری فعال از منوی بالای گمز در مسیر file/project قابل مشاهده هست. دقت کنید در مسیری که آدرس دهی می کنید، اسم پوشه ها فارسی نباشه
سلام
من یک مدل دارم که هم روابط خطی سازی شده دارم و هم relaxation برای تبدیل یک محدودیت غیر محدب به محدب الان میخام بدونم از کجا میتونم بفهمم به جواب بهینه global رسیدم؟ ممنون از پاسخگوییتون
سلام
بحث خطی شده که نباید از لحاظ ریاضی اشتباه باشه.من فرض میکنم این بخش رو درست انجام دادید.
برای مبحث آزادسازی شده، اگر جواب نهایی عدد صحیح به شما داده، میشه گفت گلوبال هست. اگر نشده که گلوبال شدن بی معنی هست.
خیلی ممنونم
جواب نهایی کدوم قسمت باید صحیح باشه ؟
فرمودین که ریلکسیشن داشتین، خب آزاد سازی به معنی آزاد سازی متغیرهای گسسته هست، یعنی صفر و یک ها و عدد صحیح ها، پس اگر متغیرهای صفر و یک و عدد صحیح در جواب نهایی باز هم صحیح هستند، جواب نهایی درست هست
واقعیتش این سوال رو داور مقاله پرسیده که چون همزمان هم از relaxtion استفاده شده و هم خطی سازی چطور میتوان از صحت جواب ها اطمینان داشت؟
خطی سازی اگر درست انجام شده باشه هیچ تغییری در جواب ایجاد نخواهد کرد. برای آزاد سازی هم عرض کردم در کامنتهای قبلی
سلام. من یک مدل supply chain نوشتم که با استفاده از MIP حلش کنه. مدل ابتدا تک محصوله بود و پاسخ گرفتم. بعد ک مدل رو چند محصوله کردم، run کهکردم دیگ بهم جواب نداد. یعنی اصلا بخشی به نام solution report بهم نشوننمیده و در قسمت model statistics تموم میشه. خیلی ممنون میشم اگه علتش رو بهم بگید. کد رو ضمیمه کردم.
$title SUPPLYCHAIN 3
sets
i index of firms /A,B/
j index of stores /S,T/
k index of customers /1*3/
p index of products /p1,p2,p3/ ;
parameters
D(k,p) demand of customers
cap(i,p) capacity of firms
CB(k,p) cost of back order
h(k,p) cost of holding
V(j,p) capacity of stores
C(i,j,p)
Cp(j,k,p)
Cpp(i,k,p) ;
loop((i,j,k,p),
D(k,p) = round(uniform(10,20)) ;
cap(i,p) = round(uniform(20,30)) ;
CB(k,p) = round(uniform(1,10)) ;
h(k,p) = round(uniform(1,8)) ;
V(j,p) = round(uniform(20,30)) ;
C(i,j,p) = round(uniform(1,4)) ;
Cp(j,k,p) = round(uniform(1,4)) ;
Cpp(i,k,p) = round(uniform(2,8)) ;
) ;
variables
ZZ ;
integer variables
X(i,j,p)
Y(j,k,p)
Z(i,k,p)
lack(k,p)
inv(k,p) ;
equations
ObjectiveFunction
co1(k,p)
co2(i,p)
co3(j,p)
co4(j,p) ;
ObjectiveFunction .. ZZ =e= sum((i,j,p),X(i,j,p)*C(i,j,p))
+ sum((j,k,p),Y(j,k,p)*CP(j,k,p))
+ sum((i,k,p),Z(i,k,p)*CPP(i,k,p))
+ sum((k,p),lack(k,p)*CB(k,p))
+ sum((k,p),inv(k,p)*h(k,p)) ;
co1(k,p) .. sum(j,Y(j,k,p))
+ sum(i,Z(i,k,p)) + lack(k,p) =e= D(k,p) + inv(k,p);
co2(i,p) .. sum(j,X(i,j,p)) + sum(k,Z(i,k,p)) =l= cap(i,p) ;
co3(j,p) .. sum(i,X(i,j,p)) =g= sum(k,Y(j,k,p)) ;
co4(j,p) .. sum(i,X(i,j,p)) =l= V(j,p) ;
model SUPPLYCHAIN3 /all/ ;
option limrow=100 , limcol=100 ;
solve SUPPLYCHAIN3 using MIP minimizing ZZ ;
option MIP=CPlex , optca=0 , optcr=0 ;
display ZZ.l , X.l , Y.l , Z.l , inv.l , lack.l ;
سلام و ادب
لایسنس ندارید، این صفحه رو بخونید.
باسلام جواب تابع هدف در نرم افزار گمز صفر و +INF میشه ، علتش چیه؟
SOLVER STATUS 1 Normal Completion
MODEL STATUS 1 Optimal
OBJECTIVE VALUE 0.0000
سلام وقت بخیر
استاتوس ها که میگن مسئله توی حل مشکلی نداشته. اینکه صفر شده، مشکل از مدلسازی، کدنویسی یا داده ها هست. باید ببینین که آیا انتظارتون از متغیرها براورده شده یا خیر؟
سلام وقت بخیر
من یه مدل غیر خطی دارم که خطیش کردم و با CEPLEX حل میکنم مدل رو
ولی نمیدونم چرا جواب صفر به من میده گمز
از درست بودن کد مطمنم هستم چون یک سری داده که وارد کردم درست بود و به من جواب داد ولی وقتی داده های دیگ وارد میکنم بهم جواب صفر رو میده
علتش چیه
سلام
در بخش solution report مقادیر solver status و model status رو چک کنید اول و کامنت کنین.
Solver =1 noraml completion
Model=10 integer infeasible
Objective=Na
اینا رو به من نشون میده
ممکنه ایراد از روش حل باشه؟
باید از الگوریتمی چیزی استفاده کرد برای حلش؟
همونطوری که می بینید، مدل نشدنی هست.
اگر داده های کوچکتر رو تست کردید و مطمئنید همه جوره جواب میده احتمالا مشکل از اینکه متغیرهای integer شما (نه باینری) نمیتونن مقداری بیشتر از 100 بگیرن. به عبارتی دیفالت گمز اینه که اینتیجر ها حداکثر مقدار صد بگیرن. پس این فرض دیفالت رو باید تغییر بدین تا جواب بده.
دو تا راه هست که راه اولی اینه که برای متغیر Integer بیاین کران بالا در نظر بگیرین. مثلا x.up=1000 که بتونه بیشتر از صد هم عدد بگیره. یا اینکه از آپشن زیر استفاده کنید. برای نسخه های بالاتر از 24.7 به نظرم قابل استفاده هست. این اپشن محدودیت 100 رو از بین میبره.
اگر هم اینتیجر ندارید و فقط باینری دارید، یا مشکل از داده ها هست، یا مدلسازی و چاره ای جز بررسی مجدد ندارید.
بله اینتیجر دارم
X.up=1000 رو به چه شکل باید بنویسم و در کجای کد نویستی باید قرار بدم؟
عرض کردم فرضا یه متغیر داریم به اسم x حالا ممکنه متغیر شما y(i,j,k) باشه.
البته شما قبل از دستور solve فقط بنویسید
کافی هست. فقط دقت کنین تو نسخه های قدیمی جواب نمیده. نسخه های بالاتر از 24 رو استفاده کنید. 24.7 و…
بله
۳ تا متغیر اینتیجر دارم
X.up=1000 را به چه شکل و در کجای کد باید بنویسم
سلام . من یک مسئله بهینه سازی دارم که چند مسئله با تابع هدف و قیود مجزا از هم هستند (چند ناحیه مجزا) ولی تعدادی متغیر مشترک دارند و نمیتوان مجزا از هم حل کرد . چطور توی گمز پیاده سازی کنم که این متغیر ها رو بشه بین نواحی تبادل کرد. هر کاری کردم ارتباط گمز و متلب برقرار نشد که با متلب این کار کنم. ممنون میشم کمک کنید
سلام
فرضا دو مسئله P1 و P2 داریم. قراره وقتی P1 حل شد، جواب متغیر X رو به عنوان ورودی به مسئله P2 ببریم. اگه کانسپت مسئله شما این هست، کد زیر رو ببینید:
سلام به این صورت هست که مثلا اگه سه مسئله داریم به اسم p1 ,p2,p3 میخوام اول هر سه مسئله p1 ,p2,p3 حل بشن و بعد اطلاعاتی بینشون تبادل بشه و بعد دوباره همه p1 ,p2,p3 یکبار دیگه حل بشن و این تکرار حل ها تا رسیدن به یک شرط همگرایی ادامه پیدا کنه.
الان به نظر شما بهترین حالت پیاده سازی چی هست .
1 – همه p1 ,p2,p3 توی یک فایل گمز نوشته بشن؟
2- هر کدام از p1 ,p2,p3 جدا یک فایل گمز بشه و بعد با لینک به متلب کار تبادل انجام بشه
3- هر کدام از p1 ,p2,p3 جدا یک فایل گمز بشه و بعد با لینک به اکسل کار تبادل انجام بشه
4- راه دیگه اگه هست.
ممنون میشم کمک کنید.
ببینید همه این راه حل هایی که گفتید ممکنه به کار شما بیاد.
من شخصا همه رو یکجا می نویسم.
سلام چرا هنگام اجراي کد متلب که ميخواد يک فايل گمز رو اجرا و نتايج رو انتقال بده متلب خطاي زير گرفته ميشه.
Number of output argument in Matlab exceed output argument specified in gams
سلام
ابعاد رو چک کنید
جواب گمز یک عدد یا نهایت یک ماتریس میشه و من این کد مینویسم تو متلب ولی ارور میده
a]=gams(‘gamsname’)]
با چه کدی اطلاعات گمز رو فراخوانی کنم پس.
از gdx استفاده کردید؟
نه از GDX استفاده نمیکنم یه فایل gams.dll کپی کردم توی محل نصب متلب و یه فایل matout.gms توی محل نصب گمز و تو متلب توی setpath محل نصب گمز اضافه کردم.
یه فیلم بود همینطور انجام داد و بعد تو متلب ران کرد جواب گرفت من همون کدها ران میکنم این خطا میده
Number of output argument in Matlab exceed output argument specified in gams
ممنون میشم اگه روش مناسب ارتباط دو نرم افزار بگید
تفاوت خاصی نمیکنه. همین روشی که شما انجام دادین رو با پارامترهای ساده تر و با ابعاد کمتر انجام بدید. به احتمال زیاد از آدرس دهی ابعاد هست.
سلام ، من قبلا یک مدلی را در لپ تاپ حل کردم ولی متاسفانه لپ تاپ خراب شد ، الان همون مدل با همان پارامتر ها را در سیستم دیگه ای نوشتم ولی نرم افزار گمز جواب متفاوتی بهم میده! لطفا راهنمایی کنید ایراد کار کجاست ؟
سلام
تفاوت جواب ها در چی هست؟ تابع هدف یا متغیرها؟
مسئله از چه نوع هست؟ خطی یا غیرخطی؟
زمان حل؟ دستوراتی که مروبط به گپ هست استفاده کردید؟
مدل یک مسئله مکانیابی هست ، الان مکان های متفاوتی را برای احداث تسهیلات مشخص میکنه !
سلام
شما اول باید solver status و model status رو نگاه کنید.
اگر به ترتیب normal و optimal بود این مقادیر، پس مدل شما بهینه حل شده و احتمالا با هر نسخه ای از گمز و هر سیستمی همین جواب رو خواهید گرفت. و این جوابی هست که دنبالش بودید از اول.
اگر خلاف این مقادیر رو مشاهده کردید، الزامی در برابر بودن جواب این دو لپتاپ وجود نخواهد داشت.
اگر هم جواب های بهینه هست در هر دو سیستم، مکان ها با هم تفاوت دارند ولی توابع هدف برابر هستند، باز هم مشکلی نیست، چون احتمالا مسئله شما جواب چندگانه دارد.
مدل غیر خطی و عدد صحیح مختلط هست
سلام و خسته نباشید
ببخشید من یه کد نوشتم که خروجی متغیرهام تعداد قطعه و محصول هستش که باید حتما عددصحیح باشند کلیه متغیرها رو positive تعریف کردم نه integer ران میشه ولی اعشاری خروجی میده چون سه محدودیت دارم که درصد توشون ضرب میشه مثلا 0.9 واسه همنینم جواب اعشاری میشه اما به صورت منطقی که نمی تونیم بگیم 12.2 مثلا قطعه داریم و اگر هم گرد کنیم کار اشتباهیه! حالا استاد راهی وجود داره واسش که عددصحیح بشه جواب
ممنون از شما
سلام
ببنید ما اگه گمز رو هم بذاریم کنار، منطقی نیست به متغیری که عدد صحیح میگیره بگیم باید برابر 0.5 بشی. پس شما مدلسازی رو بر اساس مفاهیم مسئله تون باید انجام بدین. اون مشکل که حل شد، بعد به گمز بدین حل کنه.
سلام وقت بخیر دلیل اینکه بالا خروجی x,zرو 0 میدهد چی میتونه باشه؟
سلام
مدل جواب بیکران (بی نهایت) میده. بنابراین مدل غلط هست و گمز جواب صفر رو بر میگردونه بهتون.
سلام برای رفع جواب بیکران گمز چیکار باید بکنیم؟
سلام
جواب بیکران دلایل مختلفی داره. بخش اصلیش مربوط به مدلسازی هست. یعنی شما باید مدلسازی منطقی داشته باشید. پس نکته اول اینکه مدل رو اصلاح کنین.
دلیل بعدی متونه سالور باشه. که کمتر این قضیه پیش میاد. اولی رو رفع کنین مشکل حل میشه.
دقت بکنین که مدلی که جواب بیکران میده، یعنی عملا نادرست هست و در دنیای واقعی جواب بکیران وجود نداره
سلام
من متغیر باینری که تعریف کردم مقدار غیر 0 و 1 گرفته.
علتش چیه؟
سلام
مسئله حل نشده. این آپشن رو قبل از دستور solve بذارین و مجددا ران کنین.
option optcr=0,optca=0;
سلام
من هم همین مشکل رو دارم و دستوراتی که فرمودید رو هم نوشتم ولی رفع نشد، از طرفی هنگام اجرا در قسمت گپ میزان گپ رو خالی نشون میده و یکهو مثلا 6 درصد نشون میده علتش چی می تونه باشه ممنون
سلام
لطفا بفرمایین که مدلتون از چه تایپی هست. Mip? minlp?؟ …
و solver status و model status رو هم چک کنید.
و اینکه زمان نرم افزار توقف چقدر بوده
سلام و خسته نباشید
ممکنه راجب absolute gap و realative gap توضیح بدید که در مدل صفر ویک ایجاد میشن
زیاد متوجه نشدم علت ایجاد این دو و تفاوتشون رو
با تشکر
با سلام عذر میخام من یه مدل MINLP دارم و دادم کدشم نوشتن و RUN هم میشه با سالور BONMIN ولی تقریبا با گذشت یک ساعت پیغام NO feastble میزنه مدل هم درسته از لحاظ ریاضی نمیدونم مشکلش چیه ؟
سلام
مدل، داده ها و کد باید بارها و بارها بررسی بشه.
بهتره یه هدف در نظر بگیرین و کم کم محدودیت بهش اضافه کنین.
برای شروع هم یه مسئله با سایز کوچکتر تست کنین
سلام ببخشید من یک مدل غیرخطی دارم
غیرخطی شدن اون ناشی از ضرب شدن یک متغیر باینری در یک متغیر مسئله مثل محصول هستش
این متغیر باینری، اجرا شدن یا نشدن یک برنامه رو بررسی می کنه
جواب بدست اومده بصورت locally optimalهستش
راه حلی برای Global کردنش وجود داره؟
سلام
خطی سازیش کنین.
اگه خطی نمیشه، از سالورهای مختلف استفاده کنید
سلام وقتتون بخیر
ممنون از سایت خوبتون
من برای پایا نامه یه مدل دو هدفه(ثروت و ریسک) دارم که با محدودیت اپسیلون حلش میکنم وقتی سالور dicopt رو در نظر میگیرم مدل خیلی سریع حل میشه solver status برابر ۱ میشه اما Model statuse برابر ۲ میشه و به عبارتی locally optimal هستش و گپ ها هم صفر هستش از طرفی همچنین پیامی هم در گمز نشون میده: the relaxed nlp gave a solution where all the integer variables have integral value. There is no need to continue the search
با سالورهای مختلفی هم که سایت بسیار خوبتون معرفی کرده بود مدلو ران کردم که با یکی دو تا از اونا مدل optimal میشد اما جوابهایی که میداد برای یکسری از تابع هدفها عددی رو بیان نمیکرد یا سالور lindo بعد از گذشت ۲ ساعت کامل اجرا نشد. سوالم این هست و ممنون میشم اگه لطف کنید و جواب بدید: اینکه نیازه وقتی با محدودیت اپسیلون و سالور dicopt مدل حل شده و در بعضی حالتها ۱۰ جواب مختلف ولی خیلی نزدیک به هم به ما داده و( دربعضی حالتها که سناریو درنظر گرفتم هر ۱۰ عدد یکی شده )model statuse اگر locally optimal بشه، یعنی اشتباهه؟ حتما باید از سالور دیگه ای استفاده کرد؟
سلام
منطقیش اینه که جواب دقیق به دست بیارین و بهینه محلی ممکنه به دردتون نخوره. باید با چند سالور انجام بدین کار رو و نهایتا جوابا رو با هم مقایسه کنین. اگه دیدین جوابا برا همه مث همه، در نتیجه جواب در واقع بهینه هست. دیکاپت بهینه محلی زیاد میده! مخصوصا اینکه اگه سایز مسئله بره بالاتر. بهتره از لیندو یا بارون یا سالورای دیگه هم تست کنین.
یه جاهایی هم ممکنه تو چند تکرار مسئله یه جواب بده. مشکلی نیست، ادامه بدین و تو گزارش دهی جواب های متفاوتی که تولید شدن رو گزارش بدید.
از optcr و optca و reslim هم استفاده کنین که خطا نزدیک به صفر بشه.
با عرض سلام، من تازه دارم با گمز آشنا میشم، دستور نیم یا نصف را در گمز چجوری باید بنویسم؟ با تشکر.
سلام
منظورتون رو متوجه نمیشم.
اگه منظورتون عدد نیم هست. 0.5
اگه یه چیزی رو میخواین نصف کنین، تقسیم بر دوش کنین. x/2
سلام اقای محمودی.من یه مدلیو نوشتم تو گمز منتاها خیلی زمان می بره.اخرشم میگه زمان تمام شده.میشه مدلمو ببینین بگین مشکلش از کجاست؟
سلام
حلش حتما زمان بر هست. یا سایز مسئله رو کم کنین. یا اینکه این کد رو که محدودیت زمان رو به ثانیه به گمز تحمیل میکنه بذارین قبل از دستور solve. اینجا من گفتم بعد از 100 هزار ثانیه متوقف شو.
سلام وقتی اصلا display را نمیاره یعنی چی؟
چجوری بفهمیم که مدل اصلا جواب نداره؟
سلام
لایسنس دارین؟
model status و solver status رو چک کردین؟
سلام.
اگر در گمز مدل رو interrupt کنم بهترین جواب شدنی تا اون لحظه رو میده. سوالم اینه آیا حد پایین برای تابع هدف (کمترین جواب ممکن) (برای توابع هدف مینیمم) رو هم میده؟
سلام
بستگی به مدل داره. mip هست؟
سلام.
من متغیرم باینری تعریف می کنم ولی خروجی به من یه عدد خیلی کوچیک نزدیک صفر میده چطور متغیرم صفر یا یکبشه
سلام
کد زیر رو قبل از دستور solve بنویسید.
سلام
ضمن تشکر
نه محدودیتی ایجاد نکردم
اصلا در زمینه زمان تنظیماتی نکردم
در تابع هدفم ضرب دو متغیر هست که یکی از متغیرها بزرگتر از صفر و عدد پیوسته هست و دیگری متغیر صفر و یک که اگه هر دو صفر و یک بودن می تونستم خطیش بکنم کمااینکه در دیگر موقعیتهایی که متغیرهای صفرویک در هم ضرب شدن از حالت غیرخطی درآوردم
اگر در این زمینه راهنمایی بفرمایید ممنون میشم
البته سعی میکنم اندازه مثال رو کوچیکترش بکنم تا یک ران بگیرم
هرچند همین مثالی که هم حل کردم خیلی اندازش بزرگ نیست
تشکر مجدد
سلام
بازم میتونید خطی کنید. فرض کنیم x پیوسته باشه و y صفر و یک. به شرح زیر میشه ضربشونو (z=xy)خطیش کرد:
که BigM یه عدد بزرگ هست. مناسب ترین عدد برای BigM بزرگترین عدد ممکن برای x هست. یعنی خیلی بزرگ نگیرینش.
سلام
جناب دگتر محمودی
من مدلم بعد از 39109 ثانیه همه مقادیر خروجی را برابر با 0 گذاشته
و خروجی به این شرح است
لطفا میشه توضیح بدهید ایراد کار کجاست
مدل بصورت MINLP هست
تا جایی که تونستم مدل را خطی کردم
فقط در تابع هدف چند تا غیر خطی دارم
تشکر فراوان
سلام
خودتون محدودش کردین به حدود 40 هزار ثانیه؟
چی باعث شده مدل غیر خطی بشه؟
با سپاس از وقت و راهنمایی خوب شما.
من reslim = 3600 گذاشتم و
Solver status = resource interrupt 3
Model status = nteger solution 8
داده و
absilute gap = 47431
relative gap = 0.085
ایا زمان و بالاتر ببرم ، امکانش هست به جواب بهینه برسم؟
سلام
بله حتما. اگه واقعا دقیق و بهینه میخواین، زمان براتون مهم نیست، reslim رو بزارین به عدد خیلی بزرگ. مثلا 200 هزار ثانیه.
با سلام. منظور از
Solver status = resource interrupt 3
Model status = nteger solution 8
چی هست؟ من هر چی زمان و بالا میبرم باز هم همین پیغام و میده
با تشکر
رمان رو بزنین رو 100 هزار ثانیه، قبلش متوقف میشه یا رو 100 هزار ثانیه؟
با سلام. بعد از اتمام زمان.
خب مسئله زمان بر هست. احتمالا باید الگوریتم های ابتکاری یا فرا ابتکاری استفاده کنین.
یه مقدار هم میتونین زمان حل رو بهبود بدین، مثلا اگه غیر خطیه خطیش کنین. مقداری مدلسازی رو بهتر کنین، شاید سرعت بیشتر شد.
با سلام.
من یه کد رو اجرا میکنم با هر بار اجرا یه خروجی میده
دستور optcr = 0 رو زدم
و خروجی absilute gap = 194402 و relative gap = 0.3504 میده
آیا جواب نهایی بهینه هست؟
سپاسگزارم
سلام
این بهینه نیست.
احیانا هزار ثانیه طول نمیکشه؟
زمان اجرا هربار حدود ۴۰ دقیقه هست. راهکاری برای بهینه کردن هست؟
سپاس
اگه خودتون به 40 دقیقه محدودش کردین که زمان رو بیشتر کنین. مسئله مقداری زمان بر هست.
سلام میخواستم ببینم ارور زیر که بعد از ران گمز می یاد و متغیر ها را
display نمی کند به چه معناست .
**** INFEASIBLE EQUATIONS …
—- eq4 =L=
eq4.. 0 =L= -1193.993 ; (LHS = 0, INFES = 1193.993 ****)
سلام
میگه مسئله شما نشدنی هست.
سلام
چراا وقتی مدلمو اجرا میکنم برای 16 واحد تصمیم گیری، جواب همرو 1 میده؟
جالبه دوگان مدلم هم مساوی با اولیه نیست. جالبه مدل نشدنی نیست.
اشکال از لایسنسه؟
ممنون میشم کمکم کنید
سلام
به نظر میاد یا مدل یا کدتون مشکل داره. غیر ممکنه همه کارا باشن.
سلام.
من مدلم را کد کرده ام و ارور های آنرا برطرف کردم اما در جواب تمام متغیر ها و تابع هدف صفر میشود. چند دفعه مدل را بررسی کردم و محدودیت هایی که ممکن بود درست نباشند را تغییر دادم ولی باز همچنان جواب ها صفر اند. به نظر شما مشکل از کجاست و چطور میتوانم حلش کنم؟
استاتوس مدل چند است ؟ نوع مدل شما چیه؟ LP, MIP, MINLP
سلام.آیا امکانش هست که بین سی شارپ و گمز توسط فایل gdx بصورت آنلاین ارتباط برقرار کرد؟ یعنی از توی برنامه تحت وب که با سی شارپ نوشته میشه میتوان دکمه ای را زد و ورودی های گمز را وراد کرد و خروجی از گمز گرفت توسط gdx? و در این حالت باید از solver خاصی استفاده کرد؟
سلام
بله امکانش هست. سالور مربوطه طبق شناخت شما از مسئله تعیین میشه. نمیشه گفت چه سالوری خوبه، چون فقط مسئله رو حل میکنه و ربطی به ارسال خروجی به سی شارب یا gdx نداره.
باسلام
ببخشید بعد از حل مدل در پنجره نتایجresultبعد از جواب اخر4تا ستاره ****نشان می دهد این4تا ستاره مفهومش چیست؟
من از گمز 25.2 با لایسنس 3 استفاده میکنم یه کد نوشتم جواب میده اما وقتی از binary variable استفاده میکنم تمام خروجی هایی که متغیر باینری داره صفر میشه،در ضمن همه solver ها فعال هستند، همين کد رو روی سیستم دیگه با گمز 24 کپی کردم جواب میده، مشکل از چی میتونه باشه؟
سلام
گزارش لاگ برای هر دو نسخه رو بفرستید.
با سلام و خسته نباشید. متاسفانه یه کد نوشتم و وقتی با سالور mip حلش میکنم عبارت integer infeasible رو بهم میده. وقتی با سالور rmip حلش میکنم جواب بهم میده اما تمامی متغیرهایinteger مسئلرو نزدیک صفر یا نزدیک صفر مثلا 5E-6 و تو این حدودا میده و خب فک میکنم جواب ها درست نیستند. لطفا راهنماییم کنیم تو این زمینه. ممنونم ازتون
سلام
با شرایط گفته شده مسئله نشدنی هست. شما باید اول فرضیات مدلتون رو مجددا چک کنین. مجددا مدل رو اصلاح و ویرایش کنین با دقت. بعد داده ها و کد رو چک کنین. بعد مدل رو با تعداد محدودیت کمتر تست کنین و هر بار رانش کنین. تا جایی که نشدنی شد باید بشینین تحلیل کنین که چرا نشدنی شده. همه این کارا رو با دثت انجام بدین موفق میشین.
یعنی فقط همین کد رو داخل برنامه بنویسم؟
سلام
به همون سوال ریپلای میکردین خب. نه یه پارامتر به نام مثلا a تعریف کنین و بعد از دستور solve این عبارت رو بنویسین.
که YourModelName اسم مدل شماست.
سلام
من میخواستم در خروجی نوع جواب بهم نشون داده بشه. یعنی بدونم جوابم شدنیه یا نشدنی یا نامحدود.
ار چه کدی باید استفاده کنم در نوشتن قسمت خروجی؟
سلام
از عبارت modelstat استفاده کنین.
در مورد سوال مربوط به global کردن جواب، optca و optcr را هم صفر کردم ولی باز هم جواب local می دهد.
اگه کلا به نتیجه نرسیدین و همش اینجوریه، گلوبال گزارش کنین. کار مرسومی هست.
سلام، من یک مدل غیر خطی نوشتم که وقتی ترتیب متغیر ها در قسمت variables را عوض می کنم جواب مسئله و مقدار تابع هدف پس از بهینه سازی عوض می شود.
مثلا در قسمت variables به جای
z
B(j)
C(j)
A(j)
R(i,j)
S(i,j);
قرار می دهم
z
C(j)
B(j)
A(j)
R(i,j)
S(i,j);
دلیل چیست؟
سلام
من به همچین چیزی برخورد نکردم تا حالا، و جالبه به نظرم. ممکنه تو عملیات شاخه زنی از ترتیبی که گفتین استفاده کنه. باید مطالعه کنم در موردش و ببخشید جوابی براتون ندارم.
خواهش می کنم، ممنون از شما
یک سوال دیگر هم داشتم
مدل غیر خطی من در زمان خیلی کوتاه در حد چند ثانیه Run میشه و من به همه متغیر ها مقدار اولیه داده ام و با همه solver ها هم امتحان کرده ام ولی در همه حالات نتیجه Locally Optimal هست، چطور می توانم به جواب global برسم؟
سلام
اگه برای همه سالورها یک جواب میده، و جوابا یکی هست، همون رو global بگیرین.
سلام و تشکر بسیار از زحمت هایی که میکشید
من یک loop نوشتم برای پیاده سازی الگوریتم بندرز و داخل اون دستور if دارم. اما اجرا که میکنم حلقه تا اول if اجرا میشه و بعد exit code 3 میده. ممنون میشم اگه کمکم بکنید. کد حلقه هم به صورت زیر هست :
سلام
مرسی. آخرش این پیام رو میده؟
“original model not solved optimality”
تشکر فراوان.
من تنها یک کد در کانال پیدا کردم اما توضیحی در موردش داده نشده بود و من هم متوجه نشدم. خیلی ممنون میشم اگر در مورد این دستورات یک توضیح بفرمایید.
تو نسخه جدید گمز، یه قابلیت nemdersstrategy گذاشتن. حالا این کد بالا میگه که از این روش برای سیمپلکس استفاده کن.
لطفا به سوال ریپلای کنین. مجددا سوال جدیدی مطرح نفرمایین. به همین گفتگو ریپلای بفرمایین.
سلام و خسته نباشید
در گمز آیا این امکان وجود داره در یک حلقه، پس از حل مسئله در هر تکرار مقدار متغیرهای دوگان متناظر با قیود مسئله را بتوان استخراج گرد تا در تکرارهای بعدی از آن ها استفاده کرد ؟
سوال دوم اینکه میشه لطف کنید و مورد امکان استفاده از تجزیه بندرز توسط Cplex توضیح بفرمایید ؟ من نحوه استفاده از دستور bendersstrategy رو متوجه نمیشم.
سلام
سوال اول: بله امکانش هست. میتونین مقدار دوگان مربوط به یه متغیر به نام x رو بعد از دستور solve به صورت xx=x.m ذخیره کنین. xx یه پارامتر میتونه باشه.
برای سوال دوم یک سری راهنمایی تو کانال تلگرام گذاشتیم میتونین استفاده کنین.
سلام. وقتتون بخیر. یه سوال داشتم. من باید مشخصات مدلم رو تو متن مقاله بذارم که چند تا متغیر پیوسته، باینری و … داره مسئله م. تو گمز تو یه قسمتی این عبارات رو پیدا کردم اما نمی دونم مفهومشون چیه. کدوم باینری، پیوسته و integer ؟ تعداد محدودیت ها کدوم قسمت نوشته شده؟
MODEL STATISTICS:
BLOCKS OF EQUATIONS 36
SINGLE EQUATIONS 125,813
BLOCKS OF VARIABLES 20
SINGLE VARIABLES 138,243
NON ZERO ELEMENTS 821,717
DISCRETE VARIABLES 5
ممنونم
سلام
تو اون پنجره کوچیکه (process wondow) نشون داده میشه. ران که زدین قبل از شروع اینا رو مینویسه. دقیق میگه چند تا متغیره و….
سلام این سوال منم داشتم ولی در قسمتی که گفتین یعنی process wondow پیدا نکردم.با چه نامی تعداد متغیر ها پیوسته، باینری و محدودیت ها در همون قسمت process wondow نشون میده .میشه دقیقا بگین کجا .ممنون میشم
سلام
اونجایی که میگه generating minlp (mip) model ، زیرش این امار میاد. به طور دقیق تر میتونین تو فایل lst قسمت model statistics این موارد رو مشاهده کنین.
سلام
من یه مدل نوشتم تووی تابع هدف قصد دارم مینیمم کنم ماکزیمم عبارت {A,0}
(البته A رو الان به صورت نماد نوشتم چون حاوی سیکما هست.)
– آیا این مدل غیر خطی است؟
– برای حل با گمز ابتدا باید مدل رو خطی کنم یا اگر خطی کنم بهتر است؟
– خطی کردن وقتی در تابع هدف مینیمم ماکزیمم دارم به چه صورت انجام می شود؟
با تشکر
من مدلمو خطی کردم.
سلام
شما یه متغیر آزاد در علامت مانند u تعریف کنین. این u از 0 و A بزرگتر هست، پس تابع هدفتون میشه z=e=u
چون u از صفر هم بزرگتره پس عبارت u.lo=0 رو باید وارد کنین.
و محدودیت زیر هم باید اضافه بشه.
سلام
من یه مدل MINLP دارم که با dicopt حلش میکنم ولی model status رو integer soultion نشون میده متاسفانه. برای رفع این مشکل چیکار کنم؟ در ضمن solver status رو normal completion نشون میده.
سلام
مقادیر opctr=0, optca=0 رو قبل از دستور solve قرار بدین و مجددا تست کنین.
اگه تغییر نکرد. ممکنه شما با دادن جواب آغازین به گمز مقداری جواب رو بهتر و یا بهینه کنین.
از سالورهای دیگه هم استفاده کنین.
opctr=0, optca=0 را قرار دادم ولی تغییر نکرد متاسفانه. بقیه ساالورها هم جواب درست رو نمیدن. baron هم نمیتونه حل کنه چون ifthen دارم تو مدلم. میشه کاریش کرد؟
برای ifthen سالور sbb هم تست کنین.
شاید استفاده از جواب اولیه بهتون کمک کنه. به متغیرهای جواب اولیه بدین. یعنی قبل از حل مدل، با ویژگی .L بهشون یه مقدار اولیه بدین. جوری که منطقی باشه.
سلام. من توی مدل روباستم با ضرایب اطمینان حساسیتی به جریمه نقض در تابع هدف ندارند . و کلا فقط جواب 0.5 یا 1 و میدند و بین این دو مقدار نمیگیرند. علتش چیه؟
سلام
این دیگه برمیگرده به ساختار مدل شما (چه درست باشه چه غلط). مجددا طبق مفاهیمی که دارین باید بررسی کنین. بنده نمیتونم کمکی بکنم.
سلام. من یه مدل tsp دارم که تغییراتی رو توش دارم و یه محدودیت تو مدلم دارم به اسم cons6. که به صورت کمتر مساوی از یه مقدار بودجه مشخصیه.می خوام بدونم چقدر از بودجه ام باقی مانده باید دوگان cons6 رو بدست بیارم آیا؟اگر جواب مثبته چطور اینکارو انجام بدم؟
دستور display cons6.m رو نوشتم ولی همش مقدارشو صفر میده. در حالی که دستی بعضی از مثالهامو بودجه مصرفیشونو حساب میکنم مقداری برام باقی می مونه….ممنون میشم کمک بفرمایید
سلام
از .slack استفاده کنین.
بینهایت ممنون از راهنماییتون
فقط یعضی وقتا M بزرگ رو تو مدل یک عدد خیلی بزرگ مثلا یک میلیارد تا بیشتر میگیرم گمز تو جواب بهینه جواب منطقی نمیده… مثلا بزرگترین زمان پردازش یک کار بر روی ماشین رو به عنوان جواب بهینه درنظر میگیره!!! ولی وقتی مثلا یک میلیون یا 100000 میگیرم جواب بهینه منطقی میده !
با سپاس
سلام
بله همچین حالتایی زیاد پیش میاد. خود این M بزرگ بحث برانگیز هست که چجوری در نظر گرفته بشه. شما سعی کنین کوچکترین مقدار ممکن رو در نظر بگیرین (جوری که مفهوم m بزرگ باقی بمونه)
اینکه دقیقا چه مقداری بگیرین که هم کچیک باشه و هم محدودیت درست باشه، بستگی به مدل شما و شناخت شما از مدل و مقادیر مختلفی که برای سمت راست و چپ به دست میاد داره. باید بیشتر روش فکر کنین. اینم در نظر داشته باشین که اینجوری زمان حل مدل شما ممکنه بیشتر هم بشه.
با سلام و ادب و تشکر فراوان از سایت مفیدتون
من مدل کارگاه باز رو تو گمز پیاده کردم با تابع هدف مینیمم کردن زمان تکمیل کار نهایی (Cmax) یا makespan و نیز با در نظرگرفتن زمان پردازش کارهای مختلف بر روی ماشین های مختلف، اما متاسفانه وقتی زمان های پردازش اعداد بزرگتری باشند ، به طوری که متغییر بهینه خروجی گمز (که همون مینیمم Cmax هستش) بیشتر از عدد 100 بشود ، گمز خروجی نمیدهد گویا گمز اتوماتیک خروجی بهینه رو ماکسیمم به عدد 100 محدود کرده!! چجوری میشه این محدودیت رو از گمز حذف کرد ؟؟
با سپاس
سلام
آپشن زیر رو قبل از دستور solve بذارین مشکلتون حل میشه.
توضیحات این آپشن رو تو کانال گذاشتیم.
کدش رو عوض کردم درست شد. ممنونم
ببخشید دوگان منظورتون چی هستش
شما نوشته بودید x.m که این مفهوم دوگان رو میرسونه
آهان متوجه شدم
کدش رو کلا عوض کردم و به جای شرط محدودیت گذاشتم و حل شد.
باز هم خیلی ممنون از سایت خوبتون و وقتی که میزارید.
بسیار عالی. خواهش میکنم و مرسی بابت فیدبک
مدل من حل شد خروجیام درست شد اما الان چک کردم و متوجه یه چیزی شدم اینکه من یه محدودیت واسه متغیر X گذاشته بودم که اگر فاصله بیشتر از یک مقداری باشه متغیر بشه صفر جوابش، اما توی جواب ،متغیر برای مقادیری که فاصلشون بیشتر از حدیه که من تعریف کردم صفر نیس بعضی جاها یک شده. به این صورت نوشتم کدشو:
binary variable x(i,j,m);
x.m(i,j,m)$(d(i,j)>35)=0;
شما چرا دوگان رو صفر گرفتین؟
شما گفتین که داده ها ممکنه مشکل داشته باشه من رفتم داده هامو عوض کردم دیدم جواب ها درست نشده ولی بهتر شده و دوباره در اون جهتی که بهتر شده بود تغییر دادم و بعد دیدم که جوابای مسئلم درست شدن کامل. مدل status ام هم به صورت زیر هستش:
**** SOLVER STATUS 1 Normal Completion
**** MODEL STATUS 8 Integer Solution
**** OBJECTIVE VALUE 950869.3099
واقعا ازتون ممنونم که راهنماییم کردین من گمز اصلا بلد نبودم با سایت شما کد کردمو مشکلاتمو برطرف کردم و بالخره حللش کردم خیلی خیلی ممنونم.
خدا رو شکر. خوشحالم اینو از شما میشنوم
خیلی ممنون از لطفتون اون دستور رو گذاشتم اما همچنان جوابای بین صفر و یک دارم و اینکه متوجه شدم محدودیت 4 ام باعث بین صفر و یک شدن جوابا میشه و همچنین تابع هدفم رو هم اون منفی بینهایت میکنه. ببخشید یک سوال دیگه هم داشتم: اینکه اگر این محدودیت باعث همچین چیزی میشه ممکنه که اشتباه کد کرده باشمو مثلا گمز نفهمیده باشدش یا اینکه ذات محدودیته اشتباهه و با مدل نمیخونه؟
سلام
اعداد 0 و 1 و اعداد خیلی خیلی نزدیک به صفر تولید میکنه؟ یا اینکه مثلا 0.4 و اینا رو؟
نوع مدل رو mip گذاشتین؟ یا rmip?
خیر گمز میفهمدش. مشکل از مدل، و یا داده هاست.
از سالورای دیگه هم کمک بگیرین.
سلام
نه نزدیک به صفر نیست مثله همون 0،4 و 0،3 و این هاست مدلم رو minlp گذاشتم و با dicopt هم حل کردم که توی سایت شما خونده بودم سالوره خوبی برای این مسائل هستش. پس احتمالا مدلم ایراد داره
خیلی ممنون از شما که پاسخگو هستین
سلام
لطفا با lindo یا baron هم حل کنین، optcr=0 هم قرار بدین، پیامای model status, solver status رو اینجا بذارین
با سلام و تشکر از سایت خوبتون
من یک مدل مکانیابی با 4 تا محدودیت دارم خروجی گمز غیر عادیه و محدودیتام اعمال نمیشه، برای اینکه ببینم ایراد از کجاست کلا محدودیت ها رو برداشتم و ران کردم اما توی خروجی، جواب همه متغیرهامو صفر داد. این غیرعادی نیست؟ امکان داره که تابع هدفم یا پارامترا یا متغیرهارو اشتباه تعریف کرده باشم ؟
سلام
مرسی
غیر عادی یعنی چی؟
محدودیت چرا اعمال نمیشه؟
و وقتی بر میدارین چه پیامی میده؟ model status, solver status و اینکه گفته نشدنیه یا نامحدود؟
غیرعادی یعنی اینکه مثلا متغیرهامو باینری تعریف کردم اما بهم بین صفر و یک میده و یا اینکه هزینه هام یا همون تابع هدفم کوچکتر از صفره در صورتی که اصن نه منهی دارم توی تابع هدف و نه پارامترهام منفیه نمیدونم از کجا منفی میکنه، محدودیت هام هم به شکل زیر هستش:
مثلا محدودیت شماره 2 که میگه مجموع x هام به ازای i و m برابر 1 باشه توی جواب اینطور نیس x رو که باینری تعریف کردم بهم بین صفر و یک میده و اینکه یه جاهایی هم که بین صفر و یک نیست مجدودیت 2 رو رعایت نمیکنه،
و وقتی که کلا محدودیت هارو برمیدارم:
اون محدود یا نامحدودی رو که پرسیدین هم نمیدونم از کجا بفهمم یعنی نمیدونم کجاشه
همه xها رو صفر میده و اینکه من توی متغیرام برای y(j) یه شرطی گذاشته بودم که مثلا برای j های 1 2 و 3 مقدار y(j) برابر با 1 باشه حالا به خاطره اون متغیرهای y ام به ازای این سه تا j برابر 1 میده، اون شرط رو برمیدارم هم اون سه تا هم صفر میشه یعنی کلا همه متغیرها صفر میشه ولی نتایج solver status و اینها همون مثله بالا میشه. منکه توی همه جملات تابع هدفم متغیرهامو دارم چطوره که متغیرها صفره ولی تابع هدفم مقدار میگیره!
ممنون از وقتی که میذارید
سلام
اینکه بین صفر ویک میده، به خاطر الگوریتم اون سالور هست. دو آپشن زیر رو به قبل از دستور solve اضافه کنین. اون مشکلش حل میشه.
اینا رو که بذارین، احتمالا مدل شما یا زمان حلش میره بالا. یا نشدنی میشه. این میشه نقطه ی شروعی برای شما. فعلا این کارو بکنین.
با سلام.
من یه مدلی رو حل کردم ولی با هر سالوری مختلفی هم که حل میکنم دوگانهای مختلفی رو نشون میده. دلیلش چی میتونه باشه؟
مربوط به لایسنسش هست آیا؟
در ضمن از دستور constraint.m برای بدست آوردن دوگان محدودیتهام استفاده میکنم
سلام
شما باید model status و solver status رو چک کنین برای مدل. اگه برای همه قطعا جواب صحیحی ارائه شده، پس جواب هدف اولیه باید با هم برابر باشه.
این حالت که شما فرمودین ممکنه پیش بیاد. هم به خاطر اینکه گمز خوب نمیتونه دوگان رو بنویسه. هم اینکه ممکنه جواب چندگانه داشته باشه مدل.
با عرض سلام
من یه برنامه تو گمز ران کردم که تو اون متغیر (FL(B,S به ازای B,S های مختلف یه سری مقادیر گرفته
حالا می خوام یه متغیر دیگه تعریف کنم که برابر با یکی از مقادیر (FL(B,S هست. یعنی می خوام این
کد رو بنویسم (C = FL(1,2. چجوری میشه این کد رو نوشت؟
سلام
همین عبارت رو به صورت محدودیت بنویسین اگه c برای شما متغیر هست. و به جای F این رو بنویسین:
البته این رو هم بگم که به روش big M خطی سازی کردمش.
سلام
بابت صبر و حوصله ایی که میکنین سپاسگذارم. یه سوالی داشتم. من به مدل خطی نوشتم که گپش به جای کم شدن زیاد میشه میشه بگید دلیلش چیه؟
سلام
مچکرم.
یعنی چی زیاد میشه؟
سلام. یعنی همگرا نمیشه . البته وقتی حجم مسئله رو که کوچک میکنم حل میکنه ولی وقتی که حالت اصلی مسئله رو میخوام حل کنه، درصد گپی که تو هر iteration نشون میده رفته رفته زیاد میشه و تو مقدار مثلا 140% میمونه
اها.
بله این پیش میاد. مربوط به سالور هست این رویه. محدودیت های زمان و منبع مثل تعداد تکرار و زمان توقف رو زیاد کنین، اگه بتونه مسئله رو حل کنه که این گپ قطعا پایین میاد. طبیعیه نگران نباشین
با عرض سلام. من مدلی رو در گمز حل کردم که جواب تابع هدف رو فقط یک میده. هرچی اعداد رو تغییر میدم و کوچیک و بزرگ میدم باز جواب یک هست. مشکل از کجاست؟
سلام
ممکنه تابع هدف خیلی به اون پارامترهایی که تغییر میدین وابسته نباشه.
ممکنه محدودیت های شما درست نباشن یا هدف. جهت تابع هدف هم باید دقت کنین. ماکس میشه یا مین. به حدود متغیرها هم دقت کنین
ببخشید من وقتی مدلو ران میکنم این پیغامو میده:
و اینکه میخواید بااین وجود ران بشه؟ منم یس رو میزنم. تابع هدف جواب میده اما وقتی که یه پارامتر با مقدار مثلا صد رو به تابع هدف در مدل اضافه میکنم و دوباره ران میکنم تابع هدف یا تغییر نمیکنه یا در حد یکی دو دهم بالا پایین میشه. این ینی جواب گمز اصلا درست نیست… مشکلش چیه؟
سلام
مطمئن بشین که مسئله با گپ صفر حل میشه. این کد رو قبل از دستور solve وارد کنین.
سلام
خیلیییییی ممنون مشکل حل شد
فقط یه سوال دیگه داشتم
اینکه من از دستور display استفاده کردم
توی جواب میزنه:
100VARIABLE z.L = 1185846.103
این صد قبل از وریبل معنیش چیه؟
مبگه تو خط 100 از دستور display استفاده کردین
خیلی خیلی ممنونم ازتون
همون کاری که گفتید رو کردم هم سالورام فول شد همه و هم اون خطا رفع شد
ممنون از وقتو حوصله ای که میزارید
خدا روشکر
خواهش میکنم.
با سلام و تشکر از سایت خوبتون
من مدلم minlp هستش که با سالور bonmin حلش کردم، تو کامنتا خوندم شما گفتین بهتره از dicopt و baron استفاده بشه اما این دو برای من demo هستن و با bonmin حل کردم، بعد از حل دو تا ارور ابی رنگ با این متن میاد:
جوابایی که داده هم غیرعادیه ، این ارور بعد از حل برای چی میاد چطور رفع کنم؟ مدلم مشکل داره یعنی؟
سلام
برای اینکه سالورهاتون full بشن این تاپیک رو بخونین.
خطای تقصیم بر صفر در گمز تو مدلهای غیر خطی پیش میاد. این خطا میگه که شما متغیری رو گذاشتین تو مخرج که ممکنه صفر هم بشه. پس ارور میده یهو. میتونین به مخرج یه عدد خیلی کوچیک مثل 0.00001 اضافه کنین و این مشکل رفع میشه.
والا دقیقا همونطوری نوشتم که شما فرمودی منتها ارور میده
و 2-3 خطا در ادامه که احتمالا بخاطر همین دوتا ارور باشه…
ببینید من میخوام علاوه بر اینکه تابع هدفم ماکزیمم سازی میشه، متغیر تصمیمم که سرعت (سرعتی که وسایل نقلیه بین دو گره حرکت میکنند) هستش optimize بشود. حالا ممکنه این optimization سرعت باتوجه به داده های ورودی مدل حداکثر و یا حداقل شود. ضمن اینکه برای سرعت کران بالا و پایین منظور کرده ام.
سوال دیگه اینکه آیا میشه قسمت سوم کدی که گفتین رو اینجوری نوشت:
بجای maximizing از کلمه optimizing استفاده کنم، گمز میشناسه?
سلام
لطفا به همون سوال و جوابی که داشتیم ریپلای کنین فقط.
این دو تا ارور خیلی واظح گفتن که تابع هدف باید متغیر آزاد تعریف بشه. variable or free variable
سوال دوم: اینجوری مدل دو هدفه میشه و باید از روشهای چند هدفه استفاده کنین. مثلا روشهای وزنی یا روش های پارتویی مثل eps constraint. باید در موردشون مطالعه کنید.
سوال سوم: خیر.
سلام
error 328: wrong suffix on equation assignment–allowable are: l, m, lo, up
در ادامه خطاهای دیگری هم بدنبال داره
سلام
ویژگی اشتباهی رو از محدودیت درخواست کردین. مثلا بیاد بنویسین objective.l یا objective.scale چی نوشتین؟
سلام مجدد. باز هم ممنون بابت وقتی که میگذارید.
راستش با یکی از سالورها جواب گرفتم بالاخره (مدلم MINLP هستش، ولی بعنوان مثال با خیلی از سالورها از جمله بارون جواب نمی گیرم دلیلشم نفهیمیدم).
جدا از ضعف سالور، آیا ممکنه با یه سالور جواب گرفت در حالیکه بقول شما مدل سازی یا کدنویسی اون اشکال داره؟
یه سوال دیگه اینکه انگار یکی از متغیرهای اصلیم، نسبت به یه پارامتر تعیین کننده اصلا حساس نیست. در واقع هر چقدر که پارامتره رو کم و زیادش میکنم، متغیر تصمیممم تغییری نمیکنه!
میشه تو بخش solve یا display بگیم که مثلا فلان متغیر رو واسم بهینه اش کن (سوا از دستور ماکزیمم سازی و مینیمم سازی خود تابع هدف)؟ اگه جواب مثبته، چطور میشه اینکارو کرد.
سلام
خواهش میکنم.
دلیل نمیخواد. سالورا هر کدوم از یه رویه ای تبعیت می کنن که به جواب برسن. حالا یه سری میرسن. یه سری نه. مطمئن هم بشین که واقعا جواب مناسبی رو بهتون داده.
بله ممکنه مشکل از کد نویسی هم باشه ولی یه سالور جواب بده. شما اول مدل، بعد داده ها و بعد کد نویسی رو کاملا دقیق چک کنین.
اینکه حساس نیست چیز عجیبی نیست در کل. ولی اگه از لحاظ منطقی انتظار دارین که حساس باشه. باید مجددا مدل و داده ها رو چک کنین!
برا اینکه بگین اول با هدف obj بیا مدل رو solve کن. بعدش بیا تابع هدف obj رو فیکس کن. بعد بیا اون متغیری که من میگم رو هم بزرگش کن. میشه. اینجوری:
کدی که گفتین قسمت obj.fx=obj.l اش خطا میده عزیز
چه اروری؟
سلام آقای محمودی
من یه مدلی دارم حل که میکنم با گمز همه متغیرها رو جواب صفر میده!
مشکل از کجا می تونه باشه؟
سلام
چند تا دلیل داره:
1- ممکنه واقعا جواب بهینه ش همین باشه.
2- ممکنه نشدنی باشه با این شرایط و باید چک کنین که توی پنجره ی process window چیزی در مورد نشدنی بودن مدل گفته یانه. این نشدنی بودن ممکنه به چهار دلیل باشه. داده نا مناسب. ضعف سالور. اشتباه بودن مدل سازی. اشتباه بودن کد نویسی.
3- ممکنه لایسنس نداشته باشین. برا لایسنس برید تو بخش دانلود نرم افزار گمز همین سایت. راهنمایی کردیم اونجا.
همه موارد رو باید چک کنید.
با سلام و ضمن تشکر از سایت خوبتون.
من مدلی در گمز پیاده کردم و Option reslim=3600; قرار دادم. خروجی زیر رو در بخش Solution Report گرفتم:
MIP status(107): time limit exceeded
Cplex Time: 3601.25sec (det. 335583.58 ticks)
Fixing integer variables, and solving final LP…
Fixed MIP status(1): optimal
Cplex Time: 0.14sec (det. 22.24 ticks)
Resource limit exceeded.
این خروجی دقیقا بعد از 3600 ثانیه به دست اومده. الان یعنی به جواب بهینه رسیده؟ یا یکی از جوابهای موجه رو گزارش میکنه؟
و اینکه من بر اساس مطالبی که در سایت خوندم برای تعیین زمان اجرای مدل عبارت display Untitled_1.resusd; رو اضافه کردم. با اینکه پس از یک ساعت نرم افزار خروجی رو به من داده ولی به ازای display Untitled_1.resusd; خروجی زیر رو گرفتم:
—- 379 MODEL Untitled_1.ResUsd = 3601.688
EXECUTION TIME = 1.154 SECONDS 7 MB 24.8.3 r60202 WEX-WEI
یعنی مدل من در حدود 1.15 ثانیه حل شده؟!!
این در حالیه که حتی در حالت قبل هم که پیش فرض Option reslim=1000; بود نمی تونست جواب رو به دست بیاره…
ممنون میشم راهنمایی بفرمایید.
سلام
تشکر.
نه یه جواب موجه رو داره گزارش میکنه. gap رو ببینید. اونجایی که آخر تو پنجره ی process window نوشته absolute gap و relative gap. این میشه مقدار خطایی که با جواب بهینه ی احتمالی داره. نرم افزار خودش اینو حساب میکنه و گزارش میده.
برا زمان حل هم خیر! همونطور که میبینید نوشته 3601.688 این زمان نهایی حل هست. که یه ثانیه ش تقریبا برا خوندن داده ها و سایر مواردی که گمز رو اماده میکنه تا شروع به حل مدل و توقف کردن مدل هست. اون تایم آخر هم که یه ثانیه ست باید نگاه کنین کجا اینو گفته. احتمالا برای display کردن داده ها و نشون دادن solvar اینا باشه. و قطعا ربطی به زمان حل مدل نداره.
ممنونم از راهنماییتون.
الان خروجی که به من داده این هست:
MIP Solution: 725.645867 (600530 iterations, 529 nodes)
Final Solve: 725.645867 (11 iterations)
Best possible: -924.198551
Absolute gap: 1649.844418
Relative gap: 1.000000
این جواب Best possible مربوط به چی هست؟ راجع به این گپ ها توضیح میدین؟ اون Absolute gap یعنی جواب به دست اومده انقدر با جواب بهینه فاصله داره؟!
سلام
برای گپ:
گمز یا solver های مرتبط، در حل مسائل MIP دو تعریف عمده دارن. best integer و best estimate . اولی یعنی جواب بهینه مسئله و تو همه محدودیت ها صدق میکنه.
دومی به این معنیه که بهترین جوابی که میتونه بدون در نظر گرفتن محدودیت integer بودن متغیرها به دست میاد هست.
تفاوت این دو تعریف میشه absolute gap و اگه به شکل درصدی هم بیانش کنیم میشه relative gap
جهت مشاهده فرمول دقیق و محاسبات اینجا کلیک کنید.
برای اینکه الان گپ رو یک داده، این یعنی اینکه مدل فقط تونسته یه جواب شدنی برا مدل تولید کنه و تو این زمانی که دادین نتونسته مسئله اولیه رو به دوگان نزدیک کنه. پس شما باید سعی کنین که جواب رو بهترش کنین.
زمان رو ببرین بالا
مدلسازی رو بهترش کنین.
از شرط ها استفاده کنین که مقداری محدودیت ها کمتر بشه و …
برای تابع هدفتون هم (در صورتی که باید بزرگتر مساوی صفر باشه) حداقل مقدار صفر قرار بدین. z.lo=0
سلام. من مدلی در گمز نوشتم . این عبارت مربوط به تابع هدفشه که قسمت اول اون رو صفر برمیگردونه… در حالیکه n مجموعه سال هاست و مقدار گرفته
ممکنه راهنمایین کنین… واقعاً کلافه شدم … خیلی راه ها رو امتحان کردم.. نمیدونم مشکل از کجاست. CF هم یک متغیرثابته…
Cobj=e=sum(n,(CF**ord(n))*sum(s,F(s,n)*C0(s,n)))
سلام
هدف شما دو بخش داره. یکیش که عدده، اون یکی هم شامل متغیره. وقتی متغیر صفر بشه، ضربش در اولی هم منطقیه که صفر بشه. شما بگردین و تحلیل کنین خروجی رو که چرا متغیرهای موجود در تابع هدف همه صفر شدن. اینجاست که رفع مشکل شما استارت میخوره. به اینم دقت کنین که آیا مسئله جواب شدنی داره یا خیر.
سلام
هدفم استفاده از یک تابع معروف به نام تابع ضربی نش است که میخوام حاصلضرب سود 5 مزرعه باهم ماکزیمم شود.یه سوال واسم پیش اوم دوباره از شما بپرسم به علاوه سوال قبلم.
در گمز برای اینکه سود این 5 مزرعه که هرکدام یک تابع غیر خطی هستند را در تابع هدف ضرب کنم باد از دستور prod استفاده کنم؟
میشه لطفا فرم صحیح نوشتن prod را بفرمایید.همش به مشکل می خورم.دسترسی ندارم به چیزی فقط از شما میتوونم کمک بگیرم.
این فرمت درسته آیا؟
z= prod(f,benefit(f))
که تابع benefit(f)=E= sum(c,prc(f,c)*y(f,c)*Area(f,c))-sum(c,crop(f,c)*Area(f,c))-sum(c,cw(f,c)*nw(f,c)*Area(f,c))-prc*volume(f);
می باشد.
نباید در z =e=prod((f,c),benefit(f)) بنویسم؟
واقعا ممنون
سلام
ظاهرا صحیح هست.
سلام
آقای محمودی میشه لطفا بفرمایید چطور باید این شرط رو در ساختار مدلم بنویسم؟
تابع هدف من حاصلضرب مجموع سود 5 کشاورز است.برخی کشاورزها مجموع سودشان صفر می شود و همین باعث میشه کل تابع هدف صفر بشه.یه دستور می فرمایید که بنویسم و با اون به مدل بگم اگر مجموع سود یک مزرعه صفر شد در تابع هدف اون مزرعه وارد نشود.
sumation(f)=E=sum(yr,benefit(yr,f);
تابع هدف
prod(f,sumation(f))
تابع هدف بالایی است.اون شر را می فرمایید چیکار کنم؟
خیلی خیلی ممنون و متشکر
سلام
ابتدا بفرمایین که این ضرب کردن سودها معنی خاصی میده؟ درسته که اینا خوبه که بالا باشن، ولی این ضربشون چه مفهومی پشتش هست؟
سلام
خسته نباشید.ممنون از راهنمایی های خوب شما.
ببخشید اگر بخواهیم یک قید را به صورت شرطی با دستور if بنویسیم امکانش هست؟
از دستور if نمیدونم چه جوری استفاده کنم.ممنون اگر کمک کنید.
سلام
if(x<1,
y=1;
else
y=3;
);
دستور if تو معادلات equation نباید استفاده بشه.
سلام
خیلی ممنون از مطالب مفید سایت شما.
یک سوال داشتم در یک محدودیت می خوام مجموع ظرفیت های i در هر سال برابر با سهم همان سال به علاوه ی مجموع سهم باقیمانده از سال های قبل.چطوری باید متغیر ها رو اندیس بذارم.هر جور مینویسم ارور میده.
محدودیت مورد نظر:
con..SUM(i,X(yr,i))=E=UP(yr)+SUM(yr-1,(UP(yr-1)-SUM(i,X(yr-1,i))));
میشه لطفا بفرمایید درست عبارت بالارو چه جوری بنویسم؟
ممنون
سلام
مرسی و خواهش میکنم.
محدودیت رو اشتباه نوشتین.
con(yr)..SUM(i,X(yr,i))=E=UP(yr)+SUM(yrprime$(ord(yrprime) <= ord(yr) ),(UP(yr-1)-SUM(i,X(yr-1,i)))); ypprime رو باید الیاس yr کنین. مفهومش رو من کاری ندارم.
با عرض سلام
معذرت میخوام در نرم افزار گمزی که من نصب کردم بیشتر سالورها در حالت Demo هستند.میشه لطفا یه لینک معرفی کنید که لایسنسی داشته باشه که کل سالورها رو در حالت Full داشته باشه.
اگر باید تاریخ کامپیوتر هم تغییر بدم لطفا بفرمایید.
سپاس
سلام
خب مهندس یه سرچ میزدین تو همین سایت پیدا میکردن حتما.
تو بخش مطالب، یه دسته له نام دانلود و نصب گمز گذاشتیم. همون رو دنبال کنین مشکل حل میشه.
سلام
خیلی ممنون از اینکه جواب دادید.
میشه لطفا بفرمایید زمان حل را چطور افزایش بدم.
.سالورهای دیگه برای مدل غیر خطی را میشه خواهش کنم نام ببرید.
سپاسگذارم
سلام
این کد رو به قبل از دستور solve انتقال بدین و مسئله رو ران کنین. 20000 همون زمان توقف هست به ثانیه.
option reslim=20000;
سالورای زیادی هستن که برای غیر خطی میتونن مناسب باشن. مثلا بارون، لیندو، دیکاپت، اس بی بی. شما اینا رو میتونین تو بخش file/option/solvers ببینین.
سلام
معذرت میخوام من یک مدل غیر خطی بهینه سازی دارم که در گمز کدنویسی کردم و خروجی هم گرفتم ولی در status model ،حالت locally optimal به جای بهینه کلی نوشته شده.میشه لطفا راهنمایی کنید چیکار کنم تا به جواب بهیه کل برسم؟
اکتفا به همین جواب درسته یا غلط؟
با تشکر
سلام
اکتفا بهش نمیشه چیزی خواصی در موردش گفت. گپی هم که اعلام کرده مهمه.
اولا شرط زمان رو مد نظر داشته باشین شما. محدودیت زمانی شما باید بر حسب زمان حل مدل شما باشه. مثلا اگه تو هزار ثانیه متوقف شده و این پیام رو داده، زمان حل رو بیشتر کنین.
ثانیا یکی از روش هایی که از لوکال خارج میکنه مسئله رو، جواب آغازین هست. شما یه جواب آغازین به متغیرهاتون بدین. مثلا x.l=5 تا جوابای دیگه ای هم بتونه تولید کنه.
از سالورهای دیگه هم کمک بگیرین.
سلام ممنون از سایت خوبتون.
ببخشید من برای یه مسئله ای کد کوچیکی در گمز نوشتم که جواب تابع هدف رو صفر میاره نمیدونم مشکلش چیه. من کد گمز و صورت مدل رو ایمیل کردم براتون اگر ممکنه راهنمایی بفرمایید ممنون میشم
سلام
علت نشدنی بودن معمولا ایناست:
1- ساختار مدل اشتباه باشه و مدل نویسی مشکل داشته باشه. پس مدل رو با مقالات پایه مقایسه کنین و بیشتر روش فکر کنین. دستورات شرطی خیلی ساده هم روی جواب تاثیر داره. کم کم محدودیت ها رو مدل اضافه کنین و پیدا کنین که کدوم محدودیتا به هم تناقض دارن. تحلیل کنین.
2- داده هایی که مدل داده شده مناسب نباشه. بهتره با یه مثال ساده شروع کنین کار رو.
سلام و خسته نباشید.
اگر در خروجی برای یک متغیر در بخش marginal عددی به غیر از صفر باشه چه معنایی داره؟؟
سلام
مارجینال نشون دهنده مقدار دوگان هست.
پس مارجینال یک متغیر یعنی مقدار متغیر کمکی دوگان متناظر، و مارجینال یک محدودیت یعنی مقدار متغیر دوگان نظیر محدودیت. مفاهیمی مانند ارزش محدودیت، قیمت سایه ای و به طور کلی مقایسهی دوگان و اولیه و همچنین شرایط مکمل زائد رو مرور بکنین. تحلیلش آسون تر میشه براتون.
اولین تحلیلی که میشه از غیر صفر بودن مارجینال یک متغیر کرد اینه که خود متغیر مقدار بهینه ش صفر شده.
سلام. من برنامه ای رو ران میکنم و برای بعضی مساله های نمونه ارور exit code =3میده. می تونید راهنمایی کنید؟ ممنون
سلام
موارد زیادی میتونه باعث بوجود اومدن این ارور بشه…
با سلام و خسته نباشید.
من یک مدل گمز دارم که وقتی اجرا میکنم در قسمت خروجی میگه جواب بهینه است اما یک مقدار گپ هم نشون میده!!!! زمان حل رو زیاد کردم و تا یک ساعت رسوندم اما هنوز جوابی که نشون میده گپ داره. مساله هم زیاد بزرگ نیست.
ایراد از چیه؟ آیا مدل ریاضی هم ممکن است ایراد داشته باشد؟
سلام
دستور زیر رو به قبل از دستور solve انتقال بدین.
Option optcr=0;
option mip=cplex;
option reslim=3600;
option threads=0;
option optca=0,optcr=0;
solve integration using MIP minimizing zz;
اینا رو آخر برنامه نوشتم
ی سوال دیگه هم داشتم. چه دستوری باید بدم که گمز تمام پارامترهایی که تولید کرده رو توی خروجیها بنویسه؟
سلام
از display استفاده کنین. مثلا display a
پس یا زمان حل بالایی می طلبه، یا اینکه اون مقدار گپی که دیدین خیلی کوچیک هست و قابل چشم پوشی. مثلا بعضی از سالور ها گپی معادل ده به توان منفی 19 میدن.
سلام ببخشید من در اجرای کد به مشکل برخوردم اگه کمکم کنید ممنون میشم وقتی کد ران میگیرم بعد ۶ساعت با error reading listingمواجه میشم فکر کنم به دلیل حجم بالا خروجی ظاهر نمیشه چجوری میتونم این مشکل حل کنم ؟
سلام
این پست رو بخونید.
relative gap رو میده 0.6.
زیاده
اگه پارامترم اندیس داشت باید چی بزنم؟
هیچی. فقط اسم رو بذارین. بدون اندیس
با سلام خدمت شما.ممنون از سایت مفیدتون
من یک مسأله minlp نسبتا در ابعاد بزرگ دارم که توابع مثلثاتی توش هست و از dicopt استفاده کردهام. وقتی برنامه را اجرا میکنم اول infeasibility میاره بعد نیم ساعتی objective را نشان میدهد و بعد این پیامoptimal solution convergence too slow و میگه که تغییرات تابع هدف برای چند تکرار خیلی کم بوده و بعد احساس میکنم برنامه واگرا میشه.
خواستم ببینم آیا دستوری هست که اگه تابع هدف برای چند تکرار یک مقدار داشت، برنامه باز ادامه بده و اون پیامی که گفتم را نیاره.
سلام
مرسی و خواهش میکنم.
بله همچین دستوری وجود داره. شما باید از optionی به نام continue استفاده کنین که مقدارش صفر باید باشه. کد زیر رو بین دستور Model و solve کپی کنین. yourmodelname هم اسم مدل شماست.
$onecho > Dicopt.opt
continue 0
$offecho
Your_mode_name.optfile=1;
سلام می بخشید من یه مدل LP-METRIC دارم وقتی تابع z اصلی که ترکیب 4تا هدفه را مینویسم ارور میده
Model Assemble /all/ ;
Solve Assemble using nlp minimizing f1 ;
Solve Assemble using nlp maximizing f2 ;
Solve Assemble using nlp minimizing f3 ;
Solve Assemble using nlp maximizing f4 ;
Solve Assemble using nlp minimizing Z ;
objective..z=e=(w1*((f1-z1)/z1)**(p)+w2*((z2 -f2)/z2 )**(p) +w3*((f3- z3 )/z3 )**(p)+w4*((z4 – f4 )/ z4 )**(p))**(1/p)
— objective =E=
objective.. (0)*f1 + (0)*f2 + (0)*f3 + (0)*f4 + z =E= 0 ; (LHS = UNDF)
سلام
این روش سوال پرسیدن نیست. شما ارور رو باید بفرستین. ضمن اینکه تو مخرج ها معمولا ماکسیمم f رو مینتویسن. مثلا میزنن f1max-z1/(f1max-f1min)
مدل رو براتون فرستادم.
منظور از عبارات Best possible، Absolute gap، MIP Solution، ،Relative gap، Final Solve چیه؟
مدل من یه مدل خطی هست و انتظار دارم جواب بهینه دقیق به دست بیارم. چرااین اتفاق نمی افته؟
سلام این عباراتو می تونی ترجمه کنی و معنی شون را متوجه شی. مدلتو برای سایت ایمیل کن تا مشکلشو بررسی کنیم
سلام. وقت بخیر
از کجا باید بدونم گمز بعد از اجرا و متوقف شدن جواب بهینه دقیق رو میده یا نه؟؟
سلام
یک راهش نزدیک شدن گپ به صفر هست. باید گپ مدلتو در اجراها ببینی
سلام و خسته نباشید. ممکنه ببینین سوال من راه حلش چیه؟
من یک مساله نمونه با ابعاد بزرگ رو می خوام با بارون حل کنم. تو نمونه های کوچیک حواب می ده ولی در حالت بزرگ، وقتی reslim رو مثلا 7000 میزارم روی حدود یکساعت نرم افزار خود به خود قطع میشه و پیام stop workingمیده. برای چک کردن قدرت کامپیوتر مدل رو خطی و ساده تر کردم و با سیپلکس حل کردم تا حدود سه ساعت هم مشکلی پیش نیومد. به نطرتون چه باید کرد؟
سلام
اروری که داد ارور گمز بود یا از این خطاهایی که ویندوز میده رو داده بود؟
بله این مشکل پیش میاد بعضی وقتا. پیشنهاد من اینه که از لیندو استفاده کنین. تاپیک زیر رو بخونین حتما
دانلود گمز به همراه لایسنس و راهنمای نصب
البته یه پیشنهاد دیگه هم اینه که روی آیکون (یا شورتکات یا جایی که نصب شده یا تو منوی start) گمز کلیک راست کرده و properties رو بزنین. بعد compatibility رو بزنین، بعد تیک run this program رو بزنین، و گزینه ی windows xp (service pack 2) رو انتخاب کنین. شاید درست شد. و اینکه اگه سیستم عامل شما ویندوز نیست من پیشنهادی ندارم
خیلی متشکرم از راهنماییتون. ارور ویندوزی بود.
با اون چیزی که گفتم رفع شد یا سالور رو عوض کردین؟
متاسفانه هنوز حل نشده . از سالور دیگه ای به جز لیندو استفاده کردم و روی مدل باز کار کردم. ولی بازهم روی حدود 3 ساعت نتونست جواب پیدا کنه و ارور متوقف شدن نرم افزار اومد (پنجره … has stop working ) و بعد در process window ذکر شد که جوابی پیدا نشد.سیستم عامل هم ویستا است. آیا به نظرتون لیندو می تونه کاری که بارون نتونست رو انجام بده؟
سلام
ممکنه بتونه. از سالورهای دیفالت مث دیکاپت و کوناپت هم استفاده کنین. شاید شد.
اگه باز موفق نشدین، بهترین کار اینه که مدل رو خطی کنین. البته اگه قابلیت خطی سازی در مدل وجود داره
سلام. خیلی خیلی ممنون از راهنماییتون. لیندو تو دو ساعت حلش کرد. خدا خیرتون بده.
خواهش میکنم.
مرسی بابت فیدبک
سلام . آیا توی گمز دستوری وجود داره که زمان اجرای چند خط از برنامه رو نشون بده؟
مثلا برای ماتریس Q می خوام مقدار زیر رو حساب کنم و سپس زمان محاسبه ش رو بهم نشون بده
A1(i)=sum(j,Q(i,j));
A(i)=A1(i)+c(i);
M=smax(i,A(i));
سلام به طور واضح وجود نداره. ولی میتونین با دستورات زیر این زمان رو محاسبه کنین. عبارت YOURCODE همون کد شماست که زمانش رو میخواین محاسبه کنین. توجه کنین در صورتی که از لوپ استفاده نکنین. احتمالا جواب صفر به شما میده. چون زمان محاسبه ساده تو گمز خیلی پایینه.
scalar starttime; starttime = jnow;
YOURCODE
scalar elapsed; elapsed = (jnow - starttime)*24*3600;
display elapsed;
ممنون از پاسختون.
یه سوال دیگه
چند تا مدل نوشتم که همشون از روش LP و یکیشون از روش MIQCP حل میشه. جواب بهینه مسائل LP رو میده اما جواب بهینه مسأله MIQCP رو صفر میده. دلیلش چی هست؟
سلام
فضای شدنی همه یکی هست؟ یعنی این Lp ها و این MIQCP دقیق داده ها و محدودیت های مشترکی دارن یا خیر؟
داده های مشترکی دارند. اما محدودیت ها مشترک نیستند. امکان داره مشکل از لایسنس باشه؟
محدودیت مشترک نباشه تضمینی نیست که جوابا یکی باشه. ممکنه از لایسنس هم باشه. چند خط آخر process window رو مشاهده کنین.
سلام . وقت بخیر. دوتا سوال دارم
اول اینکه بعد از اجرای برنامه توی بخش equation وقتی می خوام یکی از توابع رو چک کنم جلوش نوشته none . دلیلش چیه و چطور می تونم تابع رو ببینم؟
دوم اینکه چطور می تونم زمان اجرای برنامه رو با دستور display نشون بدم؟؟
سلام
سوال اولو دقیقا متوجه نشدم. ولی احتمالا منظورش اینه که همین محدودیتی برقرار نمیشه.
سوال دوم: modelname.resusd
سلام
ممنون از سایت خوبتون
ببخشید چه جوری میشه وسط ران کردن گمز، برنامه را متوقف و جواب را مشاهده کرد؟
باتشکر
سلام
مرسی و خواهش میکنم.
شما وقتی مدل رو ران میکنین، یه پنجره دیگه باز میشه که اسمش process window هست. همزمان که مدلتون داره ران میشه، دو تا گزینه تو این پنجره میبینین، یکیش stop و اون یکی هم interrupt هست. interrupt رو بزنین، اگه گمز تا اون لحظه به جوابی شدنی رسیده باشه، بهترین جواب شدنی رو بهتون نشون میده. اگه نه که همه متغیرا رو صفر میده. stop که کلا همه چیو متوقف میکنه
موفق باشین
سلام
برای فراخوانی دیتاهای به شکل notepad از صفحه دسکتاپ چجوری دستور بنویسم تو گمز؟
متشکر
سلام
من با نوت پد کار نکردم واقعیتش.
با سلام
فکر کنم این راه جواب شما رو بده
Table x(J,i) “Data for Input”
$include “inPUT.txt”;
باید اسم فایل داده شما input باشه .ابتدا جدول رو تعریف کنین بعد از دستور $include استفاده کنین
با عرض سلام و تشکر
زمانی که برای زمان اجرا از دستور reslim استفاده میکنیم، اگر زمان رسیدن به جواب بهینه کمتر از زمانی است که ما نوشتیم چگونه میتوان به زمانی که جواب مدل به بهینه خود رسیده است را بیابیم?
باتشکر
با سلام، برای تعیین تعداد اعشار در خروجی میشه کمک کنیم، از دستور options decimal=n استفاده کردم جواب نداد، میشه راهنمایی بفرمایید. ممنون
شما وقتی از دستور display استفاده کنید تاثیر آن را می بینید
decimals
با عرض سلام و تشکر
زمانی که برای زمان اجرا از دستور reslim استفاده میکنیم، اگر زمان رسیدن به جواب بهینه کمتر از زمانی است که ما نوشتیم چگونه میتوان به زمانی که جواب مدل به بهینه خود رسیده است را بیابیم.
باتشکر
سلام
وقتی گمز متوقف شد، زمانی را به شما می دهد. این زمان را در execution time می بینید.
خواهش میکنم
سلام ببخشید که مزاحم میشم. من مدلمو تو GAMS نوشتم و Run کردم. مدل به صورت MINLP هست. تو روند حل تا Iteration آخر مینویسه OPT و مقدار تابع هدف منطقی و ثابت هست اما تو آخرین تکرار مینویسه No feasible و مقدار تابع را صفر قرار میده. برای یه مثال کوچیکتر جواب داده و مدل شدنی بوده. می خواستم اگه بشه راهنماییم کنید که چرا جواب نمیده؟ و اینکه ممکنه به خاطر تعداد بالای تکرار باشه و اگه آره میشه جوری تنظیم کرد که در سطح پایین تری متوقف شه؟
زمان Run حدودا بیست دقیقه ست و Solver استفاده شده Bonmin هست
سلام
این جوابی که داده به خاطر نشدنی بودن مسئله شما هست احتمالا. مدل رو بررسی مجدد کنید.
بله میشه حتی زمان رو gap رو محدود کرد.
واسه شرط توقف زمانی از دستور reslim
و برای توقف از نظر gap: از دستور optcr استفاده کنین.
مثال:
option reslim=3600;
option optcr=0;
من توصیه م انه که از baron هم استفاده کنین.