خطا در نرم افزار گمز (GAMS)
حتما پیش آمده است که در هنگام پیادهسازی مدل ریاضی و اجرای آن در محیط نرم افزار گمز، به خطاهایی برخورد کرده باشید. البته جای نگرانی وجود ندارد، چرا که حرفهای ترین افراد نیز بعد از اجرای مدل ریاضی خود در نرم افزار گمز (GAMS) با احتمال بالایی با حداقل یک خطا روبرو میشوند. بنابراین برخورد با خطا در گمز امری رایج است.
پیغام خطا در گمز (GAMS) معمولاً با یک عدد به همراه توضیحی کوتاهی نمایش داده میشود. به همین منظور ممکن است در وهله اول گیج کننده به نظر برسد. ولی در صورتی که شما با کد خطا و محتوای آن آشنا شوید، برطرف کردن مشکل و اصلاح برنامه کار بسیار آسانی خواهد بود.
به همین منظور در این مقاله قصد داریم شما را با خطاهای رایج نرم افزار گمز (GAMS) و نحوه برطرف نمودن آنها آشنا کنیم. در ابتدا خطای مربوطه با کد آن توضیح داده میشود و سپس نحوه اصلاح برنامه ارائه شده است. لیست خطاها در زیر ارائه شده است و میتوانید با کلیک کردن بر روی هر کدام، توضیحات مربوطه را مشاهده نمایید.
خطای 2 در گمز (Error 2 GAMS)
متن خطای 2 در گمز به صورت زیر است:
Error 2
Identifier expected
اين خطا زماني رخ مي دهد كه درج يك متغير فراموش شده باشد. به عنوان مثال اگر در دستور Solve به متغير تعريف شده مربوط به تابع هدف اشاره نكنيد، با اين خطا مواجه خواهيد شد. بنابراین برای رفع این مشکل، دستور SOLVE خود را مرور نمایید و تمامی متغیرهای مساله را چک کنید.
خطای 8 در گمز (Error 8 GAMS)
متن این خطا به صورت زیر است:
ٍError 8
‘)’ expected
خطای 8 در گمز زمانی رخ میدهد که شما تعداد پرانتزهای مورد نیاز را رعایت نکردهاید. به عنوان مثال 3 پرانتز باز برای تعریف رابطه خود نوشتهاید ولی در انتها با 2 پرانتز بسته رابطه خود را تمام کرده اید.
برای رفع این خطا تعداد پرانتزهای باز و بسته را شمارش کرده و کمبود را اصلاح کنید.
خطای 36 در گمز (Error 36 GAMS)
متن خطای 36 در گمز به صورت زیر است:
Error 36
‘=’ or ‘..’ or ‘:=’ or ‘$=’ operator expected
خطای 36 در گمز زماني رخ مي دهد كه به عنوان مثال در تعريف معادلات شما به جاي (..) از (.) استفاده كرده باشيد. يا عبارات ‘=’ يا ‘:=’ يا ‘$=’ را فراموش كرده باشيد يا به درستي وارد نكرده باشيد. براي حل اين مشكل بررسي كنيد كه به درستي موارد ذكر شده را نوشته باشيد.
خطای 37 در گمز (Error 37 GAMS)
متن خطای 37 در گمز به صورت زیر است:
Error 37
‘=l=’ or ‘=e=’ or ‘=g=’ operator expected
خطای 37 در گمز زماني رخ مي دهد كه در تعريف معادلات از عبارات مساوي (e)، كوچكتر مساوي (l) و يا بزرگتر مساوي (g) استفاده نكرده باشيم. دقت كنيد در تعريف معادلات مربوط به تابع هدف و محدوديتها حتماً بايد عبارات ذكر شده به كار روند. مثلا اگر شما معادله مربوط به تابع هدف را به صورت z=2*x1 بيان كنيد با اين خطا مواجه خواهيد شد. شكل درست تعريف z=e=2*x1 خواهد بود.
خطای 53 در گمز (Error 53 GAMS)
متن خطای 53 در گمز به صورت زیر است:
Error 53
Endogenous $ operation not allowed
خطای 53 در گمز زماني رخ مي دهد كه شما از يك متغير در شرط خود استفاده كنيد. فرض كنيد شرط شما $ (x=50) باشد. اين خطا نشان مي دهد كه نرم افزار GAMS قابليت اجراي اين شرط را با solver مشخص شده ندارد. براي حل اين مشكل مي توانيد شرط را به شكل محدوديت بنويسيد. اين نكته را به ياد داشته باشيد كه عبارات شرطي در بسياري از مواقع نمي تواند متغير باشد.
خطای 71 در گمز (Error 71 GAMS)
متن خطای 71 در گمز به صورت زیر است:
Error 71
The symbol shown has been declared as an equation, but no symbolic equation (..) was found. Hint – look for commas in documentation text for the equations. Use quotes around the Text or eliminate the commas.
خطای 71 در گمز زماني رخ مي دهد كه به عنوان مثال شما در دستور equations نامي را تعريف كرده ايد ولي معادله مربوط به آن را با (..) تخصيص نداده ايد. در برخي مواقع كه نقطه ويرگول (;) انتهاي محدوديت ها را نيز درج نكنيد ممكن است با اين خطا مواجه شويد.
برای رفع این مشکل، ابتدا رابطه های تعریف شده را چک نمایید که به درستی روابط ریاضی مربوطه به آنها تخصیص داده شده باشد. همچنین از درج نقطه ویرگول در انتهای محدودیتها نیز مطمئن شوید.
خطای 120 در گمز (Error 120 GAMS)
متن خطای 120 در گمز به صورت زیر است:
Error 120
Unknown identifier entered as set
خطای 120 در گمز زماني رخ مي دهد كه شما از مجموعه اي استفاده نماييد كه آن را با استفاده از دستور set تعريف نكرده باشيد. مثلا با دستور set شما مجموعه i را تعريف كرده ايد. اگر براي تعريف يك پارامتر عبارت x(j) را بنويسيد، چون مجموعه j تعريف نشده است، با خطاي 120 مواجه خواهيد شد. براي حل اين مشكل مجموعه مورد نظر را با دستور set تعريف كنيد.
خطای 125 در گمز (Error 125 GAMS)
متن خطای 125 در گمز به صورت زیر است:
Error 125
Set is under control already
خطای 125 در گمز زماني رخ مي دهد كه در تعريف معادلات، يك مجموعه را همزمان به دو صورت فراخواني كنيد. فرض كنيد داريم:
supply(i).. sum((i,j),x(i,j)) =l= a(i);
در اينجا مجموعه i را دو بار فراخواني كرديم. يكبار گفته ايم كه به ازاي هر عضو i محدوديت تكرار شود و مجددا در خود معادله گفته ايم كه بر روي مجموعه i و j مجموع بگيرد كه منجر به بروز خطاي 125 مي شود.
خطای 140 در گمز (Error 140 GAMS)
متن خطای 140 در گمز به صورت زیر است:
Error 140
Unknown symbol
خطای 140 در گمز در زماني رخ مي دهد كه شما از رابطهای استفاده كرده ايد كه تعريف نشده است. فرض كنيد در تعريف معادلات با دستور equations شما نامهاي eq1 و eq2 را تعريف كرده ايد. زماني كه مي خواهيد معادله هر يك را بنويسيد اگر از نام ديگري مثلاً eq3 استفاده كنيد، به دليل تعريف نشدن eq3، با خطاي 140 مواجه خواهيد شد. حتماً چك كنيد كه عبارتي كه منجر به بروز خطاي 140 شده است را به درستي تعريف نماييد.
خطای 141 در گمز (Error 141 GAMS)
متن خطای 141 در گمز به صورت زیر است:
Error 141
Symbol declared but no values have been assigned. Check for missing data definition, assignment, data loading or implicit assignment via a solve statement.
خطای 141 در گمز مربوط به عدم تخصیص مقدار اولیه به متغیرها است. فرض کنید شما یک متغیر از نوع Scalar تعریف کرده اید و در رابطه های بعدی، از این متغیر در روابط ریاضی استفاده کردهاید. ولی مقداری برای آن در نظر نگرفتهاید. در این صورت این خطا نمایش داده میشود.
برای رفع این خطا، بررسی نمایید چه متغیری در روابط استفاده شده است، ولی مقداری برای آن در نظر گرفته نشده است. با تخصیص مقدار اولیه، این خطا برطرف خواهد شد.
خطای 143 در گمز (Error 143 GAMS)
متن خطای 143 در گمز به صورت زیر است:
Error 143
Suffix is missing
خطای 143 در گمز زماني رخ مي دهد كه شما يك پسوند را فراموش كرده باشيد. مثلا در تعريف نحوه نمايش متغيرها با دستور display فراموش كرده باشيد بعد از نام متغير از عبارات .lo و .l و … استفاده بكنيد. براي رفع اين مشكل بر روي خطا كليك كنيد تا به خطي كه پسوند نوشته نشده است هدايت شويد. با درج پسوند مربوطه، اين خطا برطرف مي شود.
خطای 148 در گمز (Error 148 GAMS)
متن خطای 148 در گمز به صورت زیر است:
Error 148
Dimension different – The symbol is referenced with more/less indices as declared
خطای 148 در گمز مربوط به رعایت نکردن ابعاد متغیرها و روابط در هنگام مدلسازی است. فرض کنید شما متغیر X را به صورت X1 و X2 و … و Xn تعریف کرده باشید. اگر شما در جای دیگر X را به صورت X12 تعریف کنید (تک بعد را به دو بعد افزایش دهید)، در این صورت با این پیغام مواجه خواهید شد. البته این خطا در حالت برعکس (کاهش ابعاد) نیز نمایش داده میشود.
بنابراین برای رفع این خطا، ابعاد (Dimension) متغیرها و روابطی که تعریف شده است را چک نمایید و اختلاف ابعاد ایجاد شده را رفع نمایید.
خطای 149 در گمز (Error 149 GAMS)
متن خطای 149 در گمز به صورت زیر است:
Error 149
Uncontrolled set entered as constant
خطای 149 در گمز هنگامي رخ مي دهد كه شما به نوع مجموعه تعريف شده و پارامترهاي تعريف شده توجه كافي نداشته باشيد. فرض كنيد دو مجموعه i و j تعريف كرده باشيد. دو پارامتر a(i) و b(j) هم تعريف شده باشد. حال اگر در معادلات از عبارت a(i,j) استفاده كنيد با خطاي 149 مواجه خواهيد شد. چرا كه از نظر نرم افزار GAMSa(i,j) تعريف نشده است.
خطای 170 در گمز (Error 170 GAMS)
متن خطای 170 در گمز به صورت زیر است:
Error 170
Domain Violation for element
خطای 170 در گمز هنگامي رخ مي دهد كه بين مجموعه اي كه با دستور set تعريف شده با قسمتهايي كه از اين مجموعه استفاده شده همخواني وجود ندارد. مثلا شما مجموعه i رو با نامهاي name1 و name2 تعريف كرديد ولي در زمان استفاده از اين مجموعه براي تعريف پارامترها، از name3 استفاده كرديد. با كليك بر روي اين خطا به خطي كه از مجموعه تخطي شده است هدايت مي شويد. براي حل اين مشكل مجموعه اي كه تعريف شده است را مجدداً بازبيني كنيد و مطمئن شويد در همه جاي مدل از مجموعه تعريف شده به درستي استفاده كرده ايد.
خطای 184 در گمز (Error 184 GAMS)
متن خطای 184 در گمز به صورت زیر است:
Error 184
Domain list redefined
خطای 184 در گمز اين خطا هنگامي رخ مي دهد كه شما به متغير را دو بار با انديس هاي متفاوت تعريف كنيد. به عنوان مثال:
Variable
x(i,j);
positive variable
x(j,t)
در اينصورت با خطاي 184 در نرم افزار GAMS مواجه مي شويد. براي رفع اين مشكل بايد متغير انديس دار را فقط به يك صورت تعريف كنيد.
خطای 194 در گمز (Error 194 GAMS)
متن خطای 194 در گمز به صورت زیر است:
Error 194
Symbol redefined – a second data statement for the same symbol or a data statement after assignment
خطای 194 در گمز زماني رخ مي دهد كه شما براي يك متغير، پارامتر و يا عدد ثابت (scalar) دو مقدار در نظر بگيريد. فرض كنيد يه عدد ثابت scalar تعريف كرده و مقدار آن را 10 قرار مي دهيد. اگر مجددا براي همين عدد ثابت مقدار 15 در نظر بگيريد با خطاي 194 مواجه خواهيد شد. براي رفع اين مشكل مطمئن شويد كه براي هر متغير و پارامتر، تنها يك مقدار تخصيص داده باشيد.
خطای 196 در گمز (Error 196 GAMS)
متن خطای 196 در گمز به صورت زیر است:
Error 196
Variable redefined with a different subtype
خطای 196 در گمز مربوط به تعريف دوگانه متغيرها است. فرض كنيد شما يكبار يك متغير را به صورت زير تعريف كرديد:
Variable
X;
بعد مجددا همين متغير را به صورتي ديگر تعريف كرديد:
Integer variable
X;
در اين صورت با خطاي 196 در نرم افزار GAMS مواجه خواهيد شد. براي حل اين مشكل بايد مطمئن شويد كه متغير را فقط به يك صورت تعريف کرده باشید.
خطای 198 در گمز (Error 198 GAMS)
متن خطای 198 در گمز به صورت زیر است:
Error 198
Set used in ‘ord’ or lag is not ordered. Hint: some of the elements of the set were used before this was initialized and the order was different from the order in this set. Try to initialize the set earlier.
خطای 198 در گمز زماني رخ مي دهد كه شما از دستور ord استفاده كرده ايد ولي در تعريف مجموعه ها ترتيب را رعايت نكرده ايد. مثلاً فرض كنيد داريم:
set a a couple of the elements /r2,r3/;
set b more elements /r1*r4/;
scalar count counter /0/;
loop(b$(ord(b) gt 3),count=count+1);
display count;
در اين مثال ما از ord(b) استفاده كرده ايم ولي در تعريف مجموعه ها مجموعه b را بعد از مجموعه a تعريف كرده ايم. در اين حالت با خطاي 198 مواجه مي شويم. براي رفع اين مشكل ترتيب تعريف مجموعه a و b را بايد جابجا كنيم. يعني ابتدا مجموعه b را تعريف كنيم و سپس مجموعه a را تعريف كنيم.
خطای 225 در گمز (Error 225 GAMS)
متن خطای 225 در گمز به صورت زیر است:
Error 225
Floating entry ignored
خطای 225 در گمز معمولا در مواقعي تعريف داده هاي ورودي به صورت table رخ مي دهد. اگر شما نظم ستوني اعداد ورودي table را رعايت نكنيد با اين خطا مواجه خواهيد شد. حتماً مطمئن شويد كه مقادير سطري و ستوني به صورت مرتب و كاملا در يك راستا قرار گرفته باشند.
شکل غلط
شکل درست
خطای 241 در گمز (Error 241 GAMS)
متن خطای 241 در گمز به صورت زیر است:
Error 241
Model has not been defined
اين خطا در مواقعي رخ مي دهد كه از دستور model به درستي استفاده نكرده باشيم. فرض كنيد داشته باشيم:
Model test;
نرم افزار به ما خطای 241 در گمز را خواهد داد. از آنجايي كه بايد تعريف كنيم كه كدام يك از معادلات تعريف شده در حل مدل دخيل باشند، بايد به عنوان مثال از /all/ استفاده كنيم. شكل درست عبارت بالا به صورت زير خواهد بود:
Model test /all/;
خطای 244 در گمز (Error 244 GAMS)
متن خطای 244 در گمز به صورت زیر است:
Error 244
Unknown or missing processor (LP, MIP, …)
خطای 244 در گمز زماني رخ مي دهد كه در دستور SOLVE شما از نام SOLVER استفاده نكرده ايد و يا به درستي تايپ نكرده ايد. فرض كنيد داشته باشيم:
solve transport using lmp minimizing z;
از آنجايي كه Solver به نام lmp وجود ندارد با خطاي 244 مواجه خواهيم بود.
خطای 256 در گمز (Error 256 GAMS)
متن خطای 256 در گمز به صورت زیر است:
Error 256
Errors in analyzing solve statement. More detail appears Below the solve statement above
خطای 256 در گمز یک خطای ثانویه است که به دنبال خطاهای قبلی ظاهر میشود. به منظور برطرف کردن این خطا، به شماره خطاهایی که بالاتر از این خطا ظاهر شدهاند مراجعه و آنها را برطرف کنید. بعد از برطرف شدن خطاهای قبلی، این خطا نیز به صورت خودکار حدف میگردد.
خطای 257 در گمز (Error 257 GAMS)
متن خطای 257 در گمز به صورت زیر است:
257 Solve statement not checked because of previous errors
خطای 257 در گمز زمانی نمایش داده میشود که خطایی در اجرای دستورات نوشته شده در گمز پیش آمده باشد و به دلیل بروز مشکل، نرم افزار از ادامه حل مدل خودداری میکند و این خطا نشان داده میشود. پس این خطا، یک خطای ثانویه است که در اثر یک خطای دیگر بروز میکند. برای رفع این خطا، به شماره خطاهایی که در بالاتر از این خطا به آن اشاره شده است رجوع کنید و آنها را رفع کنید. بعد از رفع خطاها، این خطا نیز به صورت خودکار حذف میگردد.
خطای 408 در گمز (Error 408 GAMS)
متن خطای 408 در گمز به صورت زیر است:
Error 408
Too many ),] or }
خطای 408 در گمز زمانی رخ میدهد که تعداد پرانتز ()، براکت [] و یا {} به درستی استفاده نشده اند و به عنوان تعداد پرانتزهای باز با تعداد پرانتزهای بسته برابر نباشد. برای رفع این مشکل تعداد () یا [] یا {} باز را با تعداد بسته آنها بشمارید و در صورت زیاد بودن یا کم بودن، اصلاح نمایید.
خطای 409 در گمز (Error 409 GAMS)
متن خطای 409 در گمز به صورت زیر است:
Error 409
Unrecognizable item – skip to find a new statement
Looking for a ‘;’ or a key word to get started again
توضیح: خطای 409 در گمز به دليل عدم درج نقطه ويرگول در خط مورد نظر است. با كليك كردن بر روي اين خطا به خطي كه فراموش كرديد نقطه ويرگول قرار دهيد هدايت مي شويد. با قرار دادن نقطه ويرگول در انتهاي جمله، اين خطا برطرف مي شود.
خطای 812 و 811 در گمز (Error 811 & 812 GAMS)
متن خطای 811 و 812 در گمز به صورت زیر است:
Error 811& Error 812
Direction Maximum/Minimum missing
Solve keys expected – USING MAX/MIN SCENARIO
خطاي 811 و 812 مربوط به عدم استفاده صحيح از دستور SOLVE است. اگر به شكل صحيح و استاندارد تمامي موارد مربوط به دستور solve را پياده سازي نكنيد با اين خطا مواجه خواهيد شد. تمامی اجزای دستور SOLVE را چک کنید و یا دستورات نوشته شده خود انطباق دهید.
جمع بندی
سعی کردیم در این مقاله به بررسی خطاهای رایج در هنگام اجرای مدلهای ریاضی در نرم افزار گمز (GAMS) بپردازیم. در صورتی که با خطایی مواجه شدید که در لیست خطاهای ذکر شده وجود ندارد، در قسمت نظرات با ما در میان بگذارید تا در اسرع وقت به لیست فعلی اضافه گردد.
همچنین پیشنهاد میکنیم به منظور یادگیری نرم افزار گمز (GAMS) به بخش دورههای آنلاین شرکت شبیه پردازان مراجعه نمایید.
5 دیدگاه. دیدگاه تازه ای بنویسید
سلام. من یک مدل خطی را در گمز کدنویسی کردم و با خطای 329 و 346 مواجه شدم. ممنون میشم در مورد این دو خطا هم توضیح بدهید. با تشکّر
با سلام و احترام
این خطا از نوع خطاهای ثانویه است. لطفا تمامی خطاها را بررسی کنید و در صورت وجود خطایی با کد ذکر شده در این مطلب اصلاح نمایید.
با تشکر
سلام هر برنامه از روی برنامه اجرا شده در کتاب گمز مینویسم با خطای شماره 217 و 505 مواجه میشم دلیل این خطای برای چی و چگونه باید برطرف کرد
با سلام و احترام
این خطا از نوع خطاهای ثانویه است. لطفا تمامی خطاها را بررسی کنید و در صورت وجود خطایی با کد ذکر شده در این مطلب اصلاح نمایید.
با تشکر
با سلام و تشکر
خطای864 در لیست خطاهای گمز نیست، لطفا” نوغ آن و نحوه رفع آن را اععلام فرمائید؟