3-  محاكاة نظام تخزين بمراجعة
دورية
عرض
المشكلة:
مخزون منتج نهائي يتحكم به
بواسطة مراجعة دورية اسبوعيا. المخزون الإبتدائي يتكون من 1000  وحدة. الطلب اليومي يتغير بين 40  و  63  وحدة وبإحتمال متساوي. المخزمن المستهدف هو 1000  وحدة، اي ان
تعديل المخزون يتم بطلب الفرق بين المخزون الموجود و  1000وحدة. فإذا كان المخزون الموجود هو 800  وحدة او
اكثر فلن يعدل المخزون لذلك الاسبوع. الشركة تعمل بنظام خمسة ايام للإسبوع. زمن
التقدم lead
time  لتوصيل الطلبية هو اسبوع واحد. حاكي نظام
المخزون لمدة 200  يوم وتحق فيما إذا كان هناك اي نقص للمخزون  stockouts 
عرض
البرنامج:
;
GPSS World Sample File - PERIODIC.GPS, by Gerard F. Cummings
***********************************************************************
*                                                                    
*
*                                                                    
*
*       Periodic
Review Inventory Model                              
*
*       Time
units are in days                                       
*
***********************************************************************        
*  Definitions of non block entities 
        
RMULT     
39941
Stock    STORAGE    10000               
;Warehouse can hold 10000
Stock    TABLE     
S$Stock,100,100,20  
;Table for inventory amts 
Orderqty
VARIABLE   Target-S$Stock       ;Order
quantity
Demand   VARIABLE   RN1@24+40           
;Daily demand
Target   EQU        1000                
;Initial stock level
Reorder  EQU        800                 
;Reorder point 
***********************************************************************
*  The reorder process 
        
GENERATE   5,,,,1              
;Review xact, Priority=1
        
TEST L    
S$Stock,Reorder,Skip ;Is stock < Reorderpt
        
ASSIGN    
2,V$Orderqty         ;Parameter 2=Order
quantity
Custwait
ADVANCE    5                   
;Lead time is 5 days
        
ENTER     
Stock,P2            
;Stock increases by P2
Skip     TERMINATE                      
;Ordering xact is finished
***********************************************************************
*  The daily demand decrements quantity on
hand
        
GENERATE   1                   
;Daily demand transaction
        
ASSIGN    
1,V$Demand          
;Parameter 1(P1)=daily demand
        
TABULATE   Stock               
;Record daily stock
         TEST GE    S$Stock,P1,Stockout  ;Can order be filled
        
LEAVE     
Stock,P1            
;Remove demand from stock
        
TERMINATE  1                   
;Daily timer
Stockout
TERMINATE  1                   
;Daily timer
***********************************************************************
*  Initialize the inventory 
        
GENERATE   ,,,1,10             
;Set initial stock
        
ENTER     
Stock,Target         ;Set init stock
level=target
        
TERMINATE                      
;Xact is terminated
***********************************************************************
 
 
وصف
النموذج سطرا بسطر:
RMULT 
هذا الأمر يضع نواة مولد
الاعداد العشوائية. بتغيير النواة يمكننا قياس تأثير التغير العشوائي البحت، تكرار
المحاكاة يشكل الأساس في إستخدام امر ANOVA في GPSS  
STORAGE
كائن التخزين للمخزون  Storage Entity Stock  اعطيت له سعة 10000
وهي اعلى بكثير من مستوى التخزين العادي ويمثل السعة الكلية للمخزن warehouse  حيث انه يمكن لنا السماح لمستوى المخزون بان يزيد عن
المخزون المستهدف. محتوي المخزن Storage المستخدم سوف نستخدمه ليمثل مستوى
المخزون الحالي. لهذا فإن مستوي المخزون الحالي سيتوفر خلال المحاكاة كصفة نظام
عددية SNA
تسمي S$Stock
TABLE
جدول يسمي Stock ووضع لتجميع تاريخ مستوى المخزون اليومي
ORDERQTY 
الكمية المزمع طلبها وهي مستوى
المخزون المستهدف  Targetناقص
كمية المخزون الموجودة stock on hand
DEMAND
الطلب اليومي ويتغير من 40   الي  63  وحدة وبإحتمالات متساوية. العامل  @ يرمز الى الباقي بعد القسمة  modulo arithmetic فهو يحول الرقم العشوائي من المجال  0 و  999إلي المجال  0  و  23ونحصل علي النتيجة النهائية بإضافة  40
الرقم العشوائي الناتج نحصل
علية من خلال الصفة العددية للنظام  SNA المسماة  V$Demand
TARGET 
مستوى المخزون المستهدف  target stock level
ويسمي  Target وقد وضع مساويا  1000 إستخدام اسماء للقيم
يجعل الأمر اسهل عند إجراء تجارب علي طريقة إعادة الطلب  reorder scheme
REORDER 
نقطة إعادة الطلب  reorder pointوسميناها  Reorder ووضعت مساوية لـ  800 كما ذكرنا سابقا إستخدام اسماء للقيم يجعل
الأمر اسهل عند إجراء تجارب علي طريقة إعادة الطلب  reorder scheme
سننظر الآن إلي العلاقات التي
تعرف القوالب التي يدخلها المتعاملين Transactions  عند إجراء المحاكاة.
GENERATE 
قالب  GENERATE Block  يولد المتعاملين  Transaction  مرة كل  5  أيام محاكاة. من الآن فصاعدا يجب إستخدام اليوم كوحدة
زمنية لهذه المحاكاة. هنا متعامل يغادر قالب GENERATE كل خمسة ايام محاكاة لغرض إختبار مستوى
المخزون وإعادة الطلب عند الحاجة فقط.
TEST 
قالب  TEST Block  يحدد فيما إذا كان إعادة الطلب ضروري ام لا وهذا يحدث
إذا كانت قيمة  S$Stock  اقل من  Reorder
وإلا فإن المتعامل الداخل يقفز
إلي  Skip و يتم إنهائه بدون محاكاة إعادة طلب.
ASSIGN
إذا  كانت نتيجة قالب TEST Block  هي شرط إعادة طلب  reorder condition
 فإن المتعامل يمر من خلال القالب  ASSIGN Block وهذا يعطي المعلم رقم 2  parameter number 2 لهذا المتعامل الكمية التي
يعاد طلبها.
ADVANCE 
المتعامل الذي يكتشف شرط إعادة
الطلب ينتظر  5  ايام محاكاة
والتي تمثل زمن التقدم للطلب order lead time لاحظ ان المتعاملين الآخرين لايمنعوا من
الطلب.
ENTER 
عند وصول الطلب بعد خمسة ايام
فإن المتعامل يدخل قالب  ENTER Block  ويضيف الي قيمة  S$Stock  القيمة الموجودة في المعلم رقم 2  parameter number 2
TERMINATE 
ينهى المتعاملون  Transactions  بدون إنقاص عداد الإنهاء Termination Count
( عداد الإنهاء يستخدم لتعيين
شرط نهاية المحاكاة) 
GENERATE 
متعامل يمثل الطلب اليومي،
تولد مرة كل يوم محاكاة
ASSIGN 
الطلب اليومي يوضع في المعلم
رقم 1 للمتعامل 
TABULATE 
قالب  TABULATE Block  يجدد المدرج التكراري للمستوى اليومي للمخزون قبل تحقيق
اي طلبات
TEST 
قالب  TEST Block يتحقق من نقص المخزون  stockout فإذا وجد نقص فلا يحقق الطلب ويرسل المتعامل
إلي القالب المعلم بـ Stockout 
LEAVE 
إذا كان مستوى المخزون كاف فإن
المتعامل ينقص من  S$Stock بمقدار
الطلب اليومي ويقوم بهذا بدخوله قالب LEAVE Block  وتعيين المعلم رقم 1 كالمعلم B  (  operand B) 
TERMINATE 
ينهى المتعامل وينقص عداد
الإنهاء  Termination Count  بمقدار  1مؤشرا نهاية يوم محاكاة
TERMINATE 
قالب  TERMINATE Block  المعلم بالرمز  Stockout  يدخل فقط إذا شعر متعامل يومي ان طلبة اليومي لايمكن
تحقيقه
GENERATE 
هذا القالب الثالث  GENERATE يولد متعامل واحد عند بداية المحاكاة لبدء
مستوى المخزون وله اعلى افضلية لكي لا يبطل بالمتعاملين الآخرين
ENTER 
المتعامل المبدئي  initializing
Transaction  يستخدم القالب
 ENTER
Block  لتغيير قيمة  S$Stock  للمستوى المستهدف عند بداية المحاكاة
TERMINATE 
ينهي المتعامل المبدئي بدون
إنقاص عداد الإنهاء.
ملاحظات:
علي عكس لغات البرمجة ذات
الطبع العام فإن GPSS
يسمح لعدة متعاملين بالتواجد
في اماكن مختلفة في المحاكاة عند اي لحظة زمنية. في هذا النموذج يتولد المتعاملين
عند كل من الثلاثة قوالب GENERATE والتي تولد ثلاثة انواع مختلفة من المتعاملين. ففي
الجزء الأعلى يتولد متعامل كل خمسة ايام عمل لمراجعة المخزون وإعادة الطلب إذا
احتاج الأمر. وبعد خمسة ايام يصل الطلب ويوضع مع المخزون. في الجزء الأوسط
المتعاملين هنا يمثلوا الطلب اليومي و يسببوا في إزاحة الوحدات من المخزون إذا
كانت الكمية كافية، ولكن قبل تحقيق الطلبية يجدول مستوى المخزون في الجدول  Stock.
المتعامل الوحيد المتولد في الجزء الأخير يضع قيمة المخزون البدائي لـ 1000 وحدة ويعطي له اعلي افضلية حتي نتأكد انه سيكون اول
متعامل نشط  Active Transaction
وحدات الزمن هنا هي اليوم.
المحتوى الحالي لكائن المخزن Storage Entity  المسمى Stock يمثل مستوى المخزون الحالي وهذه القيمة يتحصل عليها من SNA المسمى S$Stock الجدول المسمى  Stock يجمع مدرج تكراري لمستوى المخزون اليومي.
القيم المسماة  Target و  Reorder  تمثل معلمين مهمين جدا لهذا النموذج فـ  Target تضع مستوى المخزون المستهدف و  Reorder  تضع مستوى المخزون الذي يسبب إعادة الطلب. بإستخدام
متغيرات إسمية يمكننا بسهولة تغيير هذه المعالم لكي نستكشف بدائل اخرى.
إجراء
المحاكاة:
لإجراء
المحاكاة وتوليد التقرير المعياري اختار  File / Open  وفي صندوق الحوار اختار  PERIODIC  ثم اضغط  Open بعدئذن نولد المحاكاة ، اختار  Command / Create Simulation  ثم اختار  Command / START وفي صندوق الحوار بدل   1بالقيمة  200 ثم اضغط  OK ستنتهي المحاكاة بعد تحقيق  200  طلب يومي، عند إنتهاء المحاكاة يولد البرنامج تقرير في
الملف  Periodic.1.1. ويعرض التقرير تلقائيا. 
مناقشة
النتائج:
الجدول  Stock  يوضح ان نظام المخزون يحقق كل الطلبات اليومية ولم
يعاني من اي نقص  outage كما نلاحظ انه لاتوجد اي قيمة مستوى يومي مجدولة اقل من
 300
