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

التحسين مع فترات الثقة

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

يرجى حجز اجتماع معنا أو الاتصال بنا لطلب عرض توضيحي لمعرفة ما إذا كانت هذه المكتبة تناسب احتياجاتك.

كيفية التحميل

يمكنك تحميل المكتبة من الرابط التالي، مع الملفات المساعدة:

https://github.com/noorjax/optimizationWithMontecarlo

ستحتاج إلى ترخيص لاستخدامها.

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

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

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

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

  • الاستخدام الأكاديمي - 3 أشهر: 200 يورو (يجب إجراء الشراء ببريد إلكتروني جامعي، ولا يمكنك استخدامها مع AnyLogic Pro)

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

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

تجربة التحسين

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

المقدمة

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

تعليمات التثبيت

قم بتحميل المكتبة (الرابط في بداية هذا المستند) وحفظها في مكان آمن.

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

في مجلد المشروع الذي تنوي استخدام المكتبة فيه، يجب إضافة ملف Excel المسمى “input” الذي ستتلقاه كجزء من حزمة المكتبة عند شرائها. لا تغير اسم الملف أو أسماء أي من الصفحات فيه وإلا ستحصل على أخطاء.

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

أولاً تحتاج إلى إضافة ملف inputOptimization.xlsx الذي تجده عند تحميل المكتبة في مجلد الملفات الإضافية في مجلد مشروع AnyLogic الخاص بك حيث ستستخدم المكتبة المعلومات الموجودة فيه لتنفيذ التحسين.

يمكنك سحب وإسقاط كائن “Optimization Experiment” المتاح في لوحة أدوات المكتبة في أي وكيل في نموذجك.

الإعداد التالي للتجربة إلزامي في نموذجك: أضف نوع وكيل جديد في نموذجك، سمّه كما تريد، مثلاً MyOptimization. ثم أنشئ تجربة محاكاة جديدة تحتوي على MyOptimization كوكيل المستوى الأعلى. اسحب وأسقط كائن “Optimization Experiment” المتاح وكائن “settingsOpt” من لوحة أدوات المكتبة إلى وكيل MyOptimization وقم بتهيئة المعلمات لهذه الكائنات كما هو موضح في القسم التالي.

لاحظ أن الإعداد الموصوف أعلاه مُفضّل ولكنه ليس إلزاميًا. يمكنك استخدام “Optimization Experiment” في أي وكيل، ومع ذلك تأكد من أن وكيل المستوى الأعلى لتجربة المحاكاة التي تشغلها هو الوكيل الذي يحتوي على كائن “Optimization Experiment” أو أنه وكيل يحتوي على الوكيل الذي يحتوي على الكائن.

تهيئة الكائنات

اسحب وأسقط SettingsOpt وقم بتهيئة المعلمات كما هو موضح أدناه:

الترخيص:

  • الرمز: اكتب الرمز الذي ستتلقاه عند شراء هذه الأداة.

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

اسحب وأسقط تجربة التحسين وقم بتهيئة المعلمات كما هو موضح أدناه:

الترخيص:

  • الإعدادات: اختر كائن settingsOpt الذي يحتوي على الرمز.

وكيل المنطق:

  • نوع الوكيل: نوع الوكيل من المستوى الأعلى. اكتب اسم نوع الوكيل متبوعًا بـ “.class”. مثال: MyAgent.class.

وقت النموذج:

  • وحدات وقت النموذج: وحدات وقت النموذج

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

ملاحظة: عندما تضيف شرط توقف في منطق النموذج الخاص بك، استخدم finishSimulation() بدلاً من stopSimulation().

  • وقت البدء: الوقت الأولي بوحدات وقت النموذج لأفق زمن المحاكاة.

  • تاريخ البدء: التاريخ التقويمي الأولي لأفق زمن المحاكاة.

  • وقت التوقف: يُفعّل فقط عند اختيار خيار “التوقف عند وقت محدد” لمعلمة التوقف وهو الوقت لإيقاف تشغيل النموذج بوحدات وقت النموذج.

  • تاريخ التوقف: يُفعّل فقط عند اختيار خيار “التوقف عند تاريخ محدد” لمعلمة التوقف وهو التاريخ التقويمي لإيقاف تشغيل النموذج.

