2- محاكاة نظام هاتف بسيط

عرض المشكلة:

نظام هاتف بسيط يتكون من خطين خارجيين. المكالمات التي تأتي من الخارج تصل كل  100±60 ثانية. إذا كان الخط مشغولا فإن الطالب يعيد الطلب بعد مرور 5±1  دقيقة. تستغرق المكالمة 3±1  دقيقة. المطلوب جدولة توزيع الزمن اللازم الذي يستغرقة الطالب لإكمال مكالمة ناجحة. كم طول الوقت المطلوب لإكمال 200  مكالمة؟

عرض البرنامج:

; GPSS World Sample File - TELEPHON.GPS, by Gerard F. Cummings

**************************************************************

*                                                            *

*                                                            *

*        Telephone System Model                              *

*                                                            *

**************************************************************

*    Simple Telephone Simulation                             *

*       Time Unit is one minute                              *

Sets      STORAGE    2

Transit   TABLE      M1,.5,1,20     ;Transit times

          GENERATE   1.667,1        ;Calls arrive 

Again     GATE SNF   Sets,Occupied  ;Try for a line 

          ENTER      Sets           ;Connect call 

          ADVANCE    3,1            ;Speak for 3+/-1 min   

          LEAVE      Sets           ;Free a line

          TABULATE   Transit        ;Tabulate transit time

          TERMINATE  1              ;Remove a transaction

Occupied  ADVANCE    5,1            ;Wait 5 minutes

          TRANSFER   ,Again         ;Try again

**************************************************************

 

 وصف النموذج سطرا بسطر:

STORAGE

مجموعة كائنات المخزن Storage Entity Sets وبسعة كلية 2 وضعت لتمثل خطين للتلفون الخارجي.

TABLE

الجدول الإنتقالي Table Transit  عرف بحيث يعطي مضلع تكراري لزمن المكالمات والذي يعرض تفاعليا علي الشاشة. مباشرة قبل إنهاء المتعامل فإن القيمة العددية SNA لـ " الزمن في النظام "  M1 تجدول وهي تمثل الوقت المستغرق للطالب من بدئه في الطلب وحتي إنتهائه من التحدث.

GENERATE

متعامل يمثل مكالمة يولد كل 100±60  ثانية.

GATE

قالب GATE Block  يرسل المتعامل الي قالب Occupied  (مشغول) عندما تكون جميع الخطوط مشغولة وهذا يحدث عندما تكون مجموعة كائنات المخزن ممتلئة وهي تمثل طالب يجب عليه الإنتظار قبل إعادة الطلب.

ENTER

إذا كانت 0  او 1  من وحدات المخزن في الإستخدام فإن المتعامل يمر من خلال GATE Block وإلي ENTER Block وبهذا تستخدم وحدة تخزين اخرى اما إذا كانت جميع وحدات التخزين مشغولة فلن يسمح بمرور اي متعامل من خلال GATE Block  وبهذا فإن مرور اي متعامل من خلال ENTER Block  يمثل مكالمة تم ايصالها بنجاح.

ADVANCE

في حالة مروره فإن المتعامل ( المكالمة) تدخل قالب ADVANCE Block  والذي يمثل مكالمة تستغرق 180±60  ثانية ويستقر في القالب حتي يمر زمن المحاكاة.

LEAVE

عند دخول متعامل قالب LEAVE Block فإن هذا يجعل احد وحدات مجموعة التخزين متوفرة لمتعامل آخر أي انة يمثل توفر خط خارجي جديد.

TABULATE

قالب TABULATE Block  يضيف طول مكالمة الي المضلع التكراري لأزمنة المكالمات المجمعة في Table Transit

TERMINATE

قالب TERMINATE Block  يزيل متعامل ( مكالمة) من المحاكاة بعد إكمال الطلب.

ADVANCE

المتعامل الذي يأتي الي ADVANCE Block والمعلم بالعلامة Occupied يكون قد حاول وفشل في الحصول علي وحدة تخزين ( خط خارجي ) من مجموعة كائنات المخزن Storage Entity Sets وهي تمثل زمن الإنتظار الذي يجب قضائة قبل ان يحاول الطلب مرة اخرى.

