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 
تمرين: جرب ثلاثة خطوط هاتف
وقارن النتائج.