ستُطبّق معلمات الوقت أعلاه على جميع عمليات التكرار.

التحسين:

  • الهدف: اختر ما إذا كان الهدف من التحسين هو تعظيم أو تصغير دالة الهدف.

  • التعبير: دالة الهدف التي تحتاج إلى تحسينها. عند تعريف هذا التعبير، للوصول إلى وكيل المستوى الأعلى الذي حددته في نوع الوكيل، تحتاج إلى استخدام root ولكن أيضًا تحويله إلى نوع ذلك الوكيل. مثال: ((MyAgent)root).variable

  • عدد التكرارات: عدد التكرارات التي ستُجرى، كل تكرار يشكل مجموعة من الحلول الممكنة.

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

للقيام بذلك، سيتم حساب الفرق (كنسبة مئوية) بين متوسط نتائج جميع الحلول في تكرار والتكرار رقم n بعده. إذا كان هذا الفرق أقل من نسبة معينة x، سيتم إيقاف التجربة. تحتاج إلى تحديد n و x (انظر أدناه) كما تراه مناسبًا.

  • عدد التكرارات المتتالية: يُفعّل فقط عند اختيار التوقف التلقائي وهو عدد التكرارات n كما هو موضح أعلاه.

  • نسبة التغيير: تُفعّل فقط عند اختيار التوقف التلقائي وهي النسبة x كما هو موضح أعلاه. يجب أن تكون قيمة بين 0 و 1.

التكرارات:

  • الحد الأدنى للتكرارات: الحد الأدنى لعدد عمليات تشغيل المحاكاة التي ستُجرى في تجربة مونتي كارلو.

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

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

  • نسبة الخطأ: نسبة التباين حول متوسط التعبير المطلوب. يجب أن تكون قيمة بين 0 و 1.

إجراءات JAVA:

  • الإعداد الأولي: الكود الذي تضيفه هنا سيتم تنفيذه عند إعداد التجربة.

  • قبل تشغيل المحاكاة: الكود الذي تضيفه هنا سيتم تنفيذه قبل كل عملية تشغيل محاكاة (حل). في هذه اللحظة يكون وكيل المستوى الأعلى للنموذج قد تم إنشاؤه بالفعل، لكن النموذج لم يبدأ بعد. يمكنك تنفيذ بعض الإجراءات مع عناصر وكيل المستوى الأعلى، باستخدام ((MyAgent)root).

  • بعد تشغيل المحاكاة: الكود الذي تضيفه هنا سيتم تنفيذه بعد كل عملية تشغيل محاكاة (حل). يمكنك تنفيذ بعض الإجراءات مع عناصر وكيل المستوى الأعلى.

  • قبل التكرار: الكود الذي تضيفه هنا سيتم تنفيذه قبل كل عملية تكرار (من مونتي كارلو) لحل. يمكنك تنفيذ بعض الإجراءات مع عناصر وكيل المستوى الأعلى.

  • بعد التكرار: الكود الذي تضيفه هنا سيتم تنفيذه بعد كل عملية تكرار (من مونتي كارلو) لحل. يمكنك تنفيذ بعض الإجراءات مع عناصر وكيل المستوى الأعلى.

  • بعد التجربة: الكود الذي تضيفه هنا سيتم تنفيذه بعد انتهاء التجربة.

لاحظ أنه يمكنك ترك هذه فارغة إذا لم يكن هناك إجراء مطلوب.

تصدير النتائج:

  • إظهار زر التصدير: إذا تم اختيار هذا الخيار، سيظهر زر في نهاية التجربة يتيح لك تصدير النتائج.

