用蒙特卡洛算法解概率相关的路线规划问题

写给小陈~

参考文献:

Chou X., Gambardella L.M., Montemanni R. (2018) Monte Carlo Sampling for the Probabilistic Orienteering Problem. In: Daniele P., Scrimali L. (eds) New Trends in Emerging Complex Real Life Problems. AIRO Springer Series, vol 1. Springer

- 蒙特卡洛算法可以用来解很多带概率的组合优化问题,本篇中用于举例的是【有时间限制的概率路线规划问题】

I. 什么是概率路线规划问题?

假设你是个推销员,任务是在有限时间内拜访一大堆的客户。每个客户在时限前成功拜访都有不同的收益,但是客户都挺忙的有一定概率不在,而且你的时间也不够拜访所有客户。那么问题来了:如何规划一条最短且收益期望最高的路线?

注:每个蓝色的点代表一个客户的实际地理位置,圆圈内数字是收益奖励,红色的点则是固定的起点和终点,无奖励

II. 概率路线规划问题的解决难点

首先我们需要把问题建成一个数学模型。这里的变量和约束条件都是很明确的,难点在于目标函数:如何表达旅行距离的期望值和获得收益的期望值。

假设我们用旅行时间来表示两点之间的距离,根据每个点的概率排列组合出所有路线组合,还是可以写出一个旅行时间的期望值公式的。那么收益的期望值呢?

对于任意一个蓝点来说,这个客户的奖励拿不拿的到取决于两点:1. 到达时间有没有超过时限 2.客户在不在。

对于条件1来说,在不同的路线走法中,同一个点的到达时间是不一样的,所以并没有一个简单的公式来表达这个收益的期望值。而条件2也会导致路线决策的变化:

例:在下面四条可能的路线中,第二条路线的收益最高。然而这两位都是大概率不在的客户,那么就收益的期望值来说,第三条路线似乎更高。

综上,这个问题并不能简单的写成一个数学模型然后直接丢进cplex,gurobi等牛逼的求解器里去解。这种情况下,蒙特卡洛算法似乎是个不错的选择。

III. 如何用蒙特卡洛算法解决?

简单来说,只要对于一个路线我们有办法算出它目标函数的期望值,那么接下来就可以通过各种局部搜索算法(启发式算法或精确算法)去对比各种可能存在的路线的目标函数值,最终决策出满足目标函数的最优路线。而蒙特卡洛在表达这个目标函数的期望值这一点上很有优势。

具体来说,根据每个客户在的概率,我们随机取样。在任何一个样本中,客户在或不在是确定的事情。不在的客户可以直接跳过去下一个在的客户。这样一来,在任何一个样本中这条路线的总时间和总收益是一个确定值,则目标函数也有一个确定值。所有样本的目标函数的平均值就是目标函数的期望值。只要样本的数量足够大,蒙特卡洛取样法就可以跳过复杂的概率公式直接得到目标函数的期望值。

蒙特卡洛取样在实际操作中非常之快,尤其对于客户数量极大的问题。而样本数的抉择,是需要调试来找到最适合这个问题的样本数。参考文献中有对于该问题的具体实验数据,及用于改良提速的启发式算法思路。

下一篇我们讨论该问题及算法的实际应用案例。

感谢阅读。

原文地址:https://www.cnblogs.com/xcx2/p/10687164.html

时间: 2024-10-11 18:04:08

用蒙特卡洛算法解概率相关的路线规划问题的相关文章

动态规划算法解最长公共子序列LCS问题

第一部分.什么是动态规划算法 ok,咱们先来了解下什么是动态规划算法. 动态规划一般也只能应用于有最优子结构的问题.最优子结构的意思是局部最优解能决定全局最优解(对有些问题这个要求并不能完全满足,故有时需要引入一定的近似).简单地说,问题能够分解成子问题来解决. 动态规划算法分以下4个步骤: 描述最优解的结构 递归定义最优解的值 按自底向上的方式计算最优解的值   //此3步构成动态规划解的基础. 由计算出的结果构造一个最优解.   //此步如果只要求计算最优解的值时,可省略. 好,接下来,咱们

2014腾讯实习生笔试——蒙特卡洛算法求圆周率

这是2014腾讯实习生笔试(西安,武汉站)的第26题.给出二个函数,让你去理解其含义.答案是:第一个函数式用来产生(a,b)之间的随机小数.第二个函数式用蒙特卡洛概率算法求近似圆周率. 先介绍一下该方法(蒙特卡洛算法): 以 概率和统计理论方法为基础的一种计算方法.将所求解的问题同一定的概率模型相联系,用计算机实现统计模拟或抽样,以获得问题的近似解.比方,给定 x=a ,和 x=b ,你要求某一曲线 f 和这两竖线,及 x 轴围成的面积,你能够起定 y 轴一横线 y=c 当中 c>=f(a) a

