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 تحلیل حساسیت مثال فوق: