蒙特卡洛

python day 8 random库 与 蒙特卡洛方法

久未见 提交于 2019-12-04 22:07:56
Random 库 一、概述 1.Random 库是使用随机数的 python 标准库 2.生成的实际上是伪随机数。采用梅森旋转算法生成。 3. 两类函数,常用的有 8 个 (1) 基本随机函数: seed(),random() (2) 扩展随机函数: randint(),getrandbits(),uniform(),randrange(),choice(),shuffle() 洗牌 二、基本随机函数 1.Seed() (1)随机数种子,相当于赋值给梅森旋转中的变量,生成一个梅森旋转序列。默认值为当前的系统时间。 (2)如果随机数种子相同,那么会按特定顺序,生成相同的随机数,也就是说,可以实现代码之前执行情况的复现。因为每次使用的都是相同的随机数数列。 2.Random() (1) 生成一个 0 到 1 的小数。 (2)不可再现,即使是相同的代码,由于参数赋值不可能再相同,很难再现当初程序所使用的随机数到底是多少。 (3) 三、扩展随机函数 1.生成整数 (1)Randint(a,b) 随机生成一个 a , b 之间的整数 (2)Randrange(m,n[,k]) 随机生成一个 m , n 之间以 k 为步长的整数 (3)Getrandbits(k) 生成一个 k 比特长的随机整数 2.生成小数 (1)Uniform(a,b) 生成 a , b 之间的随机小数 3.序列 (1

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

匿名 (未验证) 提交于 2019-12-02 23:26:52
写给小陈~ 参考文献: 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. 什么是概率路线规划问题? 假设你是个推销员,任务是在有限时间内拜访一大堆的客户。每个客户在时限前成功拜访都有不同的收益,但是客户都挺忙的有一定概率不在,而且你的时间也不够拜访所有客户。那么问题来了:如何规划一条 最短 且 收益 期望 最高 的路线? 注:每个蓝色的点代表一个客户的实际地理位置,圆圈内数字是收益奖励,红色的点则是固定的起点和终点,无奖励 首先我们需要把问题建成一个数学模型。这里的变量和约束条件都是很明确的,难点在于目标函数:如何表达旅行距离的期望值和获得收益的期望值。 假设我们用旅行时间来表示两点之间的距离,根据每个点的概率排列组合出所有路线组合,还是可以写出一个旅行时间的期望值公式的。那么收益的期望值呢? 对于任意一个蓝点来说,这个客户的奖励拿不拿的到取决于两点:1.

蒙特卡罗定位(Particle Filter Localization)

◇◆丶佛笑我妖孽 提交于 2019-11-28 10:32:07
1. 蒙特卡罗定位 定位:机器人知道地图信息的情况下如何利用传感器信息确定自己的位置(Localization)。 有人会说,定位是不需要地图信息的。机器人知道初始位置,知道左右轮的速度,就可以算出在一段时间内左右轮分别走了多少距离,进而算出机器人的转角和位移,以便更新位置信息。但是显然,这种方法存在很大的问题。首先,速度是传感器获得的,然而传感器是有精度限制的,这就意味着误差的存在,对时间积分求距离误差就更大了;另外,机器人也可能存在打滑之类的机械问题。结合地图来对机器人进行定位能有效减小误差。 传感器方面。我们使用激光传感器,它能够测量机器人各个方向和最近障碍物之间的距离。在每一个时间点,机器人都会获得激光传感器的测量值。如下图,绿色三角形是机器人,红色的线是激光束,黄色的格子是机器人在该激光方向上检测到的最近的障碍物。 地图是占据栅格地图(Occupancy Grid Map)。比如,下面的地图中,浅色(白色)的格子表示障碍物,深色(黑色)的格子表示空白位置。 那么,在这个时间点,我们要做的就是把机器人放到地图中去,使得激光传感器的读数尽可能符合地图信息(如下图所示)。 这样,对于一个时间点的定位问题就变成了求解最优函数的问题了。然而这个最优化函数太难求解了(坐标和角度都是连续变化的,而地图是一个一个格子的数值)。 我们需要注意到两点。第一,对于给定的机器人位置信息

基于蒙特卡洛算法的模拟退火算法求方程最值(c语言实现)

我的梦境 提交于 2019-11-26 17:36:44
–打个比方——将一个铁块加热至熔融态,并以此为最初状态,在此基础上不断降温,最终凝固,原子不再活跃。 –实现原理——刚开始的元素极为活跃,若是随机取到的值比原来的值更优,那么就放进一个临时的变量中,若是随机到的值较差,那么也有一定概率取到这个值,只不过概率随时间慢慢降低(退火降温导致原子不再活跃),最终将取到的临时变量中的值与原最优值进行比较,选择更新。 –实现步骤: (1)定义初始温度、中止温度、退货速度; (2)随机取一个值定为最优值; (3)建立内外函数,内函数用来在等温状态(等概率)下取值,外函数用来退火降温(降低概率); #include <iostream>//模拟退火 #include<stdlib.h> #include<math.h> #include<time.h> #define T 10000//初始温度 #define EPS 1e-8//中止温度 #define DELTA 0.98//退火速度 #define y x*x*x+x*x+x//定义函数 int main() { double diffy, newy, besty, fakey, t = T, x; int i, j; srand((unsigned)time(NULL)); x = rand() % 1000;//函数定义域 besty = y; while (1) { fakey =