دانشگاه صنعتی امیرکبیر
دانشکده برق-گرایش کنترل
مدلسازی و شبیه سازی یک سیستم multi-agent
پروژه درس: مدل سازی و شبیه سازی
اجرا کننده: وعید میگلی
شماره دانشجویی: ۸۱۲۲۳۹۶۹
دانشجوی دکتری کنترل
نام استاد: دکتر توحیدخواه
تابستان ۱۳۸۲
بسمه تعالی
فصل اول) مقدمه
حمل و نقل کانتینری در شبکه جهانی حمل و نقل رو به گسترش است و بدون شک ترمینال های کانتینری یکی از عمده ترین نقش ها را در این گسترش دارند. امروزه در بزرگترین ترمینال های کانتینری دنیا نظیر بندر هنگ کنگ، بندر روتردام و بندر هامبورگ روزانه بیش از پانزده هزار کانتینر جابجا می شود. چنین حجم عظیمی از حمل و نقل میسر نمی شود، مگر در صورت اتوماسیون کردن کارها.
در کشور جمهوری اسلامی ایران نیز چندین ترمینال کانتینری وجود دارد که مهمترین آنها اسکله کانتینری شهید رجایی در بندر شهید رجایی واقع در استان هرمزگان است. در حال حاضر سیستم حمل و نقل کانتینردر این ترمینال به صورت غیر خودکار می باشد. به استناد اخبار منتشره از صدا و سیمای جمهوری اسلامی ایران،به دلیل غیر خودکار بودن این اسکله ظرفیت ترمینال افت بسیاری پیدا کرده و بیش از ۳۰ درصد کانتینرهای این ترمینال در اسکله دوبی تخلیه و بارگیری می شوند. چنین مسأله ای زنگ خطر برای عقب نیفتادن ایران از قافله پیشرفت به صدا در آورده است. سیستم های حمل ونقل کانتینر درون ترمینال دارای انواع مختلفی می باشد.
از حمل و نقل ریلی تا straddle carrier ها که خود قابلیت بلند کردن، انتقال و چیدن کانتینر بر روی یکدیگر را دارند و تریلی های ترمینال؛ روش آخری از روشهای مرسوم در ایران می باشد.
جدیدترین روش به کار گرفته شده استفاده ازAGV [1] می باشد. این روش در بندر روتردام به کار گرفته شده است. AGV یک تریلی بدون راننده است. که قادر به حمل یک یا دو عدد کانتینر می باشد. تفاوت ظاهری آن با تریلی در این است که AGV بدون کابین می باشد. شکل(۱) یک عددAGV را نشان می دهد.
شکل (۱)یک AGV به کار گرفته شده در بندر روتردام
موتور آن با سوخت گازوئیل کار می کند و به همراه سیستم هدایت و فرمان درون کفی آن جا می گیرد. مزیت AGV نسبت به سیستم حمل و نقل خودکار ریلی نیاز کمتر آن به تجهیزات محیطی و انعطاف پذیری ان در تغییر مسیر حرکت می باشد.
یک بندر کانتینری از اجزاء زیر تشکیل شده است. ۱- اسکله همراه با چند جرثقیل اسکله که وظیفه بارزدن و پیاده کردن از کشتی را به عهده دارند.۲- دروازه (Gate) که وظیفه تحویل گرفتن و تحویل دادن کانتینر به مشتری را به عهده دارد. ۳- انبار که وظیفه نگهداری موقت کانتینر های صادراتی و وارداتی را به عهده دارد. ۴- سیستم حمل و نقل AGV که حمل و نقل کانتینر را بین بخش های قبلی انجام می دهد. شکل(۲) یک ترمینال کانتینری را نشان می دهد.
شکل(۲)یک ترمینال کانتینری
یک انتقال کانتنری معمولاً شامل اجزاء زیر می باشد.
- مبداء انتقال
- مقصد انتقال
- مسیر انتقال
- مدت زمان مورد نیاز جهت انتقال
- زمان درخواست داده شده جهت انتقال
- زمان پاسخ سیستم حمل و نقل به درخواست انتقال
برای یک انتقال، معمولاً مبداء و مقصد انتقال معلوم است. مسیر انتقال نیز در بسیاری از موارد معلوم است. در نتیجه با توجه به تقریباً ثابت بودن سرعت AGV مدت زمان انتقال نیز معمولاً معلوم است.
زمان شروع انتقال در بسیاری از موارد دقیقاً همان زمان درخواست داده شده نیست. زیرا در عمل محدودیت هایی نظیر در دسترس نبودن AGV ، وجود ترافیک در راهها و در دسترس نبودن Gantry Crane [2] مانع از سرویس دهی به موقع می شوند. در نتیجه بر عملکرد ترمینال تأثیر منفی می گذارد. شبیه سازی یکی از راههای مؤثر بررسی عملکرد ترمینال می باشد.
۱-۱)ترمینال کانتینری، یک سیستم بزرگ
یک ترمینال کانتینری مجموعه ای عظیم از بیش از صد عدد AGV و دهها عدد جرثقیل Gantry Crane و دهها بلوک ذخیره سازی کانتینر به همراه چندین جرثقیل اسکله می باشد. مسلماً مدیریت این مجموعه عظیم و استفاده از حداکثر ظرفیت ترمینال کاری بس پیچیده می باشد.
کنترل چنین سیستمی نیاز به روشهای جدید دارد. معمولاً دو تکنیک عمده در ترمینال های کانتینری به کار می رود. ۱- تقسیم مسائل به مسأله های کوچکتر و حل کردن مجزا ۲- شبیه سازی و مدلسازی. به وسیله شبیه سازی گلوگاههای سیستم تشخیص داده می شود و روشهای کنترلی امتحان می شوند. در این پروژه سعی در شبیه سازی سیستم حمل و نقل در ترمینال کانتینری داریم.
۱-۲) معیارهای اندازه گیری عملکرد مطلوب سیستم
تجهیزات موجود در ترمینال در ارتباط با یکدیگر کار می کنند و معمولاً لحظاتی را جهت سرویس دهی سایر تجهیزات معطل می شوند. این باعث می شود که راندمان ترمینال کانتینری پائین بیاید. راندمان کار یک دستگاه برابر با درصد زمان مشغول بودن آن دستگاه به کل زمان می باشد. راندمان با مدیریت صحیح قابل افزایش می باشد. راندمان یک ترمینال را با به کار بردن روشهای مؤثر کنترل بهینه می توان افزایش داد و شبیه سازی یکی از روشهای مؤثر چک کردن نتایج تئوری و پیاده کردن روشهای کنترلی می باشد.
در ترمینال کانتینری معیارهای سنجش بسیاری برای بررسی عملکرد مطلوب سیستم وجود دارد. در اینجا ما سه تا را نام می بریم.
- میزان معطل شدن کانتینر انتقالی در مبداء جهت رسیدن AGV و باز زدن آن
- میزان معطل شدن AGV در مبداء انتقال جهت فرا رسیدن زمان انتقال
- مسافت کل طی شده توسط AGV ها
یک AGV معمولاً در یک شیفت کاری دنباله ای از کانتینر ها را انتقال می دهد. به این صورت که پس از انتقال کانتینر اول به مقصد، به مبداء انتقال دوم می رود و آن را بار می زند و به مقصد می رساند. سپس به مبداء انتقال سوم می رود و الی آخر. هر سه معیار عملکرد بیان شده در بالا باید کمینه شوند.
۱-۳) کارهای ارائه شده در این پروژه
در فصل دوم صورت مسأله انتخاب AGV جهت انجام تک تک انتقالها تشریح می شود سپس مدلی برای فرموله کردن مسأله به نام مدل شبکه حمل و نقل ارائه می شود و معیار های بیان شده در بالا به صورت تابع هزینه بیان می گردد. در فصل سوم مدل شبکه انتقالات برای حل مسأله تشریح شده و تابع هزینه ارائه می شود. در فصل چهارم روش goal coordination جهت حل مسأله کنترل بهینه تشریح و پیاده سازی می گردد. فصل پنجم یک مسأله بهینه سازی نمونه به همراه شبیه سازی را بیان می کند.
فصل دوم) صورت مسأله
در این بخش محیط یک ترمینال کانتینری نمونه که سعی در شبیه سازی آن داریم را معرفی می کنیم. شکل (۳) این محیط را نشان می دهد.
شکل (۳) محیط شبیه سازی شده ترمینال کانتینری
در این شکل مستطیلهای رنگی کانتینرها می باشند که در محوطه انبار چیده شده اند. نوارهای زرد رنگ جرثقیل می باشند که وظیفه بارگیری و تخلیه کانتینرها را به عهده دارند. نوارهای مشکی جاده ها می باشند و حرکت AGV ها صرفاً از طریق جاده ها صورت می گیرد. جاده های یک طرفه با یک پیکان مشخص شده اند و جاده های دوطرفه عریضتر هستند. حرکت AGV ها صرفاً از طریق جادهها صورت می گیرد. نقاطی که کانتینرها باید بین آنها جابجا شوند به قرار زیر هستند.
جرثقیل اسکله: محل بار زدن و تخلیه کانتینر از کشتی
جرثقیل محوطه: محل بار زدن و تخلیه کانتینر در محوطه انبار
دروازه: محل تحویل کانتینر به/ از مشتری
به این ترتیب با توجه به شکل (۳) به تعداد ۱۹ مکان تخلیه و بار گیری داریم. همچنین AGV ها همانطور که در شکل نشان داده شده است ابتدا در پارکینگ هستند.
هر AGV در یک شیفت کاری باید دنباله ای از کانتینرها را جابجا کند. به این صورت که به مبداء کانتینر اول برود و آن را بار زده به مقصد برساند. سپس به مبداء کانتینر دوم رفته آن را بار زده به مقصد برساند و … . همچنین AGV در ابتدا در پارکینگ قرار دارد و پس از پایان کارها به پارکینگ بر میگردد.
حرکت AGV ها با سرعت ثابت انجام می شود و باید بدون برخورد صورت بگیرد. لذا AGV ها در سر چهارراه ها باید بر اساس حق تقدم عبور نمایند.
فصل سوم) مدلسازی شبکه راه ها
شبکه راه ها را که در شکل (۳) مشاهده می کنید به صورت یک گراف مسطح می باشد که در اینجا در پی پایه ریزی آن می باشیم. شماتیک این گراف به صورت شکل (۴) می باشد. در این شکل هر نقطه توقف AGV و هر تقاطع، همچنین هر پیچ به صورت یک گره از گراف نشان داده شده است. تمامی این گره ها نام گذاری شده و نام آنها در شکل مشخص می باشد. همچنین تمامی راه ها که یالهای گراف می باشند به صورت خطوط افقی و عمودی کشیده شده اند. راه های یک طرفه به صورت خطوط جهت دار کشیده شده اند. طول راه ها به وسیله اعدادی که در اطراف شکل نوشته شدهاند مشخص می گردد. این اعداد بر حسب متر می باشند. قواعد نام گذاری گره ها به صورت زیر می باشد:
: نقاط توقف AGV ها در پارکینگ
: نقطه ورود به پارکینگ
: نقطه خروج از پارکینگ
G: دروازه، محل تحویل کانتینر از/ به مشتری (توقف AGV جهت تخلیه / بارگیری)
: گره های جرثقیلهای اسکله (توقف AGV جهت تخلیه / بارگیری)
: گره های جرثقیلهای محوطه انبار (توقف AGV جهت تخلیه / بارگیری)
سایر گره ها: تقاطع ها و پیچها
شکل (۴) گراف شبکه راه ها در ترمینال کانتینری (ابعاد داده شده به متر می باشند)
|
این گراف قبل از آن که قابل استفاده باشد، باید به صورت ریاضی تعریف گردد. فرم متداول ماتریس الحاقی[۳] برای توصیف گراف در اینجا غیر واقعی به نظر می رسد، چرا که به دلیل تعداد بالای گره ها (۹۸ عدد)، ماتریس بزرگ می شود (۹۸*۹۸) و بیشتر عناصر آن صفر می شوند.
لذا بایستی یک روش ابتکاری جهت توصیف ریاضی گراف پیدا کرد که این مهم در بخش بعد آمده است.
۳-۱) توصیف ریاضی گراف مسطّح شطرنجی
با توجه به نظم موجود در گراف مسطح شکل (۴) که یالهای آن عمودی و افقی هستند با یک روش ابتکاری می توان گراف را به فرم ریاضی تعریف کرد. در این روش ابتکاری، گراف به کمک چند ماتریس توصیف می شود. قبل از هر چیز گراف شطرنجی را تعریف می کنیم
گراف شطرنجی :
یک گراف مسطح که تمامی یالهای آن به صورت خطوط مستقیم افقی و عمودی می باشند را گراف شطرنجی گوییم. شکل (۵) یک مثال ساده را نشان می دهد.
شکل (۵) : یک گراف شطرنجی در صفحه مختصات
ماتریس گره :
گره های موجود در گراف در نظمی شبیه ماتریس قرار گرفته اند. یعنی می توان فرض کرد که این گره ها اعضای یک ماتریس می باشند که همه اعضای ماتریس یاد شده لزوماً یک گره از گراف نیستند. شکل (۶) با اضافه کردن برخی خطچین ها به شکل (۵) ایجاد شده و ماتریس مزبور را تداعی می کند. با فرض این که محور x ها محور اول باشد این یک ماتریس ۴*۳ است. نام این ماتریس را ماتریس گره گذاشته و با نشان می دهیم. این ماتریس شامل نام گره های گراف شطرنجی می باشد. عناصری از ماتریس که معادل هیچ گرهی از گراف نیستند را با تهی نشان می دهیم. ماتریس را در زیر می بینید.
(۱)
شکل (۶) تشخیص ماتریس گره ها از روی شکل
برای توصیف یک گراف شطرنجی ماتریس گره به تنهایی کافی نیست. بلکه باید یالهای ماتریس هم توصیف شوند. در اینجا نیاز به تعریف گره های مجاور داریم.
گره های مجاور :
گره هایی در گراف می باشند که نام آنها در ماتریس گره ها در یک ردیف یا یک ستون باشد و بین نام آنها نام هیچ گره دیگری نباشد (بین نام چنین گره هایی درآیه های تهی می توانند باشند). به عنوان مثال گره های H و I گره های مجاور می باشند. این دو گره در ماتریس گره ها در درآیه های ۴*۱ و ۴*۳ قرار گرفته اند و چون درآیه ۴*۲ یک درآیه تهی می باشد گره های فوق گره مجاور می باشند.
ماتریس یالها :
هر یک از یالهای گراف یا عمودی یا افقی هستند که بین گره های مجاور رسم می شوند. به عنوان مثال بین گره های مجاور H و I یک یال جهت دار می باشد. هر دو گره مجاور در ماتریس گره ها یک و فقط یک یال از گراف را مشخص می کنند. بنابراین برای مشخص کردن وجود یک یال کافی است که گره های مجاور مربوط به آن یال را مشخص کنیم. وقتی که گره های مجاور مربوط به یک یال در ماتریس گره ها در یک سطر باشند تنها مشخص کردن گره سمت چپ کافی است. در حالتی که آنها در یک ستون باشند تنها مشخص کردن گره بالایی کافی است. لذا برای مشخص کردن یالهای گراف دو ماتریس تشکیل می دهیم و که هم بُعد با میباشند و درآیه های آن توسط روابط زیر تعیین می شوند.
|
(۲)
|
(۳)
با توصیفات فوق این ماتریسها به صورت زیر می شوند.
(۴) و
ماتریسهای یال و ماتریس گره گراف را کاملاً مشخص می کنند. تنها چیزی که باقی مانده طول یالها می باشد. معادل با ماتریسهای و که وجود و نوع یالها را کاملاً مشخص می کنند. ماتریسهای و را تشکیل می دهیم که طول یالها را مشخص می کنند. برای گراف این ماتریسها به صورت زیر می شوند.
(۵) و
۳-۲) توصیف ریاضی شبکه راه ها
در اینجا بنا داریم شبکه راه ها را که در شکل (۴) آورده ایم به روش بخش ۳-۱) توصیف کنیم. برای این کار ابتدا باید ماتریس گره را تشکیل بدهیم.
شکل (۷) دو زیرگراف شبکه راه ها
از آنجا که تعداد گره ها در پارکینگ خیلی زیاد است، تشکیل یک ماتریس برای همه گراف کاری مشکل است. لذا بخش پارکینگ را جدا می کنیم. شکل (۷) دو زیر گراف شکل (۴) یعنی گراف ترمینال کانتینری و گراف پارکینگ را نشان می دهد. این دو زیر گراف دارای گره های مشترک و می باشند. گراف های و توسط ماتریسهای به ابعاد (۹*۹) و (۲*۲۳) توصیف می شوند.
۳-۳) تشکیل گرافیکی نقشه ترمینال
در این پروژه علاوه بر شبیه سازی حرکت AGV ها، این حرکت را به صورت را به صورت گرافیکی نمایش می دهیم. لذا نقشه ترمینال باید به صورت گرافیکی تشکیل شود. نقشه ایجاد شده را در شکل (۴) مشاهده کردید. این نقشه با تعداد ۷۲۹ دستور Plot کشیده شده است. تمامی رسمها با محاسبات دقیق مختصات مربوطه رسم شده است. نکاتی که در این ترسیم ها وجود دارد به قرار زیر است. تمامی رسمها به جزء جرثقیلها به صورت دو بعدی و در صفحه x-y هستند. جرثقیلها نیز بالاتر از صفحه x-y کشیده شده اند تا هنگامی که AGV ها از محل جرثقیل می گذرند، از زیر آن عبور کنند. در این نقشه راه های دو طرفه عریضتر کشیده شده اند.
فصل چهارم) مسیر حرکت AGV
هر حرکت AGV جهت انتقال کانتینر بین دو محل مبداء و مقصد صورت می گیرد. که مبداء و مقصد ممکن است هر یک از گره های جرثقیل ، یا دروازه G در گراف شبکه راه ها در شکل (۴) باشد. همچنین AGV ها ابتدا در پارکینگ هستند و حرکت خود را از پارکینگ آغاز می کنند. در پایان پس از انجام همه انتقالات هر AGV به پارکینگ باز می گردد. محل هر AGV در پارکینگ به صورت اختصاصی می باشد.
مبداء و مقصد حرکت:
هر حرکت AGV بین دو گره از گره های و و G و صورت می گیرد. این گره ها در شکل (۸) مشاهده می نمایید.
شکل (۸) گره های مبداء و مقصد حرکت AGV
اما برای یک حرکت علاوه بر مبداء و مقصد، مسیر حرکت نیز باید مشخص باشد. مسیرهای حرکت باید دارای این خاصیت باشند که گره های جرثقیل و را قطع نکنند مگر آن که AGV قصد توقف در آن گره ها را داشته باشد. در اینجا نیاز به الگوریتمی است که با در نظر گرفتن مبداء و مقصد حرکت مسیر حرکت را تولید نماید. با توجه به تعداد بالای حالتهای مبداء و مقصد، الگوریتم فوق باید قادر باشد بالغ بر ۱۱۷۸ مسیر حرکت را تولید نماید.
مسیر حرکت:
در شکلهای (۹-الف) و (۹-ب) مسیرهای حرکت برای انواع مختلفی از گره های مبداء و مقصد به صورت گرافیکی نشان داده می شود. هر مسیر به وسیله رشته ای از حروف U, D, R, L به نمایندگی از کلمات Up, Down, Right, Left معرفی می گردد که مسیر حرکت را به طور یکتا مشخص می کند. تعداد قطعات جاده در طول مسیر برابر با طول رشته فوق می باشد. به عنوان مثال مسیر حرکت که در شکل (۹-ب) نشان داده شده است، می تواند به وسیله رشته ULULLDL نشان داده شود و AGV در سر هر گره از مسیر جهت حرکت بعدی را از این رشته تشخیص می دهد.
شکل (۹-الف) مسیرهای حرکت نمونه ، ، و
شکل (۹-ب) مسیرهای حرکت نمونه ، ، و
فصل پنجم) شبیه سازی حرکت AGV ها
در این فصل مسأله شبیه سازی حرکت AGV ها را در نظر می گیریم. موضوعاتی از قبیل متغیرهای حالت AGV و پیشگیری از برخورد AGV ها در اینجا بررسی می شوند. مسائل مربوط به انیمیشن را در فصل بعد بررسی می کنیم.
۵-۱) دنباله کارها
فرض کنیم تعداد M عدد کانتینر قرار است که جابجا شوند. گره های مبداء و مقصد آنها در بردارهای و و زمان آماده بودن کانتینرها جهت انتقال در بردار قرار دارد. هر AGV انتقال دنباله ای از کانتینرها را به عهده دارد که شماره آنها در بردار قرار دارد و AGV آنها را به ترتیب منتقل می کند.
۵-۲) متغیرهای حالت AGV
شبیه سازی حرکت هر AGV i ام مستلزم به کار بردن تعدادی متغیر حالت گسسته و پیوسته می باشد. در این بخش به معرفی آنها می پردازیم، متغیر i نشان دهنده شماره AGV می باشد.
لیست کانتینر هایی که AGV باید آنها را جابجا کند در بردار Jobs{i} قرار دارد. متغیرهای حالت AGV i ام به قرار زیر می باشند:
JobIndex(i) : یک عدد صحیح که مشخص می کند AGV در حال انتقال چندمین کانتینر از کانتینر های محوله است، یا اگر خالی است به سمت چندمین کانتینر حرکت میکند.
Path{i} : یک رشته از حروف U, D, R, L که مشخص کننده مسیر حرکت در حرکت کنونی AGV از مبداء تا مقصد است. طول این رشته برابر با تعداد قطعات مسیر می باشد.
PathIndex(i) : یک عدد صحیح که مشخص کننده شماره قطعه کنونی از مسیر حرکت می باشد.
MoveKind(i) : نوع حرکت کنونی AGV را نشان می دهد و مقادیر ‘U’, ‘D’, ‘R’, ‘L’, ‘S’ را میگیرد که به ترتیب حالتهای Up, Down, Right, Left, Stop را نشان میدهد.
Node(i) : یک بردار که موقعیت گرهی که AGV در آن قرار دارد و یا از آن به تازگی عبور کرده است را در ماتریس گره ها مربوط به شبکه راه ها نشان می دهد.
State(i) : یک عدد مثبت که وقتی AGV در حال حرکت باشد نشان می دهد که در کجای یک قطعه جاده قرار دارد (مسافت پیموده شده از آن). مقدار آن با حرکت AGV با نرخ متناسب با سرعت افزایش می یاید. وقتی که AGV در یک گره متوقف باشد این متغیر مدت زمان سپری شده در حالت توقف را نشان می دهد.
roadLen(i) : طول قطعه کنونی جاده را که AGV در آن می باشد را در خود دارد. این مقدار برای چک کردن این که طول جاده طی شده است مورد نیاز می باشد.
ابزار شبیه سازی متغیرهای حالت:
متغیرهای حالت فوق در هر لحظه وضعیت AGV را به صورت کامل نشان می دهند. همانطور که مشاهده می کنید متغیرهای State و roadLen پیوسته هستند. فقط متغیر MoveKind متغیر گسسته ای است که تعداد حالت محدودی (۵ حالت) دارد. متغیر Path هم در هر لحظه شامل یک رشته از حروف است. سایر متغیرهای حالت متغیر گسسته با تعداد حالات بالا هستند، که تعداد آن هم متغیر است.
بهترین کاندید برای شبیه سازی متغیرهای حالت گسسته با تعداد حالت بالا یا متغیر، برنامه نویسی است. به خصوص نرم افزار Matlab با توجه به قابلیت بالای کار کردن با ماتریسها ابزار مناسبی برای این شبیه سازی می باشد. ابزاری نظیر Matlab State Flow Toolbox برای شبیه سازی متغیرهای حالت گسسته با تعداد حالت محدود و ثابت مناسب است لذا در این شبیه سازی قابل توصیه نیست.
۵-۳) توضیح شیوه شبیه سازی حرکت AGV ها
شبیه سازی توسط تابع MoveAGVs.m صورت می گیرد. این تابع هر ۱/۰ ثانیه یک بار از محیط simulink توسط برنامه MoveSync.mdl صدا زده می شود. کار این برنامه فقط سنکرون سازی حرکت می باشد.
شبیه سازی به صورت چندسطحی می باشد:
سطح اول:
مقصد بعدی AGV را انتخاب میکند. JobIndex(i) شماره کانتینری را که قرار است جابجا شود اعلام می کند. لحظه تصمیم گیری در مورد مقصد بعدی وقتی است که زمان توقف به پایان برسد. سه حالت دارد:
حالت اول: اگر AGV خالی باشد، مقصد بعدی حرکت AGV مبداء کانتینر انتقالی انتخاب میشود.
حالت دوم: اگر AGV پر باشد، مقصد بعدی حرکت برابر با مقصدِ کانتینر انتخاب می شود.
حالت سوم: اگر انتقال کانتینرها به پایان رسیده باشد، مقصد بعدی حرکت پارکینگ انتخاب میشود.
سطح دوم:
دقیقاً پس از تعیین مقصد AGV با صدا زدن تابع TravelPath.m مسیر حرکت به سمت آن به دست می آید ( Path{i} ).
سطح سوم:
حرکت AGV بر روی مسیر آغاز می شود. تعداد قطعات مسیر برابر با طول رشته Path{i} میباشد. شماره قطعه ای از مسیر که هم اکنون AGV در آن قرار دارد در متغیر حالت PathIndex(i) قرار دارد و مسافتی از آن که طی شده است در متغیر حالت State(i) قرار دارد. گرهی که AGV تازه پشت سر گذاشته است در متغیر حالت Node(i) ذخیره شده است. این متغیرها در شکل (۱۰) نشان داده شده است.
شکل (۱۰) متغیرهای حالت وقتی که در حال طی کردن مسیر می باشد.
پس از پایان این قطعه از مسیر و رسیدن AGV به گره بعدی متغیر حالت Node(i) مقدار جدید را دریافت می کند و State(i)=0 می شود. PathIndex(i) یک واحد اضافه می شود و مقدار بعدی رشته Path{i} خوانده می شود که جهت حرکت بعدی AGV را معین می کند. متغیر حالت roadLen(i) طول قطعه جدید مسیر را دریافت می کند. سپس AGV حرکت در قطعه بعدی مسیر را آغاز می کند.
AGV به همین ترتیب ادامه می دهد تا به گره مقصد برسد و در آنجا توقف کند. مدت توقف یک مقدار تصادفی محدود است. پس از سپری شدن زمان توقف وظیفه سطح اول جهت تعیین مقصد بعدی حرکت آغاز می شود.
۵-۴) پیش گیری از برخورد AGV ها
از آنجا که AGV ها با سرعت ثابت مساوی حرکت می کنند تنها در سر چهار راه ها احتمال برخورد آنها وجود دارد. برای پیش گیری از برخورد آنها در چهار راه قاعده ساده زیر را اجرا میکنیم.
قاعده پیش گیری از برخورد: هنگامی که دو AGV به سمت یک گره در حال حرکت هستند و قدر مطلق تفاضل فاصله آنها تا آن گره از یک حد از پیش تعیین شده کمتر باشد، AGV که دورتر به چهار راه می رسد توقف کرده، منتظر بماند تا AGV نزدیکتر از چهار راه بگذرد.
در مدت زمانی که AGV منتظر می ماند همه متغیرهای حالت آن ثابت می مانند.
فصل ششم ) نمایش حرکت AGV ها
در این مسأله animation و متحرک سازی تصویر AGV ها بیان می شود. با توجه به این که مکان اولیه AGV ها در پارکینگ می باشد، هر AGV به صورت یک مستطیل تو پر به ابعاد برابر با ابعاد کانتینر در پارکینگ رسم می شود. این رسم توسط تابع fill انجام می شود.
تابع fill در خروجی خود یک عدد بر میگرداند که به منزله یک handle جهت دسترسی های بعدی به شکلِ رسم شده عمل می کند. Handle های مربوط به شکل AGV ها را در یک آرایه ذخیره می کنیم. به وسیله تابع set که بر روی handle شکلها عمل می کند می توان خصوصیات آن از قبیل رنگ شکل را عوض کرد. توابع delete و rotate با عمل بر روی handle شکلها باعث حذف و چرخش آنها می شوند.
نمایش حرکت AGV به این صورت انجام می شود که هر زمان موقعیت AGV در جاده تغییر می کند شکل آن را به اندازه لازم در جهت مناسب انتقال می دهیم. زمانی هم که AGV در سر پیچ می چرخد شکل آن را به اندازه حول مرکز خودش میچرخانیم. پر و خالی شدن AGV را هم به وسیله تغییر رنگ آن نمایش می دهیم.
همانطور که گفته شد چرخش شکل AGV را با تابع rotate انجام می دهیم. اما متأسفانه جهت انتقال آن تابعی پیدا نشد. برای انتقال یک شکل دو راه وجود دارد.
- delete کردن و دوباره کشیدن شکل در محل جدید (مناسب برای حالتی که کشیدن آن آسان باشد)
- ایجاد انتقال به وسیله ترکیب دو چرخش مساوی و مختلف الجهت حول دو نقطه (مناسب برای حالت شکلهای پیچیده)
ما در این پروژه از روش دوم جهت تولید انتقال استفاده کردیم. شکل (۱۱) نشان می دهد که چگونه ترکیب دو چرخش مساوی و مختلف الجهت معادل یک انتقال است. اثبات این موضوع را در اینجا نمی آوریم. در این پروژه اندازه دوران را برابر با میگیریم که تعیین مرکز دوران را ساده تر میکند.
شکل (۱۱) دو چرخش مساوی و مختلف الجهت حول و برابر با انتقال با بردار
شکل محوطه ترمینال را در بین شبیه سازی میتوانبه وسیله جعبه ابزار مربوطه zoom کرد یا زاویه نظر را عوض کرد. اگر منظر شکل به هم ریخت کافی است یک بار پنجره شکل را minimize نمایید.
اجرای برنامه های شبیه سازی:
جهت اجرای شبیه سازی برنامه Simulate.m را اجرا کنید. این برنامه، برنامه های wayMap.m و drawMap.m را جهت ایجاد ماتریسهای توصیف کننده گراف جاده ها و رسم نقشه ترمینال صدا می زند. سپس تعداد AGV ها و تعداد کانتینرهای انتقالی پرسیده می شود. تابع getJobs.m مبداء و مقصد کانتینرهای انتقالی را به صورت تصادفی تعیین می کند. پس از مدت کوتاهی شبیه سازی آغاز می شود و با اجرای برنامه MoveSync.mdl تابع MoveAGVs.m هر ۱/۰ ثانیه یک بار اجرا می شود و متغیرهای حالت را به روز کرده و شکلAGV ها را حرکت می دهد.
متغیرهای حالت به صورت متغیرهای ماندگار[۴] درون تابع MoveAGVs.m تعریف می شوند. ویژگی متغیرهای ماندگار در این است در آغاز اجرای تابع دارای مقدار به جای مانده اجرای قبل میباشند. همچنین در پایان تابع MoveAGVs.m دستور drawnow باعث می شود که تغییرات شکل نشان داده شوند. اگر این دستور استفاده نشود اجرای متوالی برنامه ها مانع از نمایش تغییرات شکل می شود.
برنامه های یاد شده با ربان Matlab نسخه ۵/۶ نوشته شده اند. ممکن است اجرای آنها بر روی نسخه های پایینتر میسر نباشد.
[۱] Automatic Guided Vehicle
[۲] جرثقیل بار کننده کانتینر به AGV
[۳] ماتریسی که در آن
[۴] persistent