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  وحدة. قارن النتائج.