تعليمات الاستخدام

عندما يتم تهيئة جميع العناصر المسحوبة بشكل صحيح، قم بتشغيل تجربة المحاكاة (في هذه المرحلة يجب أن يكون ملف inputOptimization.xlsx مغلقًا). اذهب إلى مجلد النموذج وافتح ملف inputOptimization.xlsx. في الصفحة المسماة “params_ranges”، ستلاحظ أنه يمكنك الآن رؤية أسماء جميع المعلمات الموجودة في الوكيل الذي عرّفته كوكيل المستوى الأعلى مدرجة في العمود المسمى “parameter”. لكل معلمة، حدد الخصائص كما يلي:

  • هل هي مصفوفة: أحيانًا يمكن أن تكون معلماتك مصفوفات. إذا كانت المعلمة مصفوفة، يجب أن تكون القيمة TRUE، وإلا تكون FALSE.

  • حجم المصفوفة: إذا كانت المعلمة مصفوفة، تحتاج إلى تحديد حجم المصفوفة هنا. إذا لم تكن المعلمة مصفوفة، اكتب 0 فقط.

  • النوع: يمكن أن يكون النوع أحد أربعة خيارات (CONTINUOUS، DISCRETE، FIXED، BOOLEAN). اختر النوع المناسب من القائمة المنسدلة. لا تكتب أي شيء غير القيم المشار إليها في القائمة المنسدلة لأن ذلك سيسبب خطأ عند تشغيل التجربة.

  • النطاقات: للمعلمات CONTINUOUS، حدد الحد الأدنى والحد الأقصى. للمعلمات DISCRETE، حدد الحد الأدنى والحد الأقصى والخطوة. للمعلمات FIXED، حدد القيمة الثابتة. للمعلمات BOOLEAN، لا حاجة لتعريف أي شيء. لجميع الخلايا غير المطلوبة، يمكنك كتابة أي قيمة (صفر مثلاً) لكن لا تتركها فارغة. على سبيل المثال، للمعلمات CONTINUOUS، يمكنك كتابة 0 للخطوة لأنها لن تُستخدم. في حالة المصفوفات غير FIXED، سيتم تطبيق النطاقات المشار إليها على جميع مكونات المصفوفة. لا يمكن تعريف نطاقات مختلفة لكل مكون من مكونات المصفوفة. مرة أخرى، لمصفوفات BOOLEAN، لا حاجة لتعريف أي شيء. أخيرًا، في حالة مصفوفات FIXED، في عمود القيمة الثابتة، تحتاج إلى تعريف قيم مكونات المصفوفة باستخدام هذا التنسيق: إذا كان حجم المصفوفة 3 مثلاً. هذا هو التنسيق المقبول الوحيد، أي تنسيق آخر سيعطي خطأ.

كمثال، ارجع إلى الصورة أدناه:

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

النتائج

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

بالإضافة إلى ذلك، عند انتهاء التجربة، سيظهر زر يتيح لك تصدير قيم هذه المعلمات إلى ملف csv. عند الضغط على الزر، سيظهر مجلد جديد باسم “exports” في مجلد النموذج الخاص بك، وداخل هذا المجلد ستجد صفحة النتائج المُصدّرة. الصفحة المسماة “parameters values” تُظهر أسماء المعلمات في العمود الأول والقيم لكل معلمة في العمود الثاني.

خيارات إضافية

القيود: القيود هي تقييدات أو شروط متعلقة بقيم المعلمات. القيد هو تعبير حسابي مصاغ بشكل صحيح يصف علاقة بين معلمات التحسين. يحدد دائمًا حدًا عن طريق تحديد حد أدنى أو أعلى، مثلاً p1+p2>10. يتم تقييم القيود قبل تشغيل النموذج وإنشاء وكيل المستوى الأعلى، لذلك لا يمكن أن تتضمن أيًا من محتويات وكيل المستوى الأعلى. لتعريف قيود لتجربة التحسين، تحتاج إلى استخدام صفحة “constraints_db” في ملف inputOptimization.xlsx. كل صف سيشكل قيدًا واحدًا. في العمود الأول، اكتب أي رقم كمعرف فريد للقيد. ثم حدد ما إذا كنت تريد تفعيل القيد عند تشغيل التجربة بتحديد TRUE للمُفعّل و FALSE للمُعطّل. إذا كان القيد مُعطّلاً، فلن يتم أخذه في الاعتبار في التجربة. أُضيف هذا الخيار في حالة رغبتك في اختبار مجموعات مختلفة من القيود. سنصف عمود “on array” في الفقرة التالية. بعد ذلك، تحتاج إلى تعريف التعبير الذي يجب أن يتكون من اسم/أسماء المعلمات والرموز الرياضية لتعريف العلاقة الحسابية. بعد ذلك، تحتاج إلى تعريف نوع الحد. الرموز المسموح بها هنا هي: =، >=، <=. استخدام أي رمز آخر سيسبب خطأ. أخيرًا، تحدد الحد وهو أي رقم.

بالنسبة للمصفوفات، القيود هي حالة خاصة. لا يمكن استخدام القيود على أكثر من مصفوفة واحدة في تعبير واحد، أو على مصفوفة ومعلمة عادية في تعبير واحد. يُسمح لك فقط باستخدام القيود في المصفوفات على مكونات المصفوفة نفسها. في عمود “on array”، إذا كان القيد الذي ستضيفه في هذا الصف متعلقًا بمصفوفة، يجب أن تكون هذه القيمة TRUE، وإلا يجب أن تكون FALSE. تنسيق التعبير سيكون كما يلي على سبيل المثال: 2*p1+p1/4، حيث يمثل p1 و p1 مكونات المصفوفة في المواضع ذات الصلة بناءً على الأرقام المشار إليها بين الأقواس المربعة. على سبيل المثال، إذا كانت هذه المصفوفة p1: ، p1 ستكون 5.3، و p1 ستكون 9.5. أي تعبير قيد يحتوي على اسم أكثر من مصفوفة واحدة أو يحتوي على مزيج من اسم مصفوفة واسم معلمة عادية سيعطي خطأ أثناء التشغيل.

المتطلبات: المتطلبات هي قيود إضافية مفروضة على النتائج التي يجدها محرك التحسين. يتم اختبار هذه القيود بعد عملية تشغيل المحاكاة ويمكن أن تتضمن أيًا من متغيرات المستوى الأعلى. لتعريف متطلبات لتجربة التحسين، تحتاج إلى استخدام صفحة “requirements_db” في ملف inputOptimization.xlsx. اتبع نفس القواعد المتبعة مع القيود، ومع ذلك في التعبير هنا استخدم المتغيرات بدلاً من المعلمات.

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

لا تعمل رغم أن لدي ترخيصًا

هذه المكتبة تعمل فقط مع اتصال بالإنترنت. تأكد من أن اتصالك بالإنترنت يعمل.

هل هذا أفضل من optQuest؟

أولاً، يمكنك تصدير هذه التجربة إلى ملف تنفيذي، وهو ما لا يمكن فعله مع OptQuest إلا إذا اشتريت ترخيصًا خاصًا مكلفًا لذلك. ثانيًا، العمل مع آلاف المتغيرات أسهل بكثير. تجربة optQuest الأصلية في AnyLogic صعبة الاستخدام للغاية إذا كان لديك الكثير من المتغيرات.

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

ما هي فترات الثقة؟

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

https://youtu.be/tWGnQxMgu8A?si=HbPHDZ4YbmrlPE1a.

https://youtu.be/5UcKw-dZG7c?si=9HUuseB2H11DxiQp.

حاسوبي يستخدم 100% من المعالج أثناء التحسين، لماذا؟

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

هل يعمل التصدير على السحابة؟

حاليًا لا يعمل.

#Simulations