TRANSFER

قالب TRANSFER Block  يرسل كل متعامل الي قالب  GATE Block    المعلم بالعلامة  Again حيث هناك يحاول المتعامل في الحصول علي وحدة تخزين من مجموعة كائنات المخزن بمعني آخر ان الطالب يعيد طلب المكالمة. هؤلاء المتعاملين يمثلوا المكالمات التي بدأت ولم تتم. إذا وجد طالب جديد كل من الخطين مشغول فإن قالب  GATE Block والمعلم بالعلامة Again  يرسله للإنتظار في قالب ADVANCE Block المعلم بالعلامة Occupied   لمدة 5  دقائق تقريبا بعد هذا التأخير فإن المتعامل يقفذ عائدا قالب GATE Block  للمحاولة مرة اخرى الطلبات الناجحة تمر من قالب GATE Block ويحدث لها تأخير يمثل المكالمة ثم تغادر المحاكاة. لآحظ ان عدد خطوط الهاتف نمذجت ككائنات مخزن بسعة 2 لاحقا سيكون من السهل إجراء تجارب علي الأثر الذي يسببه إضافة خطوط اخرى. إذا لم تتمكن مكالمة من المرور فإن المتعاملين العائدين اليها ينتظروا لمدة 5  دقائق محاكاة في القالب ADVANCE Block  المعلم بالعلامة Occupied وعدد المتعاملين هنا يمثل عدد المكالمات التي تنتظر إعادتها.

العبارة TABLE statement  سوف تنتج معلومات مفصلة عن طول المكالمات المحاولة وهكذا بجدولة  M1 SNA  مباشرة قبل إنهاء المتعاملين فإننا سنتمكن من بناء مضلع تكراري لكيفية طول الوقت الذي يستغرقة طالب لإكمال مكالماتهم.

إجراء المحاكاة:

لإجراء المحاكاة وتوليد تقرير معياري إختار  File / Openوفي صندوق الحوار اختار   TELEPHONثم اختار   Openوبعد هذا يجب خلق المحاكاة بإختيار Command / Create Simulation

 ثم إختيار  Command / STARTوفي صندوق الحوار استبدل  1بـ  200ثم اضغط  OKستنتهي المحاكاة بعد مرور 200 متعامل بقالب TERMINATE Block وهذا يمثل إكمال 200  مكالمة. عند نهاية المحاكاة سوف يقوم GPSS  بكتابة تقرير لملف التقرير التقليدي Telephon.1.1 والذي يظهر بشكل ذاتي في نافذة التقرير.

مناقشة النتائج:

من قيمة End Time  في التقرير المعياري نري ان  359.16 دقيقة مرت لإنهاء المكالمة رقم  200طبعا إعادة المحاكاة مرات اخري سيعطي قيم مختلفة ولكن قريبة من هذة النتائج وذلك للتغير العشوائي الجدول  Table المسمي  Transit يعطي معلومات مفصلة عن كم طول الفترة التي يأخذها الطالب لإكمال مكالمته. برغم ان معظم المكالمات استغرقت اقل من 9.5  دقيقة الى ان هناك مكالمات استغرقت اوقات اكثر من هذه بكثير والتي قد تسبب عدم رضاء الزبائن.

داخل المحاكاة:

لنتقصى الآن شرط نهاية المحاكاة the ending condition of the simulation  والذي ولد التقرير التقليدي السابق، اقفل نافذة التقرير ودعنا نستخدم نافذة العبارات الجبرية Expressions Window  لننظر الي بعض الصفات العددية للنظام System Numeric Attributes اولا تأكد من زمن نهاية المحاكاة، إختار

Window / Simulation Window / Expressions Window

