العودة إلى المدونة
مكتبات Noorjax

مكتبة مجموعة المصاعد

يحتوي AnyLogic على كائن مصعد أصلي يعمل مع المشاة فقط. نظراً لأنه في كثير من الأحيان تحتاج النماذج إلى وكلاء عاديين وموارد لاستخدام المصاعد أيضاً، لم يكن مصعد المشاة كافياً. بالإضافة إلى ذلك، غالباً ما تعمل المصاعد في مجموعات حيث تتحرك لالتقاط الطلبات من طوابق مختلفة. تغطي هذه المكتبة هذه الفجوة، لكنها تعمل أيضاً مع المشاة.

شاهد هذا النموذج أثناء العمل في الرابط التالي: https://cloud.anylogic.com/model/35315a4b-59b7-4849-a7c6-4a88d466651b

يمكنك أيضاً مشاهدة العرض التوضيحي بالفيديو في الرابط التالي: https://youtu.be/FKvWgCZJ2r0

كيفية التنزيل

يمكنك الحصول على النسخة المجانية المحدودة هنا: Noorjax Elevator Library on Github

ستحتاج إلى ترخيص للحصول على الوظائف الكاملة. النسخة المجانية محدودة بحد أقصى ساعة واحدة من وقت المحاكاة.

كيفية الحصول على ترخيص

للحصول على ترخيص، اتبع التعليمات في الرابط التالي:

/ar/blog/getting-a-license-for-a-library/

سعر هذه المكتبة:

  • الاستخدام الأكاديمي - سنة واحدة: 59 يورو (يجب أن يتم الشراء باستخدام بريد إلكتروني جامعي)

  • الاستخدام التجاري - سنة واحدة: 200 يورو

يمكن أن تتغير أسعارنا في أي وقت دون إشعار

وثائق مجموعة المصاعد

تم اختبار هذه المكتبة مع AnyLogic 8.9.1. الإصدارات السابقة قد لا تعمل.

الوصف العام

يوسع كائن المصعد هذا ما يقدمه AnyLogic لمصعد المشاة، من خلال السماح لك باستخدامه مع المشاة والوكلاء العاديين ووكلاء نوع الموارد المستخدمة في مكتبة نمذجة العمليات.

تحتوي المكتبة على الكائنات التالية:

  • ElevatorSpecialAgent: هذا هو الوكيل الذي يجب أن يمتد منه أي وكيل سيستخدم هذا المصعد.

  • ElevatorSettings: يحتوي هذا على معلومات المبنى الذي ستُستخدم فيه المصاعد

  • ElevatorGroup: يمثل هذا الكائن مجموعة من n مصعد سيتم استخدامها معاً.

  • TakeElevator: هذه هي كتلة العملية التي ستستخدمها في تدفقك لمكتبة نمذجة العمليات (عند استخدام الموارد و/أو الوكلاء العاديين).

  • TakeElevatorByPed: هذه هي كتلة العملية التي ستستخدمها في تدفقك للمشاة.

  • ElevatorObject: يجب عدم استخدام هذا لأنه يُستخدم داخلياً بواسطة كائن ElevatorGroup.

كيفية تثبيت واستخدام المكتبة

أولاً قم بتنزيل المكتبة من Noorjax Elevator Library on Github واحفظها في مكان آمن.

داخل AnyLogic، أضف المكتبة إلى لوحتك باستخدام زر + في علامة تبويب اللوحة، وابحث عن ملف .jar الذي قمت بتنزيله… احتفظ دائماً بملف .jar هذا في نفس الموقع، وإلا ستواجه مشاكل.

يمكنك سحب وإفلات أي من الكائنات المتاحة لتطوير نموذجك، باستثناء ElevatorObject الذي لا يُستخدم، وElevatorSpecialAgent الذي له شروط خاصة كما هو موضح في القسم التالي.

تستخدم المكتبة ميزة المستويات في AnyLogic، لذا من المهم أن تكون على دراية بها قبل التعامل مع هذه المكتبة.

وكيل المصعد الخاص

من أجل استخدام الكائنات المقدمة من هذه المكتبة، يجب أن يمتد الوكيل من هذا النوع. لهذا تحتاج إلى الذهاب إلى القسم المتقدم من خصائص نوع الوكيل الخاص بك والقيام بذلك هناك كما هو موضح في الصورة التالية:

