معرفی اختصاری زبان Gpss
1-3 مقدمه
در فصلهای گذشته چندین مدل شبیهسازی از سیستمهای صفی مورد بررسی قرار گرفت. اگر دقت کرده باشید متوجه میشوید که یک مدل شبیهسازی شامل دستورالعملها یا اعمالی از قبیل اضافه کردن، جستجو کردن، خارج ساختن عضوی از یک لیست،تولید اعداد تصادفی با توزینهای مختلف، جمعآوری مشاهدات و محاسبه آماری آنها میباشد. بعضی از اعمال انجام شده در یک مدل شبیهسازی به سادگی به وسیلهی یک یا چند دستورالعمل از یک زبان معمولی کامپیوتری قابل پیادهسازی میباشند ولی بعضی دیگر نیاز به اطلاعات بیشتر از چگونگی ساختمان دادهها در آن زبان یا مهارت بیشتر در برنامهنویسی دارند. بنابراین یک محدودیت عملی محسوب میشوند.
وجود این محدودیت و همچنین مشترک بودن اعمال موجود در مدلهای شبیهسازی موجب شد که زبانهای مخصوص شبیهسازی نسبت به زبانهای عمومی کامپیوتری مثل FORTRAN، تصمیمگیری در مورد انتخاب یک زبان عمومی یا اختصاصی به عوامل گوناگون از قبیل، آگاهی مدل ساز، پیچیدگی مدل، قابلیت دسترسی و ….. بستگی دارد.
در توضیح این چنین میتوان گفت که ممکن است مدل ساز تا به حال از یک زبان مخصوص شبیهسازی استفاده نکرده باشد و در مقابل از یک زبان عمومی آگاهی کافی داشته باشد. مسلم است که مدل ساز ترجیح میدهد که زحمت برنامهنویسی پیچیدهتر را با زبان عمومی به خود بدهد و وقتی را برای یادگیری زبان مخصوص شبیهسازی صرف نکند. از طرفی وجود یا عدم وجود یک زبان شبیهسازی در سیستم کامپیوتری مورد استفاده نیز یک عامل تعیین کننده میباشد.
همان طور که ذکر شد عامل مهم دیگر در تصمیم گیری، پیچیدگی سیستم یا مدل آن است در مورد سیستمهای ساده گاه استفاده از زبانهای عمومی، سادهتر و سریعتر نیز خواهد بود ولی هر چه مدل پیچیدهتر و گستردهتر میشود مشکلات برنامهنویسی آن با زبانهای عمومی بیشتر و امتیاز زبانهای اختصاصی آشکارتر میگردد.
در این فصل به معرفی اختصاری یکی از زبانهای مخصوص شبیهسازی به نام Gpss میپردازیم.
2-3 زبان Gpss
زبان شبیه سازی Gpss برای اولین بار توسط شرکت IBM و در دههی 70 ارائه شد. این زبان برای شبیه سازی سیستمهای گسسته به خصوص سیستمهایی که دارای صف باشند طراحی شده است دارای ورژنهای متعددی است از جمله
Gpss/v , Gpss /H , Gpss/v, Gpss /36, Gpss قدری قویتر و توسعه یافتهتر میباشد. از این به بعد هر جا صحبت از Gpss میشود منظور Gpss v است.
Gpss برای انجام شبیهسازی از تکنیک پردازش فرایندها استفاده میکند و یک مدل شبیهسازی را به یک یا چند فرایند تقسیم کرده به طوری که هر فرایند تشکیل از یک یا چند دستور یا بلاک بوده که میتوانند همزمان با یکدیگر اجرا شوند. هر یک از دستور العملهای Gpss یک فعالیت از سیستم را شبیه سازی میکنند و شامل یک مجموعه پارامترهای ورودی میباشند.
در بخشهای بعدی هر یک به طور مفصل تشریح می شوند.
توجه داشته باشید که در مدلهای Gpss با دو دسته اشیا سر و کار داریم. این دو دسته را میتوان اشیا فاعل و مفعول نامید و به عبارت دیگر یک دسته سرویس دهنده ها و دستهی دیگر سرویس گیرندهها (مشتریها) میباشند. به عنوان مثال در یک سیستم بانکی، باجهها، کارمندان جزو دستهی سرویس دهندهها و مشتریها جز دسته سرویس گیرندهها میباشند. در یک سیستم حمل و نقل مکانهای حمل و تحویل جز دستهی اول و وسایل حمل و نقل (کامیون، اتوبوس و ….) از دستهی دوم می باشند.
در Gpss اشیا دسته اول را facility(وسیله ) و Storage unit (انباره) و اشیا دستهی دوم را Transaction مینامند و به عبارت دیگری اشیا دسته اول را وسایل و انبارهها و اشیا دسته دوم را اشیا موقت نامگذاری میکنیم.
تفاوت وسایل و انبارهها در این است که یک وسیله در یک زمان توسط تنها یک شی موقت اشغال میگردد در حالی که یک انباره به وسیله چند شی موقت (تا حد گنجایش آن) و به طور همزمان اشغال می گردد.
توجه داشته باشید که هر یک از وسایل، انبارهها، اشیا موقت و دیگر اشیا یا ساختارهای یک مدل شبیهسازی دارای مشخصههای تعریف شدهای میباشند. این مشخصهها را مشخصات عددی استاندارد نامگذاری نمودهاند. به عنوان مثال مقدار فعلی ساعت شبیهسازی، تعداد اشیا موقتی که در حال حاضر در یک بلاک قرار دارند ، طول فعلی صف از جمله مشخصات عددی استاندارد میباشند در شرح هر یک از دستورالعملها یا بلاکهای Gpss مشخصات عددی استاندارد مربوط به آن توضیح داده خواهد شد. این مشخصات را همچنین میتوانید در جدول 1-3 در پایان فصل مشاهده نمایید.
قالب کلی دستورات Gpss به صورت زیر میباشد.
Comment و پارامترها نام دستور شماره خط
روند اجرای دستورات نیز از دستورات بالاتر به دستورات پایینتر است.
1-2-3 اشیا موقت
دستور Terminate , Eenerate
ورود و خروج اشیا موقت در مدل یک سیستم به وسیله دستور العملهای Generate A,B,C,D Terminate Aصورت می گیرد. به عبارت دیگر دستور Generate برای ایجاد اشیا موقتی مورد استفاده قرار میگیرد و دستور Terminate آنها را در موقتی که حضورشان دیگر در سیستم مورد نیاز نمیباشد از مدل حذف یا از بین می برد. در واقع هر شیای که به دستور Terminate برسد از سیکل شبیهسازی خارج میشود و حافظهای که با دستور Generate به آن اختصاص داده شده بود آزاد می گردد. شرح پارامترهای دستور Generate عبارت است از
A: متوسط زبان بین تولید اشیا را نشان میدهد. اگر A ذکر نشود مقدار آن برابر صفر گرفته میشود.
B: پارامتر اصلاحی زمان بین ورود، اگر B مقداری ثابت یا یک متغیر باشد، آن گاه زمان بین تولید هر دو شی موقت تصادفی و دارای توزیع یکنواخت در فاصله [A-B,A+B] است. مسلم است که اگر B ذکر نشود یا مقدارش صفر باشد، زمان بین تولید مقدار ثابت A خواهد بود و اگر به جای B نام یک تابع بیاید آنگاه زمان بین تولید اشیا برابر است با حاصلضرب A در مقدار تابع.
C: فاصلهی زمانی تولید اولین شی شبیهسازی از ابتدای شبیهسازی . اگر C ذکر نگردد اولین شی در زمان صفر تولید میشود.
D: تعداد کل اشیا موقتی که در طول شبیهسازی تولید میگردند در صورت ذکر نکردن آن این تعداد نامحدود است. توجه داشته باشید که اگر ذکر پارامتری لازم نباشد جای آن خالی نمیماند و ویرگولها پشت سر هم و بدون فاصله درج میشوند.
مثال 1 دستور Generate 5,1,10,50 پنجاه شی موقتی با فاصلهی زمانی یکنواخت در فاصله (4,6) تولید میکند و اولین شی نیز در زمان 10 تولید میشود.
مثال 2 دستور 100، 5 Generate یکصد شی موقتی را هر 5 ثانیه یک بار تولید می کند.
توجه در مثال 1 زمان اتمام شبیهسازی 510 واحد زمان طول میکشد. و در مثال 2 زمان اتمام شبیهسازی 500 واحد زمان طول میکشد.
مثال 3 دستور 5،2،7، Generate تعداد نامتناهی شی موقت با فاصله ی زمان یکنواخت در فاصلهی (3،7) تولید میکند و اولین شی نیز در زمان 7 تولید میشود.شرح پارامترها دستور Terminate
A: برای کنترل مدت زمان اجرا یا تعداد اشیا تولید شده در سیستم شبیهسازی مورد استفاده قرار میگیرد.
در بخش 3-2-3 در مورد این پارامتر بیشتر توضیح داده خواهد شد.
دستور Assign A,B برای مقداردهی حافظههای هر شی موقتی از این دستور استفاده می شود. شرح پارامترهای Assign A,B عبارت است از
A: شماره خانهی حافظه
B: مقداری که میخواهیم در داخل خانهی حافظه قرار گیرد.
مثال 4-3: Assign 1,5 مقدار 5 در خانهی شماره یک حافظه قرار میدهد.
مثال 4-5: Assign 1,10 عدد 10 را با محتویات خانهی شماره یک ضرب میکند. و نتیجه را در خانهی شماره یک حافظه قرار میدهد.
مثال 6-3- Assign 3+10 عدد 10 را با محتویات خانهی شمارهی سه حافظه جمع میکند و نتیجه را در خانه شماره حافظه قرار می دهد.
برای استفاده از مقادیری که دستور Assign در حافظه قرار داده میتوانیم از علامت * در پشت پارامتر A استفاده نماییم به مثال زیر توجه نمایید.
مقدار 1 را در خانهی شماره دو حافظه قرار میدهد. Assign 2,1
Terminate 1 معادل Terminate *2
مقدار پارامتر A در دستور Terminate معادل مقدار 5 میباشد در واقع *2 یعنی محتویات خانهی شماره 2 حافظه.
دستور Priority
برای تعیین اولویت یک شی موقت مورد استفاده قرار میگیرد.
A اولویت جدید شیای است که وارد این دستور یا بلاک میگردد و میتواند عددی بین 0 تا 127 باشد.
هر چه عدد A بیشتر باشد اولویت بهتر میباشد.
2-2-3 وسایل، انبارهها و صف ها
هر یک از وسایل را در Gpss می توان به عنوان یک سرویسدهنده در نظر گرفت.
توجه داشته باشید که هر وسیله، تنها به وسیله یک شی از سیستم به اشغال درآمده و تا پایان سرویس مربوطه در اشغال آن باقی میماند.
دستور Seize A
اشغال یک سرویس دهنده در صورت آزاد بودن توسط دستور Seize A انجام میپذیرد.
A نام سرویسدهنده میباشد.
اگر سرویسدهنده آزاد نباشد ( مشغول سرویس باشد) و یک شی دیگر بخواهد از دستور Seize استفاده کند در این صورت سرویس دهنده بلاک می شود.
دستور release A
این دستور باعث آزاد شدن سرویس دهنده می شود و نشان دهنده اتمام سرویس، سرویس گیرنده هم میباشد.
انباره: به مجموعهای از سرویس دهندهها که سرویسهای مشابه یکدیگر، ارائه میدهند در Gpss انباره میگویند.
دستور Storage
برای ایجاد انباره مورد استفاده قرار میگیرد و قالب اصلی آن به صورت زیر میباشد.
Name Storage A
A: گنجایش انباره
Name نام انباره که شامل 3 تا 5 کاراکتر بوده سه تای اول آن حروف و بقیه حروف یا اعداد انگلیسیاند.
دستور Enter A,B
برای ورود به یک انباره و اشغال یک یا چند واحد از گنجایش آن از دستور Enter A,B استفاده می شود.
A: نام انباره
B: تعداد واحدهای اشغال شونده
دستور leave A,B
برای خروج از انبارهA و آزاد کردن B واحد از گنجایش آن انباره که توسط دستور Enter اشغال شده بود از دستور leave A,B استفاده میکنیم.
به مثال زیر توجه نمایید.
Mem Storage 1600
Enter mem , 300
leave mem, 300
توسط دستور Storage، 1600 خانهی حافظه در اختیار سرویس دهندهها قرار میگیرد. (1600 سرویس دهنده به وجود میآوریم) و نام این انباره mem میباشد. سپس توسط دستور Enter 300, سرویس دهنده از این انباره اشغال میشود. و بالاخره توسط دستور leave حافظهی اشغالی 300 سرویس دهنده آزاد میگردد.
نکته: دستور Enter به مانند دستور Seize عمل میکند. در مثال فوق دستور Enter معادل نوشتن 300 تا دستور Seize می باشد.
نکته: دستور Enter در صورتی اجرا میشود که تعداد سرویس دهندههای آزاد انباره بزرگتر یا مساوی B باشد و الا شی وارد شده به انباره در دستور ما قبل Enter به حالت انتظار تا آزاد شدن تعداد کافی از واحدهای انباره باقی می ماند.
عین همین مطلب برای دستور Seize و اشغال یک سرویس دهنده نیز صادق می باشد.
دستور Queue A,B
برای وارد شدن شی موقت به داخل صف از این دستور استفاده میشود.
دستور Depart A,B
برای خارج شدن شی موقت از داخل صف از این دستور استفاده می شود. شرح پارامترهای A,B دستورهای Queue و Depart
A: نام صف
B: تعداد واحدی که در پیرستن به طور صف افزوده و در خارج شدن از آن کسر می گردد.
این دو دستور معمولا به ترتیب قبل و بعد از دستور Seize یا Enter قرار میگیرند. تا معنی صف برای دریافت سرویس در موقع فرا رسیدن نوبت و اشغال سرویسدهنده بیان گردد.
دستور Advance
هنگامی که یک سرویس شروع میشود یا بخشی از یک انباره اشغال میگردد مدت اشغال ( مدت انجام سرویس) باید معین گردد.
برای تعیین مدت انجام سرویس از دستور Advance A,B استفاده میشود.
A: میانگین زمان اشغال
B: پارامتر اصلاحی زمان اشغال اگر B مقداری ثابت یا یک متغیر باشد. آن گاه زمان اشغال سرویسدهنده تصادفی و دارای توزیع یکنواخت در فاصله [A-B , A+B] است.