تفتح نافذة تحرير العبارات Edit Expressions Window  في صندوق الحوار وفي خانة Label field اكتب   Timeوفي خانة Expression field اكتب  AC1هذا يدعنا ننظر الي الزمن الحالي، اضغط علي   View و علي   Memorize الآن لننظر إلي فعالية utilization خطوط الهاتف (كأجزاء من ألف) في صندوق الحوار وفي خانة Label field بدل القيمة الحالية بـ  Utilوفي خانة العبارات  Expression field استبدل القيمة الحالية بـ  SR$Setsواضغط علي View  وعلي Memorize  واخيرا دعنا نضيف متوسط الزمن الذي يشغل فية خط الهاتف، ففي صندوق الحوار وفي خانة Label field استبدل القيمة الحالية بـ  Avg. Call Time وفي خانة التعابير Expression field استبدل القيمة الحلية بـ   ST$Setsواضغط علي View وعلي  Memorize  ثم اضغط  OKالفعالية هنا يعبر عنها كجزء من الف ونري ان الخطوط لها فعالية  83% وهكذا بالرغم من وجود بعض الزمن الغير مستخدم فإن التأخر في الطابور يعتبر غير مقبول. لنغلق نافذة التعابير.

لنفتح بعض نوافذ الرسومات، إختار

Window / Simulation Window / Storages Window

 

هذا يعطي منظر مفصل لنافذة التخزين Storages Window Detail View لاحظ اننا نري فعالية الخطوط هنا ايضا  83% . من العلامات السفلى والعليا  (Min and Max values) للمخزن المستخدم نري ان في المحاكاة كان هناك اوقات كانت فيها0 و 1 او  2  من الخطوط مشغولة، إستخدم العمود المنزلق في اسفل النافذة لتشاهد القيم التي تناقش. إذا فتحنا نافذة الجدول Table Window فسنرى المدرج التكراري لأزمنة تكملة المكالمات، إختار

Window / Simulation Window / Table Window

وحيث انه يوجد جدول واحد فقط في هذه المحاكاة فإننا سنري الكلمة Transit في الصندوق المتدلى، إختار  OK تأكد من تكبير النافذة حتي تري الجدول بشكل كامل، متوسط زمن المكالمات هو2.99  دقيقة كما هو مبين بـ ST SNA في نافذة التعابير  Expressions Windowولكن متوسط الزمن شاملا إعادة المكالمة هو 14.27  دقيقة كما نشاهد في نافذة الجدول Table Window أي ان الطالبين يقضوا زمن طويل جدا لإعادة طلب المكالمة إذا ما صدف وكانت الخطوط مشغولة وهذا غير مقبول.

لننظر الآن اي هم المتفاعلين Transactions  ، إختار

Window / Simulation Window / Blocks Window

هذه نافذة القوالب Blocks Window لاحظ انه يوجد 15  زبون ينتظروا إعادة طلب مكالماتهم، انظر لتاريخ دخول القالب في عامود عدد الدخول  Entry Count

  

Figure 2—1. Blocks Window Detailed View Showing TRANSFER Block.

 

ما الذي يحدث هنا؟ انظر الي عدد المتعاملين Transaction الذين دخلوا قالب ADVANCE Block   الثاني ( لإنتظار إعادة المكالمات) 561!  ولكن اجريت فقط   200 مكالمة. لنلاحظ نافذة القوالب Blocks Window وبإستخدام مفاتيح  Ctrl+Alt+1 سوف نجري المحاكاة خطوة خطوة يدويا، إفعل ذلك 15  او 20  مرة، هل شاهدت مالذي يحدث؟ عدة طالبين للمكالمات والذين يعيدون الطلب يجدوا الخطوط مشغولة وعليهم الإنتظار و إعادة الطلب عدة مرات. سوف نقوم بإعادة إجراء ومشاهدتها من خلال عدة نوافذ رسومية. لنبدأ بقفل جميع النوافذ ماعدى نوافذ Blocks و  Journal و  Model

لنعيد فتح نافذة العبارات الجبرية Expressions Window  وبالقيم التي حفظناها سابقا مع إضافة رقم المكالمة call number  والذي هو ايضا رقم المتعامل النشط Active Transaction number ، إختار

Window / Simulation Window / Expressions Window

في صندوق حوار تحرير العبارات وفي خانة  Label fieldاكتب   Call no وفي خانة التعابير  Expression field اكتب  XN1اضغط علي  Viewوعلي  Memorize وقبل إقفال النافذة سنسترجع العبارات المحفوظة سابقا والتي حفظناها في المحاكاة الاولى لهذا فلكل عبارة محفوظة إضغط علي  Expression ثم علي   View أخيرا وبعد ظهور كل التعابير اضغط علي  OK لنتخلص من كل المتعاملين Transactions ونصفرالعدادات الإحصائية. فمن النافذة الرئيسية  Main Menuإختار