من خلال الامتداد من نوع الوكيل الخاص هذا، يحصل الوكيل على بعض الوظائف الضرورية.

getDestinationLevel(): يُرجع المستوى الذي يريد الوكيل الذهاب إليه.

setDestinationLevel(Level x): يحدد المستوى الذي يريد الوكيل الذهاب إليه.

عند إنشاء وكيل سيأخذ المصعد، يمكنك تحديد المعلمات التالية:

weigth: هذه معلمة اختيارية يمكنك استخدامها في حالة وجود حد أقصى للوزن المسموح به في المصاعد. إذا لم تكن تريد استخدام هذا، يمكنك تحديد أي قيمة أو ترك القيمة الافتراضية.

إعدادات المصعد

الإعدادات

Token: ستحتاج إلى هذا لتتمكن من استخدام هذه المكتبة بكامل طاقتها. يمكن استخدام التراخيص في جهاز كمبيوتر واحد فقط.

الرسوم المتحركة

Door Animation Update Frequency: يتم تحديث رسوم باب المصعد المتحركة بشكل منفصل. الوقت الأصغر يؤدي إلى رسوم متحركة أكثر سلاسة.

Check New Version: إذا حددت هذا المربع، سيتصل كائن الإعدادات بالخادم للتحقق مما إذا كان هناك إصدار جديد من هذه المكتبة. إذا كان هناك، سيتم طباعة ذلك في وحدة التحكم.

مجموعة المصاعد

الإعدادات

Elevator Settings: تحتاج إلى تحديد إعدادات المصعد لأغراض الترخيص

Waiting Nodes: نظراً لأن مكتبة نمذجة العمليات تتطلب أن يندمج الوكلاء في شبكة أثناء تحركهم، نحتاج إلى تحديد ما هي العقد في كل مستوى هنا. سينتظر الوكلاء في هذه العقد حتى يأتي المصعد. ستحدد هنا جميع العقد. لا تحتاج إلى ترتيبها بأي طريقة معينة، لكن تأكد من أن عدد عقد الانتظار يتوافق مع عدد المستويات المستخدمة بواسطة مجموعة المصاعد هذه. يجب أن تكون عقدة الانتظار في المستوى الذي تنتمي إليه. يجب أن تكون قيمة إحداثي Z صفراً لجميع عقد الانتظار. يجب أن تكون جميع عقد الانتظار مستطيلات.

Number of Elevators: هنا تحدد عدد المصاعد في هذه المجموعة. يمكنك تحديد 1 فقط إذا لم تكن تريد مجموعة.

الأبعاد والحركة

الكائن الذي تراه في لوحة AnyLogic هو التالي، حيث يتوافق مركز المصعد الأول مع مركز المصعد الأيسر، ويتم وضع كل شيء نحو اليمين اعتماداً على الأبعاد والمسافة بين المصاعد:

Space Between Elevators: هنا تحدد المسافة بين المصاعد

Width, Depth and Height: يتم تحديد هذه الأبعاد كما هو موضح في الصورة

Color: هذا سيكون لون المصعد وأبواب المصعد. نقترح استخدام الشفافية لرؤية الوكلاء بالداخل.

Vertical Speed: هذه سرعة المصعد أثناء تحركه لأعلى أو لأسفل. لا يوجد تسارع.

العمليات

Door Time Delay: هذا هو مقدار الوقت الذي تستغرقه أبواب المصعد لتفتح. يُستخدم نفس مقدار الوقت للوقت الذي تستغرقه أبواب المصعد لتغلق.

Use Agent Number Limit: يمكنك اختيار أن تحد المصاعد من عدد الوكلاء الذين يمكن أن يكونوا بالداخل.

Agents Allowed Inside (مرئي إذا كان حد عدد الوكلاء مفعلاً): إذا اخترت استخدام حد عدد الوكلاء، سيكون هذا الحد الأقصى لعدد الوكلاء الذين يمكن أن يكونوا داخل المصعد.

Use Weight Limit: يمكنك تحديد استخدام حد أقصى للوزن الذي يمكن أن يتحمله المصعد.

