R ومونتي كارلو ومهام المؤسسة

عند حل المشكلات العملية مع انتظام تحسد عليه ، يتعين على المرء أن يواجه نهجين نموذجيين يتم طرحهما في الاجتماعات أو في الهواء.


  • الخيار 1 - دعنا نحل مشكلة معينة بطريقة عامة. بعد حلها بهذه الطريقة ، سنكون قادرين على حل الكثير على طول الطريق.
  • الخيار 2 - دعنا نتنبأ بالتوقعات ، و ML ، والكثير من الأشياء العصرية للتنبؤ بسلوك النظام غير الخطي. بارد بعد كل شيء.

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


لماذا يمكن أن تكون هذه النهج زائدة عن الحاجة؟ نعم ، لعدة أسباب: الوقت الذي يستغرقه إيجاد حل لمشكلة ، والوقت الذي يستغرقه حساب ، ومتطلبات كمية الموارد الحاسوبية ، وإجراء العمليات الحسابية بدقة عالية ، وبناء النموذج الخاطئ ، والتعقيد العالي للحل التحليلي للمشكلة المباشرة ، والتعقيد العالي لحل المشكلة العكسية ، وأكثر من ذلك بكثير.


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


فيما يلي 2 أمثلة فقط.


مثال 1. توليفات القوائم المتداخلة


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


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


ll <- list(list('a', 'b', 'c'), 'd', list('e', 'f', list('g', 'h', 'i'))) #   factorial(3) * factorial(3) * factorial(3) * factorial(3) 


رسم لحل ممكن.
 #        ff <- function(x){ #    ,           res <- if(is.list(x)) { sample(x, length(x), replace = FALSE) %>% purrr::map(ff) } else { x } res } procLine <- function(row){ purrr::map(row, ff) %>% #    rlang::squash_chr() %>% stri_c(collapse = "") } #   ,     wks <- 1 future::plan(multiprocess, workers = wks) tic(glue("Generating permutations @ {wks} thread(s)")) df1 <- purrr::map(1:10^4, ~sample(ll, length(ll), replace = FALSE)) %>% #          # purrr::map_chr(procLine) %>% furrr::future_map_chr(procLine) %>% enframe(name = NULL) %>% distinct() toc() 

مثال 2. توقع قوائم انتظار العملاء


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


الخيار رقم 1 - حل المشكلة وجها لوجه. صفر المعرفة النظرية لفنان + تراكم الكتلة التاريخية لجميع أنواع المؤشرات الخارجية (الميزات) واستخدام أساليب ML ل "المناسب". يتم وضع بعض التوقعات ، ولكن ماذا ولماذا وكيف - ما هو خارج النطاق ، من الضروري استخدام "مترجمين فوريين".


الخيار رقم 2 - نستخدم الطريقة العلمية للإدراك. نفتح نظرية أنظمة الصف ، بناء القانون الأساسي. مؤشرات العملية وفقا لمعايير QS ، نطلق محاكاة منفصلة معلمة من خدمة العملاء. نحصل على "نموذج رقمي" للنظام يحتوي على أدوات للتحكم وقدرة توضيحية تحليلية تستند بدقة إلى طبيعة الكائنات المرصودة ، وليس على مجموعة من "ميزات" معينة.
R لديه حزمة simmer كبيرة لهذا الغرض. جميع المعلومات والكثير من الأمثلة العملية هنا .


الوظيفة السابقة - "بعض اللمسات على العمل مع معرفات bigint في R" .

Source: https://habr.com/ru/post/ar482020/


All Articles