Command / Clear

وفي نافذة القوالب Blocks Window  حرك مؤشر الفارة فوق القالب الأخير في النموذج والذي هو قالب TRANSFER  إضغط علي  The TRANSFER Block وعلي The Place Icon in the Debug Toolbar  ثم حرك النوافذ الثلاثة Blocks و  Journal و Expressions بحيث يمكنك مشاهدتها بوضوح، إختر

Command / START

وفي صندوق الحوار بدل الواحد الصحيح بـ   1000,NPوإضغط OK المحاكاة ستتوقف عند اول محاولة لدخول القالب وهذا يبين ان الطالب لم يجد خطا شاغرا. أكمل المحاكاة  Continue وذلك بالضغط علي Ctrl+Alt+C كرر هذه العملية عدة مرات في كل مرة تتوقف فيها المحاكاة تحت شرط التوقف Stop Condition المحاكاة سوف تستمر في التوقف كل ما كان علي طالب المكالمة ان ينتظر وسوف تشاهد رسائل التتبع  trace messages في نافذة الجريدة Journal Window  والتي تبين رقم المتعامل Transaction number  للمتعامل المتوقف Stopped Transaction ، حيث انه يوجد قالب توليد GENERATE Block  واحد فقط في النموذج فيمكننا ان نري بواسطة رقم المتعامل كم مرة علي المكالمة ان تتوقف وفيما إذا كانت هناك مكالمات متوقفة للمرة الثانية.

دعنا الآن نزيل شرط التوقيف ففي نافذة القوالب  Blocks Window إضغط علي   The Transfer Block وعلي  The Remove Icon in the Debug Toolbar  ثم اقفل نوافذ  Blocksو  Expressions  

استمر في إجراء المحاكاة وذلك بالضغط علي Ctrl+Alt+C .

سوف نراقب المحاكاة وهي تجري وذلك من خلال نافذة Storages Window Non-Detailed View إختر

Window / Simulation Window / Storages Window

ومن النافذة الرئيسية  Main Menuإختر

Edit / Entity Details

لتفعيل نافذة Non-Detailed View

لنشاهد الآن المدرج التكراري للمكالمات المتأخرة وهو يبنى ، إختار

Window / Simulation Window / Table Window

وحيث انه يوجد جدول واحد فقط وإسمه موجود في صندوق الحوار الظاهر لذلك اضغط علي  OK

الجدول المسمى  Transit  ماهو إلا مدرج تكراري ديناميكي ويمكن النظر اليه اي وقت شئنا، يتضح من الجدول ان عديد من الزبائن لايتحصل علي الخدمة مباشرة وطبعا هذا يسبب لهم الكثير من الإنزعاج.

ماذا لو اضفنا خطوط اكثر؟ لنحاكي 4 خطوط بدلا من إثنان. إجعل نافذة التخزين فعالة باضغط علي  The Storages Window ثم اختار Command / Clear ثم  OKثم اختار

Command /Custom وفي صندوق الحوار اكتب

Sets Storage 4 ثم  OK

هذا سيعدل عدد خطوط الهاتف. لنرى ماذا سيحدث، اختار Command / START وفي صندوق الحوار استبدل الواحد الصحيح بـ   1000ثم إضغط  OK

فعالية خطوط الهاتف اقل بكثير من السابق، بالنظر الي المدرج التكراري لطول المكالمة نجد انه افضل بكثير، في الواقع لو نظرنا الي نافذة القوالب في شكلها المفصل سنشاهد ان قالب TRANSFER Block  لم يرتاد وذلك لأن اي من الطالبين لم يحتاج إعادة الطلب. ويبدو ان اربعة خطوط ازالت كل المشاكل السابقة. في الحقيقة يجب برهنة هذا بطريقة إحصائية وذلك بالأمر  ANOVA Command

تمرين: جرب ثلاثة خطوط هاتف وقارن النتائج.