Maximum Weight (مرئي إذا كان حد الوزن مفعلاً): إذا استخدمت حد الوزن، سيكون هذا هو حد الوزن الذي يمكن أن يتحمله المصعد.

Doors: يمكنك اختيار ما إذا كانت المصاعد ستفتح الباب الأمامي فقط أو كلا البابين الأمامي والخلفي. مهما كان اختيارك، يمكنك فقط اختيار عقدة انتظار واحدة في كل طابق.

Use same levels for all elevators: إذا حددت هذا، ستحصل على قائمة واحدة فقط من المستويات التي ستنطبق على جميع المصاعد.

Levels: هنا يمكنك اختيار المستويات التي يمكن لكل مصعد في المجموعة الذهاب إليها. تأكد من إضافة عدد من القوائم يتوافق مع عدد المصاعد (ما لم تكن تستخدم نفس المستويات لجميع المصاعد). في الصورة التالية، نرى حالة يوجد فيها 4 مصاعد. المصعد الأول، الذي له فهرس 0 ويقع على يسار المجموعة، سيتمكن من الذهاب إلى level وlevel1، والمصعد الثاني إلى level وlevel1 وlevel2، وهكذا. هناك 4 قوائم، مما يعني أن معلمة “عدد المصاعد” يجب أن تكون 4. لاحظ أنه لا يهم بأي ترتيب تضيف المستويات. في هذه الحالة يوجد أيضاً 3 مستويات ممكنة: level وlevel1 وlevel2، مما يعني أنه يجب أن يكون لديك 3 عقد انتظار.

أخذ المصعد

الإعدادات

Elevator Group: هذا يحدد مجموعة المصاعد التي سيتم اختيارها لنقل الوكيل بين المستويات.

Population at Exit: من الإلزامي أن ينتمي الوكيل الذي يأخذ المصعد إلى مجموعة محددة، وعند خروج المصعد، يحتاج الوكيل للعودة إلى نفس المجموعة أو مجموعة مختلفة. يجب عليك تحويل هذه المجموعة إلى قائمة مصفوفة وكلاء كالتالي: (AgentArrayList)population

Resource Population at Exit: إذا تم حجز الوكيل بواسطة مورد، يجب أن يمتد المورد من SpecialElevatorAgent أيضاً ويجب عليك وضع هنا المجموعة التي سينتمي إليها المورد عندما يخرج من المصعد.

العمليات

Use Timeout: هنا تحدد ما إذا كان الوكلاء سينتظرون المصعد إلى الأبد أو سينتظرون فترة زمنية محددة.

Waiting Timeout (مرئي إذا كان المهلة مفعلة): هذا هو مقدار الوقت الذي يكون فيه الوكيل مستعداً للانتظار.

Destination Level: هذا هو المستوى الذي يريد الوكيل الذهاب إليه. إذا كان مستوى الوجهة هو نفس المستوى الحالي، سيذهب الوكيل إلى عقدة الانتظار ويخرج من كتلة Take Elevator. يمكنك استخدام وظيفة الوكيل getDestinationLevel() إذا كنت قد حددت مستوى وجهة للوكيل مسبقاً.

الإجراءات

On Start Waiting: يتم تشغيل هذا الإجراء عندما يصل الوكيل إلى عقدة الانتظار.

On Enter Elevator: يتم تشغيل هذا الإجراء عندما يدخل الوكيل المصعد. لديك فهرس المصعد المخصص متاحاً. تبدأ الفهارس من 0 إلى n-1، حيث n هو عدد المصاعد في المجموعة.

On Exit Elevator: يتم تشغيل هذا الإجراء عندما يصل الوكيل إلى عقدة الانتظار.

أخذ المصعد بواسطة المشاة

تحتوي هذه الكتلة على نفس الخيارات الموجودة في Take Elevator لكن ليس لديها خيار استخدام الموارد (لذا لا يوجد خيار تحديد مجموعة الموارد عند الخروج). بالإضافة إلى ذلك يجب عليك تحديد جوانب المشاة.

جوانب المشاة

Reach Tolerance: يُستخدم هذا لتحديد متى يصل المشاة إلى وجهة عقدة الانتظار.

