python基于蒙塔卡罗算法求e^x在[0,3]上的积分

1.实现过程

首先定义几个变量:

1)up_point(在y=e^x图像之上的点)

2) down_point(在y=e^x图像之下的点)

x(随机生成的x)

y(随机生成的y)

yy(将x代入y=e^x求出的值)

使用python中的random.uniform(),在区间[0,3]内随机生成一个x,在区间[0,22]随机生成一个y。将x代入y=e^x求出yy,比较y和yy的大小,如果y>yy,就将up_point++,否则就把down_point++。

然后我们要做的就是生成足够多的点,利用蒙塔卡罗算法求出该积分的结果。

e^x在[0,3]上的积分:=down_point/(up_point+down_point)*S(S为已知的包含e^x图像的面积)

2.具体实现

import math
import random
x = 0
y = 0
yy = 0
xx = 0
sum = 0
up_point = 0
down_point = 0
for i in range(10000):
    x = random.uniform(0,3)
    y = random.uniform(0,22)
    yy = math.exp(x)
    if y < yy:
        down_point = down_point + 1
    else:
        up_point = up_point + 1
sum = 66*(down_point/(down_point+up_point))
print(sum)

3.运行结果

 

### Monte Carlo Search Tree (MCTS) 算法原理 Monte Carlo Tree Search (MCTS) 是一种结合了蒙特卡罗模拟和树形结构搜索的方法,用于解决复杂的决策问题。该算法的核心在于通过构建一棵搜索树来逐步逼近最优解,并利用随机采样技术评估不同路径的效果[^1]。 #### MCTS 的核心组成部分 MCTS 主要由四个阶段组成:选择(Selection)、扩展(Expansion)、模拟(Simulation)以及反向传播(Backpropagation)。这些阶段共同构成了完整的搜索流程: 1. **选择(Selection)** 在这一阶段,算法会从根节点出发沿着现有的搜索树向下移动,直到到达一个未完全展开的节点为止。此过程中通常采用 Upper Confidence Bound applied to Trees (UCT) 公式来平衡探索与开发之间的关系[^2]。 2. **扩展(Expansion)** 当达到选定叶节点之后,如果当前状态尚未被充分研究,则可以创建新的子节点表示可能采取的动作之一;接着进入下一步骤——模拟阶段之前需确保至少存在一个可选动作对应的新节点加入到树中去。 3. **模拟(Simulation)** 对于刚刚新增加或者已经存在的某个叶子结点来说,由于缺乏足够的历史数据支持进一步深入分析其价值高低情况如何判断呢?这时就需要借助所谓的“默认策略”来进行快速估算得到大致的结果反馈回来作为参考依据供后续调整优化之用。这种基于大量试验得出平均收益水平的方式正是典型的蒙特卡洛方法体现之处[^4]。 4. **反向传播(Backpropagation)** 经过一轮完整运行结束以后所获得最终得分信息需要逐层向上更新沿途经过的所有父辈祖先们各自累积统计量记录表单里相应字段数值变化趋势曲线图展示出来便于下次再遇到相似情形时能更快做出更优决定方案选取方向指引作用明显提升效率减少冗余计算消耗资源浪费现象发生几率大大降低整体性能表现更加优异出色。 以下是 Python 实现的一个简化版 MCTS 示例代码片段: ```python import math from random import choice class Node: def __init__(self, state=None, parent=None): self.state = state # 游戏状态 self.parent = parent # 上级节点 self.children = [] # 子节点列表 self.visits = 0 # 访问次数 self.value = 0 # 节点估值 def uct_select(node): """ 使用 UCT 准则挑选最佳孩子 """ best_score = float('-inf') best_child = None for child in node.children: exploit = child.value / child.visits if child.visits != 0 else 0 explore = math.sqrt(math.log(node.visits)/child.visits) if child.visits != 0 else float('inf') score = exploit + 2 * explore # 平衡参数设为2 if score > best_score: best_score = score best_child = child return best_child def rollout_policy(state): """ 随机走棋直至游戏结束并返回结果""" while not is_terminal_state(state): possible_moves = get_possible_actions(state) action = choice(possible_moves) state = make_move(state,action) return evaluate_final_result(state) def mcts_search(root_node,max_iterations=1000): for _ in range(max_iterations): leaf = select_leaf_by_uct(root_node) expand_and_simulate(leaf) back_propagate_results_from_simulation_to_tree(leaf) # 更多细节省略... ``` 上述代码仅提供了一个基本框架示意,具体实现还需根据不同应用场景定制化修改完善功能模块设计思路逻辑架构等内容才行哦! ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值