SETS - Reza Samizadeh Site
Download
Report
Transcript SETS - Reza Samizadeh Site
واحد علوم وتحقيقات تهران
دانشكده مديريت واقتصاد
مديريت فن آوري اطالعات
موضوع :
تهيه كنندگاه :
نرم افزار
lingo
احمد محمدي –عليرضا روتيوند غياثوند – نقوي
بسته هاي نرم افزاري ليندو و لينگو توسط شرکت ليندو سيستمز( )1براي
حل مسائل بهينه سازي در دانشگاه ،صنعت و تجارت ،طراحي گرديده است .دو
محصول فوق همراه با کتاب تحقيق در عمليات :کاربرد ها و الگوريتم ها ( )2()1994و
کتاب مقدمه اي بر برنامه ريزي رياض ي :کاربرد ها و الگوريتم ها ( )3()1995که توسط
پروفسور واين ال .وينستون( )4نگاشته شده است ،تشريح گرديده اند.
1) Lindo Systems, Inc.
)2) Operations Research : Applications and Algorithms (1994
)3) Introduction to Mathematical Programming : Application and Algorithms (1995
4) Wayne L.Winston
2
نرم افزارهاي مشابه
امروزه بسياري از مدل هاي بهينه سازي تحقيق در عمليات اعم از مدل
هاي خطي ،غير خطي و يا عدد صحيح به مدد نرم افزارهاي کامپيوتري به
سادگي قابل تجزيه و تحليل مي باشند .در اين ميان مي توان از نرم افزارهايي
چون QSB ،LINGO ،LINDO ،GINO ،GAMSو TORAنام برد.
3
LINGOبعد از GAMSقوي ترين نرم افزار تحقيق در عمليات
مي باشد .از جمله برتري هاي لينگو نسبت به LINDOيا ، GAMS
قدرت آن در مدل سازي تمام مسائلي است که توسط ليندو مدل شده اند،
بدون اين که نيازي به تعيين نوع مدل توسط کاربر باشد ،در حالي که
LINDOيا GAMSچنين قابليتي را دارا نمي باشد .يکي ديگر از قابليت
هاي مهم لينگو برخورداري از Helpي بسيار قوي ،ساده و کامل مي باشد.
به گونه اي که با استفاده از Helpآن مي توان تا حد زيادي بر اين نرم
افزار مسلط شد .
4
تعريف اول :راهنماي PDFلينگو :
لينگو ابزاري ساده براي بهره گيري از قدرت برنامه ريزي خطي و غير
خطي در فرموله کردن مسائل خيلي بزرگ به صورت مختصر و تجزيه و
تحليل آنهاست .بهينه سازي به شما کمک مي کند تا جوابي را با بيشترين
سود ،خروجي ،يا رضايتمندي و يا جوابي با کمترين هزينه ،تلفات يا ناراحتي
بدست آوريد .اغلب اين مسائل با استفاده موثر از منابعي همچون پول،
زمان ،ماشين ،نيروي کار ،موجودي و ...در ارتباط است.
5
تعريف دوم :کتاب تحقيق در عمليات واين ال .وينستون :
لينگو يک بسته نرم افزاري با امکان برقراري ارتباط دو طرفه با کاربر است و از
آن مي توان در حل مسائل خطي ،عدد صحيح و غير خطي کمک گرفت .استفاده از
اين نرم افزار وضعيت مشابهي مانند ليندو دارد ،اما از انعطاف بيشتري در بيان مدل
برخوردار است .بر خالف ليندو ،لينگو امکان استفاده از پرانتزها و متغيرها را در
سمت راست معادله فراهم مي آورد .بنابراين ،محدوديت ها را مي توان به صورت
اوليه ،بدون نياز به تبديل آن به ساختار استاندارد (آوردن مقادير ثابت به سمت
راست) نوشت .همچنين لينگو داراي يک کتابخانه بزرگ از توابع رياض ي ،آماري و
احتمالي بوده و قدرت باالي آن در خواندن اطالعات از فايل هاي خارجي و نرم
افزارهاي صفحه گسترده است.
6
مسائل بهينه سازي اغلب به خطي و غير خطي تقسيم مي شوند ،که
اين تقسيم بندي با توجه به رابطه متغيرهاست؛ بدين معني که اگر رابطه
همه متغيرها با هم خطي باشد ،مسئله را خطي و در غير اينصورت غير
خطي مي گويند.
لينگو زباني جامع و فراگير جهت تسهيل تمام مدل هاي بهينه سازي از
مسائل تحقيق در عمليات گرفته تا اقتصاد مهندس ي ،شبيه سازي ،کنترل
کيفيت ،کنترل پروژه و کنترل موجودي مي باشد.
7
نصب نرم افزار
نصب لينگو به راحتي انجام مي گيرد و همانند بسياري از نرم
افزارهاي تحت سيستم عامل Windowsمي باشد.
تنها نکته اي که در نصب مي توان به آن اشاره کرد فضاي
مورد نياز در روي ديسک سخت مي باشد که 40MBاست .براي
دريافت نرم افزار مي توانيد به سايت لينگو مراجعه کنيد.
8
وارد کردن يک مدل در نسخه تحت ويندوز لينگو ،شبيه
تايپ کردن در يک محيط پردازشگر متني تحت ويندوز است؛
چون وقتي در يک مدل داده تايپ مي کنيد ،تقريبا بايد آنچه را که
به صورت دستي نوشته ايد ،وارد مدل کنيد .کاربر مي تواند
اطالعات ورودي خود را در پنجره ي داخلي که ابتدا تحت عنوان
Lingo Modelاست ،وارد کند .همچنين ،لينگو شامل
دستورات ابتدايي ويرايش براي بريدن ،کپي کردن و چسباندن يک
متن است .اين ابزارها و ساير ويژگي ها ،در منوي فرمان ها
موجود است که در ادامه مورد بررس ي قرار مي گيرد.
9
عناصر مورد نياز در لينگو مشابه ليندو است .لينگو نيازمند تابع هدف،
يک يا چند متغير و يک يا چند محدوديت است .بر خالف ليندو ،محدوديت
هاي لينگو بعد از عبارات خاص از قبيل SUBJECT TOيا SUCH
THATنمي آيند.
10
اصول اوليه مدل نويس ي در لينگو
در لينگو هر عبارت با يک ” ; “ پايان مي يابد؛
هرگاه بخواهيم يک عبارت توضيحي به متن برنامه بيافزاييم کافيست در ابتداي
عبارت از عالمت تعجب ( ! ) استفاده کنيم .اين توضيحات نيز به ” ; “ ختم مي
شوند؛
کليه عبارات متني که مابين ( ! ) و ” ; “ نوشته مي شوند از سوي لينگو ناديده
گرفته مي شوند؛
لينگو به بزرگ يا کوچک بودن حروف حساس نيست؛
11
مي توانيم دو خط برنامه لينگو را در يک خط بياوريم و يا يک خط آن را در دو سطر
بياوريم:
Max = 100 * Standard
;+ 150 * Turbo
يا
;Turbo <= 120; Standard <= 100
حتي مي توانيم توضيحات را در وسط محدوديت ها بياوريم:
;X = Y + !Number of Products; Q + 2 * C
( معادل X = Y + Q + 2 * Cاست )
12
عملگرهاي رياض ي حتما فراموش نشود؛ ( مخصوصا عملگر ضرب “ * “ )
(اشتباه)
2X + 3Y <= 25
( 2 * X + 3 * Y <= 25درست)
اسامي متغيرها حتما با يک حرف شروع مي شوند .بعد از آن مي توان حرف ،رقم يا
زير خط ( _ ) استفاده کرد .اسم متغيرها نمي تواند بيشتر از 32کاراکتر باشد؛
استفاده از فاصله “ “ ( فاصله ) در اسم متغير ها ممنوع است؛
13
عالئم ساده رياض ي ،توان ) ^ ( ،ضرب ) * ( ،تقسيم ) ،( /جمع ) ( +و تفريق (
) -با همين ترتيب اولويت معتبرند؛
اگر بخواهيم به محدوديت اسمي اختصاص دهيم در ابتداي محدوديت اسم آن را در
داخل عالمت کروشه مي آوريم؛ و به صورت مقابل مي نويسيم ] :اسم محدوديت[
Help لينگو يک راهنماي بسيار خوب براي استفاده بهتر از نرم افزار است .از آن بهره
بگيريد!
14
پيغام خطا
هنگام حل مدل اگر ايرادي در آن وجود داشته باشد ،نرم افزار پيغام خطا داده و مکان
نما به اول سطري مي رود که به نظر لينگو اين خطا از آنجا ناش ي شده است؛
ممکن است در بعض ي مواقع با وجود آنکه فکر مي کنيد مدلي که نوشته ايد درست
است ،نرم افزار هنگام حل آن پيغام خطا بدهد .در اين مواقع يک راه ساده آن است
که يک صفحه جديد لينگو باز کرده و دستورات و عبارت هايي که در مدل نوشته ايد را
يکي يکي ،به صفحه ي جديد کپي کرده و هر بار مدل جديد را اجرا کنيد .با اين کار در
اکثر موارد به راحتي مي توانيد به اشکال برنامه پي ببريد.
15
نرم افزار لينگو از سه بخش کلي منوها Toolbar ،و پنجره ي مدل نويس ي تشکيل
شده است.
منوهاي نرم افزار به ترتيب زير مي باشد :
File; Edit; LINGO; Window; Help
منويي که بيشتر به چشم آمده و در واقع منوي اصلي نرم افزار مي باشد منوي
LINGOست ،با ساير منوها که در نرم افزارهاي تحت سيستم عامل Windows
عموما موجود مي باشند پيشتر آشنا هستيد.
Toolbar شامل ابزارهاي ( Shortcutميانبر) موجود در منوها مي باشد.
پنجره ي مدل نويس ي محل پياده سازي مسئله ي بهينه سازي فرموله شده طبق قواعد
لينگوست.
16
Menus
Toolbar
17
پنجره ي مدل نويس ي
توسعه ي يک مدل بهينه سازي
يک شرکت کامپيوتري دو نوع کامپيوتر استاندارد و توربو توليد مي کند .سود هر کامپيوتر استاندارد براي
اين شرکت $100و هر دستگاه توربو برابر $150است .در شرکت ،خط توليد کامپيوتر استاندارد
حداکثر تا 100دستگاه در روز مي تواند توليد کند .همچنين حداکثر توان توليد خط توربو برابر 120
دستگاه در روز اعالم شده است .شرکت نيروي کار محدود 160نفر ساعت در هر روز در اختيار دارد.
کامپيوترهاي استاندارد يک ساعت نيروي کار الزم دارند در حالي که کامپيوترهاي توربو 2ساعت نيروي
کار نياز دارند .مساله اي که شرکت با آن روبروست اين است که ترکيبي از کامپيوترهاي استاندارد و
توربو را براي توليد انتخاب کند که سودش را بيشينه کند در حالي که از محدوديت هاي توان خطوط
توليد و ظرفيت نيروي کار تجاوز نکند.
18
يک مدل بهينه سازي شامل موارد زير است :
تابع هدف – فرمولي است که دقيقا آنچهه را کهه مهي خواهيهد بهينهه کنيهد ،بيهان مهي
کند .در مدل هاي مربوط به کسب و کار اين يک تهابع سهود اسهت کهه مهي خواهيهد آن
را بيشينه کنيد و يا يک تابع هزينه است که مهي خواهيهد آن را کمينهه کنيهد .مهدل هها
ممکههن اسههت حههداکثر يههک تههابع هههدف داشههته باشههد .در مثههالي کههه داريههم ،تههابع هههدف،
سود شرکت را بهه صهورت تهابعي از خروجهي کامپيوترههاي اسهتاندارد و توربهو محاسهبه
مي کند.
19
متغيرههها – کميههت هههايي هسههتند کههه تحههت کنتههرل شههما هسههتند و شههما بايههد تص هميم
بگيريد که بهترين مقادير اين متغير ها کدامند؛ به همين دليل گاها به آنها متغير هاي
تصههميم گيههري نيههز مههي گوينههد .هههدف بهينههه سههازي يههافتن مقههاديري بههراي متغيرهههاي مههدل
است که با توجه به همه شهرايط محهدود کننهده کهه روي متغيرهها اعمهال مهي شهوند،
بهتههرين مقههدار را بههراي تههابع هههدف توليههد کننههد .در ايههن مثههال مهها دو متغيههر تصههميم گيههري
يکي مربوط به تعداد کامپيوترهاي استاندارد و ديگري مربوط به تعداد کامپيوترهاي
توربو داريم.
20
محدوديت ها – تقريبا بدون استثنا ،برخي محدوديت ها براي مقاديري که متغيرها مي
توانند اتخاذ کنند خواهد بود .حداقل يک منبهع محهدود خواههد بهود( .بهراي مثهال زمهان،
مواد اوليه ،بودجه دپارتمان شما و )...اين محهدوديت هها بهه وسهيله تهوابعي از متغيرههاي
م ههدل بي ههان م ههي ش ههوند .اي ههن فرم ههول ه هها ب ههه عن ههوان مح ههدوديت ش ههناخته م ههي ش ههود ،چ ههون
مقاديري را که متغيرها مي توانند بگيرند ،محدود مي کنند.
21
در اين مثال ما براي هر خط توليد يک محدوديت و براي کل نيروي کار استفاده شده
نيز يک محدوديت داريم.
متغيرهاي Standardو Turboرا به عنوان تعداد کامپيوترهاي استاندارد و توربو
که شرکت مي خواهد توليد کند در نظر مي گيريم .هدف شرکت بيشينه کردن سود کل
است که اين سود برابر مجموع سود حاصل از کامپيوترهاي استاندارد و توربو است :
;Max = 100 * Standard + 150 * Turbo
22
حال محدوديت مربوط به ظرفيت خطوط توليد را اعمال مي کنيم :
;Standard <= 100
;Turbo <= 120
محدوديت مربوط به نيروي کار نيز بصورت زير است :
;! Our labor supply is limited
<= 160; Standard + 2 * Turbo
23
وقتي حل شروع مي شود ،نرم افزار پنجره
وضعيت حل کننده ( )Solver Statusرا
مانند شکل زير نمايش مي دهد:
24
25
کادر متغيرها :تعداد کل متغيرها در مدل ،تعداد متغيرهاي غيرخطي ( )nonlinearو
تعداد متغيرهاي صحيح
کادر محدوديتها :تعداد کل محدوديتها و تعداد محدوديتهاي غيرخطي
کادر غيرصفرها :تعداد کل ضرايب غيرصفر در مدل ،و تعدادي از آنها که روي متغيرهاي
غيرخطي ظاهر مي شوند.
کادر حافظه اشغال شده :اين کادر ،مقدار حافظه مولد مدل LINGOاز سهم
حافظه آن که در حال استفاده ميباشد.
کادر مدت زمان سپري شده :کل زمان سپري شده براي توليد و حل مدل
Model Class
دسته بندي هاي مدل را نشان مي دهد .دسته هاي احتمالي عبارتند از
: LP همه عبارتها خطي هستند و مدل محدوديت عدد صحيحي روي متغيرها ندارد.
: QP همه عبارات خطي يا درجه دوم هستند ،مدل محدب است و محدوديت عدد صحيح وجود ندارد.
: ILP همه عبارات خطي هستند و زيرمجموعه اي از متغيرها ،به مقادير صحيح محدود مي شوند.
: IQP همه عبارات خطي يا درجه دوم هستند .مدل محدب است و زيرمجموعه اي از متغيرها ،محدوديت عدد
صحيح دارند.
:PILP همه عبارات خطي هستند و همه متغيرها به مقادير صحيح محدود مي شوند.
:PIQP همه عبارات خطي يا درجه دوم هستند ،مدل محدب است و همه متغيرها به مقادير صحيح محدود مي
شوند.
: NLP حداقل يکي از روابط در مدل ،نسبت به متغيرها غيرخطي است.
:INLP حداقل يکي از عبارات در مدل غيرخطي است و زيرمجموعه اي از متغيرها ،محدوديت عدد صحيح دارد .به
طور کلي حل اين دسته از مدلها بسيار سخت خواهد بود ،مگر براي کوچکترين موارد.
:PINLP حداقل يکي از عبارات در مدل غيرخطي است و همه متغيرها محدوديت عدد صحيح دارند .بطور کلي حل
اين دسته از مدلها بسيار سخت خواهد بود ،مگر براي کوچکترين موارد.
26
State
: حاالت ممکن عبارتند از.وضعيت حل جاري را نشان مي دهد
Global Optimum
Local Optimum
Feasible
Unbounded
Interrupted
Undetermined
27
Objective
Infeasibility
مقاديري که همه محدوديتهاي مدل توسط آنها نقص مي شوند (از آن تجاوز مي کنند) را
ليست مي کند
Iteration
تعداد مراحل حل
28
اطالعاتي مربوط به چندين حل کننده ويژه
حل کننده انشعاب و تحديد()Branch and Bound Solver
حل کننده عمومي()Global Solver
حل کننده چند آغازه ()Multistart Solver
فيلدهاي اين کادر با اجراي يکي از اين سه حل کننده بهنگام مي شوند.
29
30
:Solver Typeنوع حل کننده ويژه مورد استفاده
:Best OBJمقدار تابع هدف براي بهترين حلي که تا کنون بدست آمده است.
:OBJ Boundکران نظري بر روي مقدار تابع هدف را نشان مي دهد.
:Stepsتعدا مراحلي که توسط Solverادامه يافته است.
:Activeتعداد زير مسئله هاي فعالي که براي تحليل باقي مانده اند.
31
Objective value: 14500.0000
مشخص مي کند که مقدار بهينه تابع هدف 14500است.
Valueمقدار متغير در جواب بهينه مدل خطي را مي دهد .بنابراين جواب بهينه
توليد 100کامپيوتر STANDARDو 30کامپيوتر ، TURBOاست.
Reduced Costضريب متغير در سطر صفر جدول بهينه را مي دهد (مسئله
ماکزيمم سازي) .همانگونه که مي دانيد بايد هزينه کاهش يافته هر متغير پايه برابر
صفر باشد .براي يک متغير غير پايه ،xjهزينه کاهش يافته مقداري است که اگر ، xj
1واحد اضافه شود ،به آن اندازه ،جواب بهينه کاهش مي يابد (درحالي که بقيه
متغيرهاي غير پايه برابر صفر بمانند).
32
در قسمت بعدي از خروجي يا Reportمشاهده مي کنيم که هر خط مدل با
شماره اي مشخص شده و در مقابل آن دو عبارت Slack or Surplusو Dual Price
مشاهده مي شود :
دهد.
Slack or Surplusمقدار کمبود يا اضافي (مازاد) در جواب بهينه را نشان مي
Dual Priceيا قيمت سايه مقداري است که اگر سمت راست محدوديت ،يک
واحد اضافه شود ،به آن اندازه جواب بهينه ،بهبود مي يابد ( با فرض اينکه اين
تغييرات باعث از دست رفتن پايه بهينه فعلي نمي شوند ) .اگر بعد از يک تغيير در طرف
راست محدوديت ،پايه فعلي ديگر بهينه نماند ،قيمت هاي سايه محدوديت ها ممکن
است تغيير کند.
33
انواع مسائل
لينگو قادر به حل مسائل مختلف بهينه سازي از جمله برنامه هاي خطي،
کوآدراتيک ،خطي عدد صحيح ،کوآدراتيک عدد صحيح ،عدد صحيح خطي خالص،
عدد صحيح کوآدراتيک خالص ،غير خطي ،غير خطي عدد صحيح و غير خطي عدد
صحيح خالص مي باشد .مدل هاي فوق توسط لينگو تشخيص داده شده و در
گزارش خروجي مدل پس از حل آن به ترتيب فوق ،IQP ،ILP ،QP ،LP
PINLP ،INLP ،NLP ،PIQP ،PILPخواهيم داشت .در اينجا به پياده
سازي و تحليل يک مدل خطي مي پردازيم.
34
Case Study
شرکت داکوتا فرنيچر ،توليد کننده ميز تحرير ،ميز و صندلي است .توليد هر
کدام از انواع مبلمان به الوار و دو نوع نيروي کار ماهر در دو زمينه نجاري و پرداخت
نياز دارد .مقدار هر يک از منابع مورد نياز براي توليد هر يک از انواع مبلمان در
جدول ذيل آمده است :
35
منبع
ميز تحرير
ميز
صندلي
الوار (فوت تخته)
8
6
1
زمان پرداخت (ساعت)
4
2
5/1
زمان نجاري (ساعت)
2
5/1
5/0
در حال حاضر 48 ،فوت تخته از الوارها 20 ،ساعت زمان پرداخت و 8ساعت
زمان نجاري موجود است .هر ميز تحري 60دالر ،ميز 30دالر و صندلي 20دالر به
فروش مي رسد .و حداکثر تقاضاي ميز 5عدد مي باشد .با فرض اينکه منابع در
دسترس به تازگي تدارک ديده شده باشند ،شرکت داکوتا مي خواهد کل سود خود را
به حداکثر برساند.
متغير هاي تصميم بصورت ذيل تعريف شده اند :
: Deskتعداد ميز تحريرهاي توليد شده
: Tableتعداد ميزهاي توليد شده
: Chairتعداد صندلي هاي توليد شده
36
شرکت داکوتا به حل مدل خطي زير نياز دارد :
Max z = 60 Desk + 30 Table + 20 Chair
(8 Desk + 6 Table + Chair <= 48محديديت الوار)
s.t
(4 Desk + 2 Table + 1.5 Chair <= 20محدوديت پرداخت)
(2 Desk + 1.5 Table + 0.5 Chair <= 8محدوديت نجاري)
(Table <= 5محدوديت تقاضاي ميز)
Desk, Table, Chair >= 0
37
مدل فوق به زبان لينگو در قسمت Lingo Modelوارد مي شود :
38
با استفاده از گزينه Solveجواب نهايي سيمپلکس بصورت زير خواهد بود :
39
Objective value: 280.0000
مشخص مي کند که مقدار بهينه تابع هدف 280است.
Valueمقدار متغير در جواب بهينه مدل خطي را مي دهد .بنابراين جواب بهينه
داکوتا توليد 2ميز تحرير ،صفر ميز ،و 8صندلي است.
Reduced Costضريب متغير در سطر صفر جدول بهينه را مي دهد (مسئله
ماکزيمم سازي) .همانگونه که مي دانيد بايد هزينه کاهش يافته هر متغير پايه برابر
صفر باشد .براي يک متغير غير پايه ،xjهزينه کاهش يافته مقداري است که اگر ، xj
1واحد اضافه شود ،به آن اندازه ،جواب بهينه کاهش مي يابد (درحالي که بقيه
متغيرهاي غير پايه برابر صفر بمانند) .در خروجي لينگو براي مسئله داکوتا ،هزينه
کاهش يافته ميز برابر 5است .اين يعني اگر داکوتا بخواهد يک ميز توليد کند ،درآمد
به اندازه 5دالر کاهش خواهد يافت.
40
در قسمت بعدي از خروجي يا Reportمشاهده مي کنيم که هر خط مدل با
شماره اي مشخص شده و در مقابل آن دو عبارت Slack or Surplusو Dual Price
مشاهده مي شود :
Slack or Surplusمقدار کمبود يا اضافي (مازاد) در جواب بهينه را نشان مي
دهد .بنابراين 24فوت تخته الوار و 5عدد ميز به صورت مازاد وجود خواهد داشت.
Dual Priceيا قيمت سايه مقداري است که اگر سمت راست محدوديت ،يک
واحد اضافه شود ،به آن اندازه جواب بهينه ،بهبود مي يابد ( با فرض اينکه اين
تغييرات باعث از دست رفتن پايه بهينه فعلي نمي شوند ) .اگر بعد از يک تغيير در طرف
راست محدوديت ،پايه فعلي ديگر بهينه نماند ،قيمت هاي سايه محدوديت ها ممکن
است تغيير کند.
41
پس از حل مدل توسط Solveبا استفاده از گزينه Rangeموجود در منوي LINGOگزارش
خروجي تحليل حساسيت مدل را مشاهده مي کنيم ،در صورت مشاهده خطا وارد LINGO Option
شده و گزينه Dual Computationsاز قسمت General Solverرا در حالت سوم قرار دهيد.
42
تحليل حساسيت نشان مي دهد که ضرايب تابع تا چه ميزان مي
توانند افزايش يا کاهش يابند بدون اينکه پايه بهينه مسئله (مجموعه
متغيرهاي غير صفر) عوض شود .تحليل حساسيت شامل دو بخش است،
يکي مربوط به تابع هدف و ديگري مربوط به محدوديت ها ،که در هر کدام
به تفکيک مقدار واقعي و مقادير کاهش و افزايش قيد شده است.
در پايان با استفاده از گزينه Solutionدر منوي LINGOمي
توانيد نمايش گرافيکي از هر يک از متغيرهاي موجود در مدل را داشته
باشيد.
43
فرض کنيد شرکت 6 Wireless Widgetانبار براي تامين ،و 8مرکز فروش کاالي
توليدي دارد .هر انبار محدوديت مقدار کاالي انبار شده دارد که بيشتر از آن مقدار،
انبار کردن آن کاال مقدور نيست و نيز هر مرکز فروش تقاضايي دارد ،که مي بايست
حداقل به اندازه آن مقدار تامين شود .شرکت مي خواهد تعداد کااليي که از هر انبار،
به هر مرکز فروش حمل مي شود را ،به گونه اي که کل هزينه حمل مينيمم گردد تعيين
کند.
V1
WH1
V2
WH2
V3
WH3
V4
WH4
V5
WH5
V6
WH6
V7
V8
44
کاالي موجود
انبار
60
1
55
2
51
3
43
4
41
5
52
6
تقاضاي کاال
فروشنده
35
1
37
2
22
3
32
4
41
5
32
6
43
7
ظرفيت هر انبار
45
8
38
تقاضاي هر فروشنده
V8
V7
V6
V5
V4
V3
V2
V1
9
5
2
4
7
6
2
6
Wh1
2
8
5
8
3
5
9
4
Wh2
3
3
4
7
9
1
2
5
Wh3
1
7
2
9
3
7
6
7
Wh4
5
6
2
7
5
9
3
2
Wh5
3
4
1
8
2
2
5
5
Wh6
هزينه حمل هر کاال
مقدار کاالي حمل شده از:VOLUME_I_J
J به مرکز فروشI انبار
MIN = 6 * VOLUME_1_1 + 2 * VOLUME_1_2 +
6 * VOLUME_1_3 + 7 * VOLUME_1_4 +
4 * VOLUME_1_5 +
.
.
8 * VOLUME_6_5 + VOLUME_6_6 +
4 * VOLUME_6_7 + 3 * VOLUME_6_8
Minimize ijCOSTij VOLUMEij
LINGO:
MIN= @SUM(LINK(I,J):
COST(I,J)* VOLUME(I,J);
Math
Notation
LINGO Syntax
Minimize
MIN=
ij
@SUM(LINK(I,J):
COSTij
COST(I,J)
*
VOLUMEij
VOLUME(I,J)
46
محدوديتهاي تقاضا: دسته اول
VOLUME_1_1 + VOLUME_2_1+ VOLUME_3_1+ VOLUME_4_1+
VOLUME_5_1+ VOLUME_6_1=35
I VOLUMEij = DEMANDj, for all in VENDORS
LINGO:
@FOR(VENDORS(J):
@SUM(WAREHOUSE(I): VOLUME(I,J))=
DEMAND(J));
47
محدوديتهاي ظرفيت:دسته دوم
j VOLUMEij <= CAPi, for all in WAREHOUSES
LINGO:
@FOR(WAREHOUSES(I):
@SUM(VENDORS(J): VOLUME(I, J))<=
CAPACITY(I));
48
SETS:
WAREHOUSES: CAPACITY;
VENDORS: DEMAND;
LINKS(WAREHOUSES, VENDORS): COST, VOLUME;
ENDSETS
Member
Index
Shipping
Arc
1
WH1V1
2
WH1V2
3
WH1V3
…
…
47
WH6V7
48
WH6V8
49
50
51
ازمنوي LINGOو گزينه Solutionرا انتخاب کرده سپس با انتخاب VOLUME
و Nonzeros Onlyخواهيم داشت:
52
يک برنامه در لينگو با کلمه ” “Modelآغاز و به کلمه ” “Endختم مي شود و
معموال از چهار بخش زير تشکيل مي شود :
بخش مجموعه ها؛
بخش داده ها؛
تابع هدف؛
بخش محدوديت ها؛
همچنين مي توان در يک برنامه ،تابع هدف را بعد از نوشتن محدوديت ها آورد.
53
مجموعه ها در لينگو در واقع قالبي براي تعريف متغيرهاي برنامه مي باشند (اين
متغيرها مي توانند متغير تصميم گيري و يا پارامترهاي عددي مدل باشند) .در لينگو دو
نوع مجموعه داريم :
مجموعه هاي مستقل؛ Primitive Sets
مجموعه هاي وارث ؛ Derived Sets
مجموعه هاي مستقل براي تعريف متغيرهاي آرايه اي يک بعدي و مجموعه
هاي وارث براي تعريف آرايه هاي چند بعدي مورد استفاده قرار مي گيرند.
54
در يک مدل لينگو ،مجموعه ها در يک قسمت اختياري که قسمت مجموعه ها( Sets
)Sectionناميده مي شود تعريف ميشوند .اين قسمت با کلمه کليدي SETS:
شروع و با ENDSETSخاتمه مي يابد.
ساختار کلي تعريف مجموعه هاي مستقل در لينگو به صورت زير مي باشد :
خصوصيات مجموعه / :عناصر مجموعه /نام مجموعه;
مثال:
;WAREHOUSES / WH1 WH2 WH3 WH4 WH5 Wh6/: CAPACITY
;WAREHOUSES/ WH1 ..WH6/ : CAPACITY
;WAREHOUSES/ 1..6 / : CAPACITY, LOCATION, DOCKS
55
نکته قابل ذکر در مورد عناصر مجموعه اين است که اسم عناصر مي تواند
عدد ،رشته اي از اعداد و يا حروف باشد( .فقط بايد با حرف شروع شود).
براي آشنايي بيشتر چند مجموعه در پايين آمده است :
Department / Industrial, Mechanic, Civil, Electronic,
;Computer, Material/: Average
;WAREHOUSE / WH1, WH2, WH3/: CAPACITY
;CUSTOMER / C1, C2, C3, C4/: DEMAND
56
Implicit Member List
Format
Example
Set Members
1 ..n
1 .. 5
1,2,3,4,5
stringM .. stringN
TRUCKS3 ..
TRUCKS204
TRUCKS3,TRUCKS4,…,TRUCKS2
04
dayM .. dayN
MON .. FRI
MON, TUE, WED, Thu, FRI
monthM .. MonthN
OCT .. JAN
OCT, NOV, DEC, JAN
monthYearM .. monthYearN
OCT2001 .. JAN2002
OCT2002, NOV2001, DEC2001,
JAN2002
57
در لينگو نمي توان به صورت مستقيم ماتريس و آرايه هاي چند بعدي را تعريف
کرد .براي تعريف آرايه هاي چند بعدي از مجموعه هاي وارث استفاده مي کنيم.
ساختار کلي مجموعه هاي وارث بصورت زير است :
Sets:
;PRODUCT /A B/
;MACHINE / M N/
;WEEK / 1 2/
;)ALLOWED (PRODUCT, MACHINE, WEEK
Endsets
8
7
6
5
4
3
2
1
Index
)(B,N2
)(B,N,1
)(B,M,2
)(B,M,1
)(A,N,2
)(A,N,1
)(A,M,2
)(A,M,1
Member
58
يک ليست اعضاي مشخص
•
ALLOWED( PRODUCT, MACHINE, WEEK)/ A M 1, A N 2, B N 1/;
استفاده از يک شرط منطقي:يک فيلتر عضويت
•
HEAVY_DUTY(TRUCKS) | CAPACITY(&1) #GT# 50000:
59
براي درک بهتر به مثال هاي کلي زير توجه کنيد :
فرض کنيد کارخانه اي سه نوع ماشين مختلف توليد مي کند و مشتريان پنج شهر
مختلف نيز سفارش هاي متفاوتي از هر نوع ماشين به کارخانه مي دهند .حال زير برنامه
ي زير را در نظر بگيريد:
Sets:
;Car/1..3/
;City/1..5/
;Demand (Car, City): Dem
Endsets
اين زير برنامه مجموعه اي مستقل ار نوع Carبه صورت آرايه تک بعدي 3
خانه اي و مجموعه اي مستقل از نوع Cityبه صورت يک آرايه تک بعدي 5خانه اي
توليد مي کند( .دقت کنيد که متغيري از نوع Carيا Cityنداريم).
60
در خط چهارم اين زير برنامه ،مجموعه وارث Demandبه صورت يک ماتريس
3*5و ماتريس Demاز نوع Demandتعريف مي شود؛ بنابراين در بخش
مقداردهي ،مي بايست 15عدد به متغير Demنسبت داد ،که در اين حالت مقدار
تقاضاي شهر jاز ماشين iدر خانه اي واقع در سطر iام و ستون jام ماتريس Dem
قرار مي گيرد.
در قسمت داخل اسلش ها (انديس هايي که با هم ارتباط دارند) مي توانيم
انديس هايي را ذکر کنيم که ارتباطشان با هم تعريف شده است .در صورت حذف
قسمت بين اسلش ها ،فرض بر اين است که ارتباط تمام انديس ها در تمام بعد ها ،با
هم تعريف شده است و متغيرهاي وابسته به مجموعه ،با تمام انديس هاي خود مي
توانند مقدار بگيرند .استفاده از قسمت انديس هايي که با هم ارتباط دارند به
خصوص در مسائل کنترل پروژه کاربرد دارد که خود مبحثي جداگانه است .مثال پيش
رو مطالب را بيشتر براي ما روشن مي سازد:
61
SETS:
TASK/A B C D E F G H I J K/: T;
PRED (TASK, TASK) / A,B B,C C,F C,G F,J G,J J,K D,E
E,H E,I H,J I,J/;
STATION /1..4/;
TXS (TASK, STATION): X;
ENDSETS
62
در مثال فوق مجموعه TASKاز 11عضو تشکيل يافته است و مجموعه
STATIONاز 4عضو .با اين وجود مجموعه PREDبه جاي 121=11*11عضو
تنها از 12عضو مشخص شده ،تشکيل شده در حالي که TXSشامل 32=4*8عضو
مي باشد.
توجه کنيد که در برنامه هاي مختلف گاهي مواردي پيش مي آيد که هنگام کار با
مجموعه ها (در تعريف مجموعه ها و يا هنگام استفاده از توابع forو يا ) sumبرخي
از انديس هاي مجموعه را مي بايست ناديده گرفت و يا هر شرط خاص ديگري را بايد
با برخي از انديس هاي مجموعه ها (و نه تمامي آنها) اعمال کرد؛ در اين حالت از
عملگرهاي مختلف و عبارات شرطي استفاده مي کنيم که در فصل هاي آتي در مورد
آنها به تفصيل بحث خواهيم کرد.
63
بخش داده ها به ما اين امکان را مي دهد که داده ها را از بقيه مدل
جدا کنيم .اين کار باعث مي شود در هنگام تغيير و يا توسعه مدل راحت تر و
کم اشتباه تر عمل کنيم .در بخش داده که مابين دو کلمه کليدي DATAو
ENDDATAاست مي توانيم مقادير پارامترها و اسم عناصر مجموعه
هايي را که در بخش قبلي تعريف شده اند مقداردهي کنيم.
64
: مثال زير توجه کنيد3 به
1)
SETS:
SET1 / A, B, C/: X, Y;
ENDSETS
DATA:
X = 1, 2, 3;
Y = 4, 5, 6;
ENDDATA
65
2)
SETS
SET1 / A, B, C/: X, Y;
ENDSETS
DATA
X, Y = 1, 4,
2, 5,
3, 6;
ENDDATA
3)
SETS
SET1 : X, Y;
ENDSETS
DATA
SET1, X, Y = A 1 4
B25
C 3 6;
ENDDATA
66
در هر سه مثال فوق مجموعه SET1داراي سه عنصر B ،Aو Cاست که دو خصيصه
Xو Yبه آن نسبت داده شده و جواب هر سه برابر است با :
X ( A ) = 1, X ( B ) = 2, X ( C ) = 3
)=6
Y ( A ) = 4, Y ( B ) = 5, Y ( C
پارامترهاي 1*1را مي توان مستقيما در قسمت داده ها تعريف و مقداردهي کرد .مثال :
DATA
;INTEREST_RATE = .085
ENDDATA
و يا
DATA
;INTEREST_RATE, INFLATION_RATE = .085, .03
ENDDATA
INTEREST_RATEدر هر دو مثال فوق برابر .085و در مثال دوم
INFLATION_RATEبرابر .03است.
67
نقاط آغازي فقط در مدلهاي غيرخطي مورد استفاده قرار مي گيرد.
اگر مقادير آغازي تقريبا نزديک به مقادير بهينه باشند ،در زمان الزم براي اجراي مدل صرفه
جويي خواهد شد.
مثال :جواب (0و)1
;)Y<=@LOG(X
;X^2+ Y^2 <=1
Feasible solution found at iteration:
946
Variable
Value
Y
0.5309317E-05
X
1.000004
68
INIT با اصالح مدل و استفاده از
INIT:
X= 0.999;
Y=0.002;
ENDINIT
Y<=@LOG(X);
X^2+ Y^2 <=1;
Feasible solution found at iteration:
450
Variable
Value
X
0.9999995
Y
0.000000
69
براي تسهيل مدل سازي ،در لينگو توابع و عملگرهاي متفاوتي وجود
دارند .حتي اگر با شکل کلي استفاده از اين توابع آشنايي نداشته باشيد،
لينگو اين شکل کلي را در اختيار شما قرار مي دهد .براي اين منظور در
منوي Editگزينه Paste Functionرا انتخاب نماييد ،مالحظه مي کنيد
که ليستي از انواع توابع براي شما نمايش داده مي شود.
70
.1
.2
.3
.4
.5
.6
.7
.8
.9
71
عملگرهاي استاندارد
توابع رياضياتي @Cos(X) ,@EXP(X), @Floor(X), @LGM(X),
)@LOG(X
توابع مالي )@FPA(I,N), @FPL(I,N
توابع احتمالي )@PBN(P,N,X), @PCX(N,X
توابع دامنه متغير )@BIN(variable), @FREE(variable
توابع مجموعه نگهدار @IN(set_name,
Primitive_1,[Primitive_2…], @INDEX
توابع حلقه گردي مجموعه اي @FOR, @SUM
توابع ورود و صدور
توابع متفرقه @IF
کليه متغيرها در لينگو ،از نوع نامنفي پيوسته هستند ،مگر اينکه خالف آن قيد شود .به طور
کلي متغيرها مي توانند هر مقداري از صفر تا مثبت بينهايت را بپذيرند.
براي دستيابي به اين مهم ،لينگو چها تابع دامنه متغير را براي اعمال اين شرايط بر روي
متغيرها در اختيار شما قرار مي دهد تا بتوانيد دامنه پيش فرض متغير را ملغي کنيد.
:@GINمتغير را محدود به پذيرش يک مقدار صحيح مي کند.
:@BINمتغير را از نوع باينري ( 0يا )1قرار مي دهد.
:@FREEبه متغير اجازه پذيرش هر مقدار حقيقي اعم از مثبت يا منفي يا صفر را مي دهد.
:@BNDمتغير را ،ملزم به قرار گرفتن در يک بازه مشخص مي کند.
72
ساختار تابع @BINبراي استفاده از اين متغيرها اينگونه است:
;)@BIN(variable_name
که variable_nameنام متغيري است که مي خواهيد مقدار صفر و يک اختيار کند.
مثال:
;)@BIN(X
متغير عدد صحيح Xرا از نوع باينري قرار مي دهد.
;))@BIN(INCLUDE(4
متغير ) INCLUDE(4را از نوع باينري قرار مي دهد.
;))@FOR(ITEMS:@BIN(INCUDE
کليه متغيرهاي خصوصيت INCLUDEرا ،از نوع صفر و يک قرار مي دهد.
73
74
اين توابع قابليت اعمال يک سري از دستورات به تمام اعضاي مجموعه با استفاده از
يک دستور ساده را قادر مي سازند.
تابع
کاربرد
@FOR
قدرتمندترين تابع حلقه گردي مجموعه اي براي اعمال محدوديتها بر روي
اعضاي مجموعه
@SUM
پرکاربردترين تابع براي اعمال مجموع يک عبارت بر روي تمامي اعضاي
مجموعه
@MIN
اعمال مينمم يک عبارت در بين تمامي اعضاي مجموعه
@MAX
اعمال ماکسيمم يک عبارت در بين تمامي اعضاي مجموعه
@PROD
اعمال حاصلضرب يک عبارت در بين تمامي اعضاي يک مجموعه
بررس ي تک تک اين توابع از سطح کار ما فراتر است؛ همچنين به
خاطر عدم نياز به توابع مالي و احتمالي در برنامه ريزي خطي در اينجا فقط
به تشريح برخي توابع مي پردازيم.
(در صورتي که مايليد اطالعات بيشتري در ارتباط با ساير توابع لينگو
بدست آوريد در منوي Helpگزينه Help Topicsرا انتخاب نماييد و
پنجره محاوره اي باز شده را در حالت Indexقرار دهيد؛ سپس کلمه
Functionرا تايپ کنيد ،در اين حالت لينگو اطالعات مفيد بسياري در
اختيار شما قرار مي دهد).
75
نکته :
قبل از معرفي توابع به اين نکته مهم توجه کنيد که در لينگو هنگام به
کار بردن توابع ،ميبايست قبل از نام تابع از عالمت @ استفاده کرد.
در اينجا به بررس ي دو تابع FORو SUMمي پردازيم.
76
اين تابع در دسته Set Loopingيعني توابع حلقه اي قرار دارد و شکل
کلي آن بصورت زير مي باشد :
;)@FOR( Set : expression
در صورت استفاده از عبارات شرطي به صورت زير عمل کنيد :
;)@FOR( Set | condition: expression
وجود تابع Forدر لينگو در واقع يکي از برتري هاي بارز اين زبان مي
باشد .از اين تابع براي نسبت دادن يک ويژگي به تمام يا بخش ي از اعضاي
يک مجموعه استفاده مي کنيم .به مثال هاي زير توجه کنيد :
77
فرض کنيد انباري داريم که در آن هفت قلم کاالي متفاوت نگهداري
مي کنيم:
SETS:
;Items /1..7/: Capacity
ENDSETS
حال فرض کنيد ظرفيت انبار محدود بوده و حداکثر 12واحد از هر قلم مي
توان در آن نگهداري کرد .براي وارد کردن اين محدوديت به صورت زير
عمل مي کنيم :
;)@For(Items (i): Capacity (i) <= 12
78
اين عبارت در واقع معادل عبارت زير است :
;Capacity (1) <= 12
;Capacity (2) <= 12
;Capacity (3) <= 12
;Capacity (4) <= 12
;Capacity (5) <= 12
;Capacity (6) <= 12
;Capacity (7) <= 12
از آنجا که تمام متغيرهاي به کار رفته در مجموعه Itemsقرار دارند ،عبارت باال
را به صورت زير نيز مي توان نوشت :
;)@For(Items: Capacity <= 12
توجه کنيد که در صورتي که متغيرهاي به کار رفته در Forمتعلق به مجموعه
هاي متفاوت باشند نمي توان از شکل خالصه شده باال استفاده کرد.
79
حال فرض کنيد ظرفيت انبار فقط براي دو قلم کاالي آخر (اقالم 6و 7
) محدوديت داشته باشد؛ براي وارد کردن اين محدوديت از عبارات شرطي و
عملگرهاي منطقي استفاده مي کنيم :
;)@For(Items (i) | i#GT#5: Capacity (i) <= 12
80
اين تابع نيز همانند تابع Forدر دسته توابع Set Loopingقرار دارد
و شکل کلي کاربرد آن به صورت زير مي باشد :
;)@SUM (Set: expression
در صورت استفاده از عبارات شرطي به صورت زير عمل کنيد :
;)@SUM (Set | condition: expression
از اين تابع براي محاسبه حاصل جمع اعضاي يک مجموعه يا عبارتي
شامل اعضاي يک مجموعه استفاده مي کنيم .براي روشن شدن مطلب
به مثال هاي زير توجه کنيد :
81
فرض کنيد 5مشتري مختلف تقاضاهاي متفاوتي از کاالي Xدارند؛ حال اين زير
برنامه را در نظر بگيريد :
SETS:
;Customers /1 2 3 4 5/: Demand, cost
ENDSETS
DATA
;demand= 5 1 3 4 6
ENDDATA
حال اگر بخواهيم مجموع تقاضاها براي کاالي Xرا محاسبه نماييم ،کافيست
عبارت زير را به برنامه بيافزاييم :
;))Total_Demand = @Sum (Customers (i): Demand (i
82
در واقع اين عبارت معادل عبارت زير مي باشد :
Total_Demand = Demand (1) + Demand (2) + Demand (3) +
;)Demand (4) + Demand (5
مي توانستيم از عبارت خالصه شده زير نيز استفاده کنيم :
;)Total_Demand = @Sum (Customers: Demand
83
هنگاميکه يک تابع حلقه گردي مجموعه اي ،در محدوده عمل تابع حلقه گردي ديگري
استفاده شود آن را تودرو يا النه اي ( )Nestingمي نامند.
;! The demand constraints
@FOR(VENDORS(J):
=)@SUM(WAREHOUSES(I) : VOLUME(I, J
;))DEMAND(J
براي هر فروشنده ،کل محموله هايي که از هر يک از انبارها به آن فروشنده ارسال مي
شود را با يکديگر جمع کرده و مقدار حاصل برابر با تقاضاي فروشنده قرار داده شده
است.
84
برخي مواقع مقدار دقيق يک پارامتر را نداريم و مي خواهيم براي محدوده اي
از اعداد اين پارامتر را مقداردهي کرده و مدل را حل کنيم .در اين مواقع در
قسمت داده ها به جاي اينکه مقدار عددي آن پارامتر را وارد کنيم عالمت
سوال ” ? “ قرار مي دهيم .در اين صورت هر بار که مي خواهيم مدل را
حل کنيم ،لينگو مقدار عددي اين پارامتر را از ما مي پرسد و سپس شروع به
حل مدل مي کند .به مثال زير توجه کنيد.
85
DATA:
? = INFLATION_RATE
ENDDATA
در اين مثال ،در هر بار حل مدل ،لينگو مقدار
INFLATION_RATEرا به وسيله پنجره اي از ما مي خواهد.
به مثال هاي زير در مورد مقداردهي تکي به متغيرها و پارامتر ها توجه
کنيد :
86
SETS
DAYS / MO, TU, WE, TH, FR, SA, SU/: NEEDS;
ENDSETS
DATA:
NEEDS = 20;
ENDDATA
. مي گيرند20 مقدارNEEDS در اين مثال همه اعضاي
87
SETS
DAYS / MO, TU, WE, TH, FR, SA, SU/: NEEDS, COST;
ENDSETS
DATA:
NEEDS, COST = 20, 100;
ENDDATA
و همه اعضاي20 مقدارNEEDS در اين مثال همه اعضاي
. مي گيرند100 مقدارCOST
88
در بخش داده ها اگر مقدار برخي از متغيرها وارد نشده باشد ،آنها به
صورت متغيرهاي تصميم در نظر گرفته مي شوند نه اعداد ثابت .به مثال
زير توجه کنيد :
SETS
;YEARS / 1..5 /: CAPACITY
ENDSETS
DATA
; CAPACITY = 34, 34, , ,
ENDDATA
در اين مثال ) CAPACITY (1و ) CAPACITY (2برابر 34در
نظر گرفته مي شوند و عناصر سوم تا پنجم CAPACITYمتغير به
حساب مي آيند.
89
به عنوان مدير توليد يک کارخانه فرآوري سوخت ،مايليد سود حاصل از ترکيب 3ماده
خام butane, catalytic reformate, naphthaرا ،در دو محصول
نهايي Regularو Premiumماکزيمم کنيد .اين محصوالت نهايي ،بايد شرايط
کيفيت را در octane, vapor pressure, volatilityبراورده کنند .هر
ماده خام ،يک هزينه به ازاي هر واحد و مقدار در دسترس محدودي دارد .حداقل مقدار
مورد نياز براي هر محصول نهايي ماکزيمم مقداري از هر محصول است که مي توانيد
بفروشيد و نيز سهم سود هر واحد را نيز مي دانيد.
90
شرکت شما قصد انتخاب سه مکان ،براي احداث کارخانه توليدي در آن مکانها را دارد.
چهار مشتري با تقاضاي معلوم براي محصول شما وجود دارند .هر مکان بالقوه احداث
کارخانه ،هزينه هاي عملياتي مربوطه و مسيرهاي حمل به شهرهاي تقاضا دهنده اي
دارد که هزينه هاي متفاتي دارند .عالوه بر اين هر کارخانه بالقوه ،ظرفيت ارسالي دارد
که نبايد از آن تجاوز شود .مساله اي که با آن مواجهيم تايين کارخانجاتي است که
بايد احداث شوند و نيز مقداري از محصول که بايد از هر کارخانه به هر يک از مشتريان
ارسال شود .در عين اينکه مي خواهيم مجموع هزينه هاي ثابت عملياتي و هزينه هاي
ارسال را مينيمم نماييم.
91
يکي از مسائل رايج مديريت موجودي ،هنگامي است که محصول مورد نظر ،زمان نگهداري
محدودي دارد .هزينه اي براي سفارش بيش از مقدار مورد نياز متحمل خواهيم شد ،چرا
که محصول به سرعت فاسد و يا تاريخ استفاده از آن منقض ي مي شود .همچنين يک
هزينه فروش از دست رفته متناظر با کاالهاي از بين رفته وجود دارد درچنين شرايطي،
اينگونه مسائل که چه مقدار سفارش دهيم تا سود مورد نظر را ماکزيمم کنيم ،تحت
عنوان مسائل روزنامه فروش شناخته مي شوند .در مورد اين مثال فرض مي کنيم که
تقاضا توزيع پوآسن دارد .هر چند اين فرض الزامي نيست.
92
در اين مدل ،شش کار وجود دارد که بايد بر روي يک ماشين انجام شود .در هر لحظه
فقط يکي از اين کارها مي توان بر روي ماشين انجام داد .هر کار ،يک سررسيد اتمام
مقرري دارد .اگر نتوانيم کار را تا لحظه سررسيدش به اتمام برسانيم ،آن را انجام
نخواهيم داد .هدف ما ،ماکزيمم سازي کل ارزش کارهاي انتخاب شده است.
93
فرض کنيد مي خواهيد براي پيک نيک برنامه ريزي کنيد و ليست موادي را که مي خواهيد با خود
حمل کنيد تهيه کده ايد .هر آيتم وزن مشخص ي دارد و کوله پشتي شما قادر به ذخيره باري بيش
از 15کيلوگرم نيست .همچنين يک ليست رتبه بندي براي اين آيتمها تهيه کرده ايد ،که در آن
به هر آيتم نمره اي از 1تا 10داده ايد که مشخص مي کند قرار گرفتن هر آيتم خاص در کوله
پشتي ،تا چه حد براي شما مطلوبيت دارد .اين اطالعات به صورت جدول زير فهرست شده اند:
94
Rating
Weight
Item
2
1
Ant Repellent
9
3
Beer
3
4
Blanket
8
3
Bratwurst
10
3
Brownies
6
1
Frisbee
4
5
Salad
10
10
Watermelon
فرض کنيد که مدير يک کارخانه هواپيماسازي هستيد و تصميم گرفته ايد بهترين ترکيب
توليد شش مدل محصول را پيدا کنيد .شش مدلي که در حال حاضر زير خط توليد
هستند عبارتند ازRocket, Meteor, Streak, Comet, Jet, :
.Biplaneهر هواپيما ،سهم سود مشخص ي دارد .همچنين هزينه ثابتي براي توليد هر
نوع از اين هواپيما در هر دوره وجود دارد .سود مورد انتظار و هزينه ثابت ،در جدول زير
نشان داده شده است:
95
Setup
Profit
Plane
35
30
Rocket
20
45
Meteor
60
24
Streak
70
26
Comet
75
24
Jet
30
30
Biplane
در توليد هر محصول ،از شش ماده خام استفاده مي شودsteel, copper, :
.plastic, rubber, glass, paintاطالعات مربوطه به مقدار هر يک از اين
مواد خام مورد نياز براي توليد هر هواپيما ،به همراه کل ظرفيت موجود آنها ،در جدول زير
فهرست شده است:
96
Available
Biplane
Jet
Comet
Streak
Meteor
Rocket
800
1
2
4
0
4
1
steel
1160
0
1
0
3
5
4
copper
1780
0
1
0
8
3
0
plastic
1050
5
1
2
1
0
2
rubber
1360
4
2
2
2
4
2
Glass
1240
4
3
4
1
4
1
Paint
مساله عبارت است از تعيين ترکيب نهايي محصوالت توليدي ،به گونه اي که سود کل
(تفاضل هزينه ثابت از سود ناخالص) به حداکثر مقدار ممکن برسد ،در عين اينکه از
مقدار موجودي در دسترس هيچ کدام از مواد خام تجاوز نکنيم .محصول Meteor
شما ،باالترين سود را به ازاي هر واحد داشته و هزينه راه اندازي آن نيز ،بين اين شش
محصول پايينترين است .با اين اوصاف آيا مي توان فقط Meteorتوليد کرد؟
97
فرض کنيد مسئول يکي از نمايندگي هاي هات داگ مشهور Pluto Dogsهستيد که
هفت روز هفته باز مي باشد .مي خواهيد کارکناني استخدام کنيد تا هر يک از آنها پنج روز
هفته را کار کنند و دو روز متوالي تعطيل باشند .هريک از اين کارکنان ،حقوق هفتگي
يکساني دريافت مي کنند .بعض ي از روزهاي هفته از ديگر روزها شلوغتر است و بر اساس
تجربه قبلي مي دانيد در يک روز هفته چه تعداد کارگر مورد نياز است .پيش بيني حداقل
تعداد کارکنان مورد نياز در هر روز:
1شنبه
شنبه
جمعه
5شنبه
4شنبه
3شنبه
2شنبه
روز
12
14
19
13
13
16
20
تعداد کارکنان مورد نياز
هدف پيدا کردن تعداد کارکناني است که در هر روز هفته آغاز به کار کنند ،به گونه اي که
مجموع تعداد کارکنان در هر هفته حداقل شود(که متعاقب آن هزينه کل دستمزد آنان نيز
حداقل خواهد شد ،چرا که همه کارکنان دستمزد يکساني دريافت مي کنند).
98
شرکتي آجيل هايي با چها نشان تجاري به بازار عرضه مي کند .اين چهار نشان Pawn,
Knight, Bishop, Kingناميده مي شوند .هر نشان نسبت معيني از بادام زميني
( )Peanutو بادام هندي ) (Cashewدارد .در جدول زير ،مقادير اين دو نوع آجيل در هر
پوند هر نشان تجاري برحسب اونس و نيز قيمتي که شرکت به ازاي هر پوند ،در هر نشان دريافت
مي کند آورده شده است:
King
Bishop
Pawn Knight
2
6
10
15
بادام زميني(اونس)
14
10
6
1
بادام هندي(اونس)
5
4
3
2
قيمت فروش
اين شرکت قراردادي با تامين کنندگان دارد تا روزانه 750پوند بادام زميني و 250پوند بادام هندي
دريافت کند .مسئله تعيين مقدار پوند توليدي از هر نوع محصول در هر روز است ،تا درآمد کل
بدون نياز به افزايش عرضه آجيل ها ماکسيمم شود.
99
تصور کنيد مديريت بخش برنامه ريزي استراتژيک شرکتي که در آن مشغول به کار هستيد بر
عهده شماست .در کل 8نفر کارشناس در اين بخش داريد .عالوه بر اين تصميم به نقل
مکان به محل ديگري براي دپارتمان گرفته ايد که در آن 4دفتر وجود دارد .مي خواهيد
کارشناسان را با يکديگر جفت کنيد تا هر دو نفر در يک دفتر کار کنند .بر حسب سوابق
قبلي مي دانيم بعض ي کارشناسان با يکديگر بهتر کار مي کنند تا با ديگران .براي دستيابي به
حداقل تعارض ميان کارشناسان ،به هر زوج ممکن از آنها ،يک عدد بين 1تا 10برحسب
شدت هماهنگي و سازگاري با يکديگر تخصيص مي دهيم .عدد 1به معني حداکثر همکاري
و سازگاري و عدد 10به معني حداکثر برخورد و ناسازگاري است ،تا حدي که حتي ممکن
است قرارگرفتن اين دو کارشناس در يک دفتر ،به ضرب و شتم آن دو با يکديگر بينجامد.
اين رتبه بندي در جدول زير نشان داده شده است.
10
0
10
1
کارشناس
1
2
3
4
5
6
7
8
1
-
9
3
4
2
1
5
6
2
-
-
1
7
3
5
2
1
3
-
-
-
4
4
2
9
2
4
-
-
-
-
1
5
5
2
5
-
-
-
-
-
8
7
6
6
-
-
-
-
-
-
2
3
7
-
-
-
-
-
-
-
4
شاد و موفق باشيد
www.iranmodiran.com
10
2