Transcript Lingo
به نام خدا
آشنایی با نرم افزار لینگو
Lingo software
تقی عرب لو
معرفی نرم افزار لینگو
oمقدمه
oنرم افزارهای مشابه
oویژگی های لینگو
oمقدمه :
بسته های نرم افزاری لیندو و لینگو توسط شرکت لیندو سیستمز برای حل مسائل بهینه سازی در
دانشگاه ،صنعت و تجارت ،طراحی گردیده است .لینگو ابزاری ساده برای بهره گیری از قدرت
برنامه ریزی خطی و غیر خطی در فرموله کردن مسائل خیلی بزرگ به صورت مختصر و تجزیه
و تحلیل آنهاست.
oنرم افزارهای مشابه :
امروزه بسیاری از مدل های بهینه سازی تحقیق در عملیات اعم از مدل های خطی ،غیر
خطی و یا عدد صحیح به مدد نرم افزار های کامپیوتری به سادگی قابل تجزیه و تحلیل
می باشند .در این میان می توان از نرم افزارهایی چون ،LINDO ،GINO ،GAMS
TORA ،QSB ،LINGOنام برد.
LINGOبعد از GAMSقوی ترین نرم افزار تحقیق در عملیات می باشد .از جمله
برتری های LINGOنسبت به LINDOیا ، GAMSقدرت آن در مدل سازی تمام
مسائلی است که توسط LINDOمدل شده اند ،بدون اینکه نیازی به تعیین نوع مدل توسط
کاربر باشد ،درحالی که LINDOیا GAMSچنین قابلیتی را دارا نمی باشد .یکی دیگر
از قابلیت های مهم LINGOبرخورداری از Helpی بسیار قوی ،ساده و کامل می
باشد .به گونهای که با استفاده از Helpآن می توان تا حد زیادی بر این نرم افزار مسلط
شد .آخرین نسخه این نرم افزار نسخه 12بوده ولی نسخه 11آن رایج تر است.
oویژگی های بارز :
(1قابلیت مدل سازی بصورت کارا و صحیح؛
(2قابلیت باالی تحلیل مدل؛
(3دارا بودن توابع مختلف ریاضی ،آماری و احتمالی؛
(4قابلیت خواندن اطالعات از Fileها و Worksheetهای دیگر؛
(5کار کردن در محیط .Windows
(6و همچنین قادر به حل مسائل مختلف بهینه سازی از جمله :
برنامه های خطی ،کوآدراتیک ،خطی عدد صحیح ،کوآدراتیک عدد صحیح ،عدد صحیح
خطی خالص ،عدد صحیح کوآدراتیک خالص ،غیر خطی ،غیر خطی عدد صحیح ،غیر
خطی عدد صحیح خالص.
اصول اولیه در لینگو :
برای حل مسائل در لینگو که بسیار مشابه لیندو است ،می توان مسائل را به دو روش از
طریق صفحه کلید ( ارتباط دو طرفه با کاربر ) و یا با استفاده از فایلهایی که در جای دیگر تولید
شده اند ( که این فایلها یا خود شامل دستورات هستند و یا به عنوان بخشی از یک برنامه جامع ،
دارای کدهای سفارشی و کتابخانه های بهینه سازی لینگو هستند ) ،وارد کامپیوتر کرد .در اینجا
به روش اول ،یعنی ارتباط دو طرفه با کاربر متمرکز می شویم.
وارد کردن یک مدل در نسخه تحت ویندوز لینگو ،شبیه تایپ کردن در یک محیط پردازشگر
متنی تحت ویندوز است ؛ چون وقتی در یک مدل داده تایپ می کنید ،تقریبا باید آنچه را که به
صورت دستی نوشته اید ،وارد مدل کنید .کاربر می تواند اطالعات ورودی خود را در پنجره ی
داخلی که ابتدا تحت عنوان Lingo Modelاست ،وارد کند .همچنین ،لینگو شامل دستورات
ابتدایی ویرایش برای بریدن ،کپی کردن و چسباندن یک متن است .این ابزار ها و سایر ویژگی
ها ،در منوی فرمانها موجود است که در ادامه مورد بررسی قرار می گیرد.
لینگو نیازمند تابع هدف ،یک یا چند متغیر و یک یا چند محدودیت است .که بر خالف لیندو،
محدودیت های لینگو بعد از عبارات خاص از قبیل Subject toیا Such thatنمی آید.
در لینگو هر عبارت با یک “ ; “ پایان میابد؛
هر گاه بخواهیم یک عبارت توضیحی به متن برنامه بیافزاییم کافیست در ابتدای عبارت از
عالمت تعجب( ! ) استفاده کنیم .این توضیحات نیز به “ ; “ ختم می شوند .کلیه عبارات متنی
که مابین ( ! ) و “ ; “ نوشته می شوند از سوی لینگو نادیده گرفته می شوند؛
لینگو به بزرگ یا کوچک بودن حروف حساس نیست ؛
تابع هدف بسته به اینکه به صورت حداکثر سازی یا حداقل سازی باشد ،به شکل
”…= “Maxیا ”…= “Minنوشته می شود.
در آغاز نوشتن هر مدل ،باید از دستور ” “Model:استفاده کرد .سپس کلیه ارکان مدل
شامل تعریف مجموعه ها ،ورود داده ها ،تابع هدف و محدودیت ها ،نوشته خواهد شد و مدل
با دستور ” “Endبه پایان میرسد .دو دستور ” “Model:و ” “Endنیازی به “ ; “ ندارند.
می توانیم دو خط برنامه لینگو را در یک خط بیاوریم و یا یک خط آن را در دو سطر
بیاوریم:
Max=100*standard
;+150*turbo
یا
;Standard<=100;turbo<=120
حتی می توانبم توضیحات را در وسط محدودیت ها بیاوریم:
;X=Y+!Number of products;Q+2*C
( معادل X=Y+Q+2*Cاست )
عملگرهای ریاضی حتما فراموش نشود؛ ( مخصوصا عملگر ضرب “ * “ )
2x+3y<=25
(اشتباه)
2*x+3*y<=25
(درست)
اسامی متغیرها حتما با یک حرف شروع می شوند .بعد از آن می توان حرف ،رقم یا
زیرخط ( _ ) استفاده کرد .اسم متغیرها نمی تواند بیشتر از 32کاراکتر باشد.
استفاده از فاصله “ “ در اسم متغیر ها ممنوع است.
اگر بخواهیم به محدودیت اسمی اختصاص دهیم در ابتدای محدودیت اسم آن را در داخل
عالمت کروشه می آوریم و به صورت مقابل می نویسیم[ :اسم محدودیت]
Help لینگو یک راهنمای بسیار خوب برای استفاده بهتر از نرم افزار است.
هنگام حل مدل اگر ایرادی در آن وجود داشته باشد ،نرم افزار پیغام خطا داده و مکان نما
به اول سطری می رود که به نظر لینگو این خطا از آنجا ناشی شده است.
ممکن است در بعضی مواقع با وجود آنکه فکر می کنید مدلی که نوشته اید درست است؛ نرم
افزار هنگام حل آن پیغام خطا بدهد .در این مواقع یک راه ساده آن است که یک صفحه جدید
لینگو باز کرده و دستورات و عبارت هایی که در مدل نوشته اید را یکی یکی ،به صفحه
جدید کپی کرده و هربار مدل جدید را اجرا کنید .با این کار در اکثر موارد به راحتی می
توانید به اشکال برنامه پی ببرید.
نمایش
ماتریسی
صورت
ذخیرهبه
را
مدل
:Matrix
Picture
ی
جا
در
راتا
کند
می
کپی
حافظه
در
پنجرهرا
انتخابی
متن
:Copy
جای
دارد
می
نگه
حافظه
در
کرده،
را
انتخابی
متن
:Cut
ای
ه
داده
توانید
می
.
کند
می
را
فعال
پنجره
::Save
با
که
بسته
پرانتزهای
:
Match
Parenthesis
انتخابی
جای
در
را
)(clipboard
حافظه
محتوای
Paste
مرتب
ای
گونه
به
را
باز
های
تمامی
:
Tile
Windows
نده
کن
حل
به
حل
برای
را
فعال
پنجره
به
مربوط
مدل
Solve
فرستد
می
پشت
به
را
رویی
پنجره
:
Send
to
back
ای
محاوره
های
جعبه
در
کند،
می
باز
را
موجود
پرونده
:
Open
بندد
می
را
باز
های
پنجره
تمامی
:
Close
All
کند،
می
باز
را
حل
گزارش
از
هایی
گزینه
:
Solution
.
گرداند
می
را
شده
انجام
کار
آخرین
:
Undo
که
ا
ر
مختلفی
پارامترهای
تغییر
و
مشاهده
امکان
:
Option
قرار.
دهد
می
کلید)
صفحه
نشانگر
( Cursor
دادن
حرکت
جدید:
Go
to
line
شود
داده
دیگری
فرستد
می
چاپگر
به
را
فعال
پنجره
برعکس:
Print
.
دهد
می
انجام
را
Undo
عملیات
:
Redo
دهد
قرار
را
آن
دیگری
یک
یا
گزارش
پنجره
یک
،
)
مدل
یک
(
ورودی
پنجرهکند
می
پیدا
هستند،
متناظر
شده،
انتخاب
باز
پرانتزهای
نند
ک
اشغال
برنامه
پنجره
در
را
مساوی
فضای
همگی
که
کند
نیز
جستجو
موضوعی،امکان
راهنمای
:
Help
Topics
دهد
می
قرار
کند
می
ایجاد
ها
داده
کردن
وارد
برای
پنجره
:New
مختلف
انواع
میان
از
را
پرونده
توانید
می
)
dialog
box
می (
.
فرستد
می
لینگو
پنجره
در
متنی
رشته
از
قسمتی
جستجوی
:
Find
عال حل
گزارش
نظر
مورد
ظاهر
چگونگی
تعیین
امکان
که
می فکند.
فراهم
هستند،
درگیر
لینگو
از
استفاده
هنگام
در
فعال.
پنجره
دلخواه
شماره
به
ازکنید.
ذخیره
خطرا
فرمان
مختلف.
دارد
وجود
انتخاب کنید.
مکانهای
پرونده ها و از
را فراهم می کنند.
Help
مثال
شرکت داکوتا فرنیچر ،تولید کننده میز تحریر ،میز و صندلی است .تولید هر کدام از انواع
مبلمان به الوار و دو نوع نیروی کار ماهر در دو زمینه نجاری و پرداخت نیاز دارد .انواع
مبلمان به الوار و دو نوع نیروی کار ماهر در دو زمینه نجاری و پرداخت نیاز دارد .مقدار هر
یک از منابع مورد نیاز برای تولید هر یک از انواع مبلمان در جدول ذیل آمده است :
منبع
میز تحریر
میز
صندلی
الوار(فوت تخته)
8
6
1
زمان پرداخت(ساعت)
4
2
1.5
زمان تجاری(ساعت)
2
1.5
0.5
در حال حاضر 48 ،فوت تخته از الوارها 20 ،ساعت زمان پرداخت و 8ساعت زمان نجاری
موجود است .هر میز تحریر 60دالر ،میز 30دالر و صندلی 20دالر به فروش می رسد .با
فرض اینکه منابع در دسترس به تازگی تدارک دیده شده باشند ،شرکت داکوتا می خواهد کل سود
خود را به حداکثر برساند.
متغیر های تصمیم بصورت ذیل تعریف شده اند :
: Deskتعداد میز تحریرهای تولید شده
: Tableتعداد میزهای تولید شده
: Chairتعداد صندلی های تولید شده
شرکت داکوتا به حل مدل خطی زیر نیاز دارد:
Max z = 60 Desk + 30 Table + 20 Chair
s.t
(محدیدیت الوار) 8 Desk + 6 Table + Chair <= 48
(محدودیت پرداخت) 4 Desk + 2 Table + 1.5 Chair <= 20
(محدودیت نجاری) 2 Desk + 1.5 Table + 0.5 Chair <= 8
(محدودیت تقاضای میز) Table <= 5
Desk, Table, Chair >= 0
: وارد می کنیمLingo model مدل باال را به صورت زیر در پنجره
Model:
Max=60*Desk+30*Table+20*Chair;
[Lumber]8*Desk+6*Table+Chair<=48;
[Polish]4*Desk+2*Table+1.5Chair<=20;
[Commercial]2*Desk+1.5*Table+0.5*Chair<=8;
[Request]Table<=5;
End
:تصویر مدل باال در برنامه
جواب مساله فوق در برنامه لینگو به صورت زیر می باشد:
تحلیل جواب بدست آمده:
Objective value: 280.0000
مشخص می کند که مقدار بهینه تابع هدف 280است.
Valueمقدار متغیر در جواب بهینه مدل خطی را می دهد .بنابراین جواب بهینه داکوتا تولید 2میز
تحریر ،صفر میز ،و 8صندلی است.
Reduced Costضریب متغیر در سطر صفر جدول بهینه را می دهد (مسئله ماکزیمم سازی).
همانگونه که می دانید باید هزینه کاهش یافته هر متغیر پایه برابر صفر باشد .برای یک متغیر غیر پایه ،xjهزینه
کاهش یافته مقداری است که اگر 1 ، xjواحد اضافه شود ،به ان اندازه ،جواب بهینه کاهش می یابد
(درحالی که بقیه متغیرهای غیر پایه برابر صفر بمانند).
در خروجی لینگو برای مسئله داکوتا ،هزینه کاهش یافته میز برابر 5است .این یعنی اگر داکوتا بخواهد یک میز
تولید کند ،درامد به اندازه 5دالر کاهش خواهد یافت.
در قسمت بعدی از خروجی یا Reportمحدودیت ها را مشاهده می کنید که در مقابل ان دو
عبارت Slack or Surplusو Dual Priceمشاهده می شود :
Slack or Surplusمقدار کمبود یا اضافی (مازاد) در جواب بهینه را نشان می
دهد .بنابراین 24فوت تخته الوار و 5عدد میز به صورت مازاد وجود خواهد داشت.
Dual Priceیا قیمت سایه مقداری است که اگر سمت راست محدودیت ،یک
واحد اضافه شود ،به ان اندازه جواب بهینه ،بهبود می یابد ( با فرض اینکه این تغییرات
باعث از دست رفتن پایه بهینه فعلی نمی شوند ) .اگر بعد از یک تغییر در طرف راست
محدودیت ،پایه فعلی دیگر بهینه نماند ،قیمت های سایه محدودیت ها ممکن است تغییر
کند.
تحلیل حساسیت:
پس از حل مدل توسط Solveبا استفاده از گزینه Rangeموجود در منوی LINGOگزارش خروجی تحلیل حساسیت مدل
را مشاهده می کنیم ،در صورت مشاهده خطا وارد LINGO Optionشده و گزینه Dual Computationsاز قسمت
General Solverرا در حالت سوم قرار دهید.در این مثال تحلیل حساسیت به این گونه است:
تحلیل حساسیت نشان می دهد که ضرایب تابع تا چه میزان می توانند افزایش یا کاهش یابند بدون
اینکه پایه بهینه مسئله (مجموعه متغیرهای غیر صفر) عوض شود .تحلیل حساسیت شامل دو
بخش است ،یکی مربوط به تابع هدف و دیگری مربوط به محدودیت ها ،که در هر کدام به
تفکیک مقدار واقعی و مقادیر کاهش و افزایش قید شده است.
در پایان با استفاده از گزینه Solutionدر منوی LINGOمی توانید نمایش گرافیکی
از هر یک از متغیرهای موجود در مدل را داشته باشید.
مثال Bar Graphبرای صندلی:
مثال:2
Max z=7x1+14x2+20x3
s.t:
x1<=25
(محدودیت 1یا ) s1
x1+x2<=130
(محدودیت 2یا ) s2
(محدودیت 3یا x1+x2+3x3<=50 ) s3
7x1+14x2<=45
(محدودیت 4یا ) s4
X1,x2,x3>=0
تصویر مدل در برنامه:
جدول سیمپلکس بهینه مدل فوق:
s4
s2
s1
x3
x2
x1
s3
0
0
0
0
3.333
z
0
0
1
0
0
1
s1
0
1
0
0
0
0.5
s2
0
0
1
0
0.167
x3
0
0
0
1
0.5
x2
6.667 0.523 356.9
25
0
0.07- 126.7
0.333 0.02- 15.59
3.21
جواب مدل در برنامه لینگو:
0.07
0
مثالی دیگر برای حداقل سازی:
(محدودیت ) 1
(محدودیت ) 2
مدل در لینگو:
Min C=3x1+4x2
s.t:
x1+2x2>=14
2x1+3x2>=12
X1,x2>=0
جواب به صورت جدول سیمپلکس بهینه:
جواب در برنامه لینگو:
s2
s1
x2
x1
28-
0
2
0
1
c-
7
0
0.5-
1
0.5
x2
9
1
1.5-
0
0.5-
s2
تحلیل حساسیت مثال فوق: