R,蒙特卡洛和企业任务

在以令人羡慕的规律性解决实际问题时,必须面对两种在会议上提出或在会议上提出的典型方法。


  • 选项1-让我们以一般方式解决特定问题。 通过这种方式解决了问题,我们将能够一路解决更多问题。
  • 选项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为此提供了一个很棒的包。 所有信息和很多实际示例在这里


一篇文章- “在R中使用bigint标识符的一些技巧”

Source: https://habr.com/ru/post/zh-CN482020/


All Articles