实践编程第三讲-利用Python语言编制蒙特卡洛算法程序
利用Python编写蒙特卡洛算法
- 目的
- 定义
- 解决不同类型的问题
- 工作过程
- 求圆周率
- python的api随机数
蒙特卡洛算法计算圆周率
- 计算程序
PI * R * R/4 / 1 = totalInRound / totalNum
PI = totalInRound / totalNum * 4 /R /R
- 小结
1.蒙特卡罗算法:采样越多,越近似最优解;
2.拉斯维加斯算法:采样越多,越有机会找到最优解;
举个例子,假如筐里有100个苹果,让我每次闭眼拿1个,挑出最大的。于是我随机拿1个,再随机拿1个跟它比,留下大的,再随机拿1个……我每拿一次,留下的苹果都至少不比上次的小。拿的次数越多,挑出的苹果就越大,但我除非拿100次,否则无法肯定挑出了最大的。这个挑苹果的算法,就属于蒙特卡罗算法——尽量找好的,但不保证是最好的。
而拉斯维加斯算法,则是另一种情况。假如有一把锁,给我100把钥匙,只有1把是对的。于是我每次随机拿1把钥匙去试,打不开就再换1把。我试的次数越多,打开(最优解)的机会就越大,但在打开之前,那些错的钥匙都是没有用的。这个试钥匙的算法,就是拉斯维加斯的——尽量找最好的,但不保证能找到。