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