支撑5亿用户、1.5亿活跃用户的Twitter最新架构详解及相关实现

如果你对项目管理.系统架构有兴趣,请加微信订阅号"softjg",加入这个PM.架构师的大家庭 摘要:Twitter出道之初只是个奋斗在RoR上的小站点,而如今已拥有1.5亿的活跃用户,系统日传输tweet更多达4亿条,并已完成了以服务为核心的系统架构蜕变. Twitter如今在世界范围内已拥有1.5亿的活跃用户,为了给用户生成timeline(时间轴)需支撑30万QPS,其firehose每秒同样生成22MB数据.整个系统每天传输tweet 4亿条,并且只需要5分钟就可以让一条twe

grep 命令详解及相关事例

一.匹配字符 .    匹配任意单个字符 [ ]  匹配指定范围内的任意字符 [^]  匹配飞指定范围内的任意字符 [:alpha:] 字母字符 [:lower:] 小写字母字符 [:upper:] 大写字母字符 [:digit:] 数字 [:alnum:] 字母数字字符 [:space:] 空白字符(禁止打印),如回车符.换行符.竖直制表符和换页符 [:punct:] 标点字符 [:cntrl:] 控制字符(禁止打印) [:print:] 可打印字符 使用时一般使用两个中括号,具体会在下面的例

蒙特卡洛算法及其实现

从今天开始要研究Sampling Methods,主要是MCMC算法.本文是开篇文章,先来了解蒙特卡洛算法. Contents    1. 蒙特卡洛介绍    2. 蒙特卡洛的应用    3. 蒙特卡洛积分 1. 蒙特卡洛介绍 蒙特卡罗方法(Monte Carlo method),也称统计模拟方法,是二十世纪四十年代中期由于科学技术的 发展和电子计算机的发明,而被提出的一种以概率统计理论为指导的一类非常重要的数值计算方法.是指使 用随机数(或伪随机数)来解决很多计算问题的方法.与它对应的是确定性

算法笔记_155:算法提高 概率计算(Java)

目录 1 问题描述 2 解决方案   1 问题描述 问题描述 生成n个∈[a,b]的随机整数,输出它们的和为x的概率. 输入格式 一行输入四个整数依次为n,a,b,x,用空格分隔. 输出格式 输出一行包含一个小数位和为x的概率,小数点后保留四位小数 样例输入 2 1 3 4 样例输出 0.3333 数据规模和约定 对于50%的数据,n≤5. 对于100%的数据,n≤100,b≤100. 2 解决方案 下面代码在系统中运行评分为90分,第五组数据无法通过,我用同版本的C代码运行(PS:具体参见文末

蒙特卡洛算法

从今天开始要研究Sampling Methods,主要是MCMC算法.本文是开篇文章,先来了解蒙特卡洛算法. Contents    1. 蒙特卡洛介绍    2. 蒙特卡洛的应用    3. 蒙特卡洛积分 1. 蒙特卡洛介绍 蒙特卡罗方法(Monte Carlo method),也称统计模拟方法,是二十世纪四十年代中期由于科学技术的 发展和电子计算机的发明,而被提出的一种以概率统计理论为指导的一类非常重要的数值计算方法.是指使 用随机数(或伪随机数)来解决很多计算问题的方法.与它对应的是确定性

关于Linux的字符测试的详解和相关bash脚本的练习

关于Linux的字符测试的详解和相关bash脚本的练习 一.字符测试选项         == : 测试两个字符串是否相等,相等为真,不等为假.         != : 测试两个字符串是否不等,不等为真,相等为假.         -n string : 测试指定的字符串是否为空,空为真,不空为假.         -z string :测试指定的字符串是否为不空,不空为真,空为假. 二. 完成下面的bash脚本练习         练习:写一个脚本 传递一个参数(单字符就行)给脚本,如参数为

CentOS 7安装MariaDB 10详解以及相关配置

CentOS 7安装MariaDB 10详解以及相关配置 第一步:添加 MariaDB yum 仓库 首先在CentOS操作系统中/etc/yum.repos.d/目录下添加 MariaDB 的YUM配置文件MariaDB.repo文件. vi /etc/yum.repos.d/MariaDB.repo 在该文件中添加以下内容保存: [mariadb]name = MariaDBbaseurl = http://yum.mariadb.org/10.2/centos7-amd64gpgkey=h