وهذا يبين ان عمل النظام مرضى.
داخل
المحاكاة:
لنستكشف حالة نهاية المحاكاة
والذي ولد التقرير المعياري. اولا لنهيء نافذة العبارات لمشاهدت قيمتين. اختار 
Window / Simulation Window / Expressions Window
في نافذة تحرير العبارات وفي
خانة الرمز  Label  اكتب  
No. Stockouts
وفي خانة العبارات اكتب  N$Stockout هذا سيجعلنا نشاهد stock outages  اضغط على 
 View و على  Memorize  لنضيف مستوي التخزين الأقصي maximum stock level  ففي صندوق الحوار عند  Label  استبدل القيمة الحالية بـ  Max Stock وفي خانة التعابير استبدل القيمة الحالية
بـ   SM$Stock اضغط علي  View
 و علي   Memorize لنضيف ايضا مستوي المخزون الحالي  current stock level
  في
خانة Label   استبدل القيمة الحالية بـ   Stock وخانة التعابير تستبدل بـ   S$Stockالآن اضغط علي   View  وعلي     Memorize 
لنضيف اخيرا رقم اليوم، غير خانة الرمز الي   Day وخانة العبارات الي   AC1 ثم اضغط علي   View وعلي Memorize   أخيرا اضغط علي  OK نظامنا ناجح في منع نقص المخزون outages  كما نشاهد من قيمة عدد نقص المخزون stockouts
المخزون الأقصي Max Stock  يبين أقصي قيمة لمستوي المخزون خلال المحاكاة وهو اعلي
مما كنا نتوقع.
المدرج التكراري لمستوى
المخزون اليومي نحصل عليه بإختيار 
Window / Simulation Window / Table Window
وبما انه يوجد جدول واحد
إضغط   OK
لاحظ ان متوسط مستوى المخزون
هو  785.45 وهذا يمثل المال المعطل في البضائع المخزنة وهو مقياس
لتكلفة النظام، لنتابع المحاكاة ملاحظين جدول  Stock 
ايضا سنراقب رقم اليوم ونحن
نشاهد نافذة العبارات، سوف نبدأ المحاكاة ونجعلها تجري لمدة 100  يوم. إختار  Command / START وفي صندوق الحوار استبدل  1 بـ   100,NP (NP تعني لاتولد تقرير) ثم اختار  OK، سنشاهد البيانات وهي
تتجمع خلال المئة يوم الإضافية من التشغيل. العملية الداخلية للمحاكاة جدا بسيطة،
عند البداية المتعامل من الجزء الثالث في النموذج يبدأ كائن المخزن  Storage Entity  المسمي Stock . بعدئذن في كل يوم متعامل طلب يتولد في الجزء الأوسط
من النموذج وكل خامس يوم متعامل إعادة طلب يتولد في الجزء الأعلى من النموذج.
إعادة الطلب لايتحقق إلا بعد خمسة ايام اخرى. اقفل نافذتي الجدول  Tables  و العبارات Expressions  .
لنفتح الآن نافذة القوالب في
المشهد المفصل، اختار .
Window / Simulation Window / Blocks Window
هذا سيبين العدد الكلي لدخول
المتعاملين 

شكل نافذة القوالب في المشهد
المفصل
سوف نشاهد تاريخ جري المحاكاة
، اختار   Command / Clear ثم اختار 
 OK و اختار  Command / START وفي صندوق الحوار استبدل  1 بـ 
 100,NP واضغط  OKلاحظ مختلف النشاطات في الأجزاء المختلفة في المحاكاة ،
كما تشاهد توجد ثلاثة انواع مختلفة من المتعاملين 
تمرين: جرب بتخفيض المخزون
المستهدف إلي 800  وحدة  ونقطة الطلب
إلي 600  وحدة. قارن النتائج.