Comfortable Speed at Exit: ستكون هذه السرعة المريحة للمشاة عندما يبدأ في مغادرة المصعد.

Initial Speed at Exit: ستكون هذه السرعة الأولية للمشاة عند مغادرة المصعد.

Diameter at Exit: سيكون هذا قطر المشاة عند مغادرة المصعد.

الأسئلة الشائعة

كيف تعمل الخوارزمية؟

عندما يصل وكيل إلى عقدة الانتظار، يتم إرسال طلب إلى مجموعة المصاعد، وستحدث الأمور بالأولوية التالية:

  • إذا كان مصعد موجوداً بالفعل على ذلك المستوى ويمكنه الوصول إلى الوجهة، يتم تخصيص ذلك المصعد للوكيل

  • سيتم اختيار أقرب مصعد يمكنه الوصول إلى المستوى الذي يتواجد فيه الوكيل ويمكنه الوصول إلى وجهة الوكيل وسيتم تحريكه نحو مستوى الوكيل

  • إذا توقف مصعد عند المستوى الحالي للوكيل وأمكن ركوب المصعد، سيستخدم الوكيل ذلك المصعد، حتى لو تم إرسال مصعد آخر لذلك الوكيل من قبل

سيستمر المصعد في التحرك بنفس الاتجاه والتقاط الوكلاء في جميع المستويات طالما يمكنه ذلك وطالما يوجد وكلاء بالداخل.

لا أرى المصاعد بشكل صحيح في العرض ثلاثي الأبعاد

اعتماداً على الشفافية المستخدمة للون المصعد، قد تصبح المصاعد غير مرئية اعتماداً على الكائنات ثلاثية الأبعاد الأخرى في المشهد وزاوية الكاميرا. يمكنك ضبط الشفافية لحل هذا. ستشاهد المصاعد دائماً بدون شفافية.

أحصل على خطأ يقول أن الوكيل يجب أن يكون في نفس الشبكة

يمكن أن يحدث هذا إذا حددت الوجهات بشكل غير صحيح. على سبيل المثال إذا أرسلت مورداً إلى level3 عندما تكون عقدة المنزل في level2، فليس من الممكن للوكيل إيجاد مسار من level3 إلى level2 عند مغادرة المصعد. يجب أن تكون حذراً في إرسال الوكلاء إلى المستويات الصحيحة.

هل تعمل مع الناقلات؟

أصدرت AnyLogic مؤخراً الوظيفة التي نحتاجها لاستخدام الناقلات مع إصدارها 8.9.1، لذا يمكننا الآن إضافتها، لكننا سندرجها في الإصدار التالي إذا كان هناك اهتمام.

هل يمكنني تحديد أين تبدأ المصاعد؟

لا، حالياً تبدأ المصاعد عموماً عند أدنى مستوى مسموح به بشكل عام، لكن تكوينات مختلفة لمستواك قد تؤدي إلى مواضع بداية مختلفة. قد يتم تحسين هذا في المستقبل.

أحصل على خطأ مع getLevel()

عقدة انتظار المصعد، عند استخدام مكتبة نمذجة العمليات يجب أن توضع في شبكة. تستخدم مكتبة المصعد وظيفة getLevel() الداخلية، وهذه الوظيفة موثوقة فقط إذا كانت العقدة المستخدمة في شبكة. تأكد من أن عقدة الانتظار تنتمي إلى واحدة.

نموذجي المُصدَّر لا يعمل

عندما تصدر نموذجاً، لا يتطلب ترخيصاً، طالما أنك صدرته مع ترخيص (لكل من السحابة وتصدير JAVA). من أجل تصديره، يجب أن تكون قد شغلت نموذج المحاكاة مرة واحدة على الأقل في AnyLogic مع تشغيل الإنترنت، مما سيولد ملف licenseKey.txt صالح (إذا كنت قد اشتريت ترخيصاً). يجب دمج هذا الملف في أي نسخة مُصدَّرة، وللقيام بذلك تحتاج إلى الذهاب إلى خصائص resources/data/licenseKey.txt وتفعيل “Resource is referrenced from user code”. سيسمح هذا للنموذج بتصدير ملف licenseKey.txt، كما ترى في الصورة التالية:

#Simulations