A MCTS for Dynamic Bike Reposition in Bike-Sharing Systems

共享单车系统中自行车动态重定位的一种MCTS方法

1.基础知识储备

2.什么是MCTS?

由于Alpha-Go/Zero的热度,搜出来的MCTS的博客都是关于围棋游戏的。
wiki-pedia MCTS介绍
MCTS入门【很详细,适合初学者;带着问题去学更有效】
上一篇入门的英文原版
上一篇文章python编码实现
28天自制Alpha-Go
MCTS讲解
Chernoff-Hoeffding Bound

        对于双人有限零和顺序游戏,首先构建一棵游戏树,游戏树是一种递归的数据结构,每次选择完最佳的下一步时,会移动到下一个子节点,而这个子节点又是它子树的根节点。因此我们可以把一局游戏视为“最佳下一步”的一个问题序列,每一次都可以由一个不同根节点的游戏树表示。通常在实际应用中,我们不需要记住到当前状态的路径,因为这不是当前游戏状态的关注点。

  • 双人有限零和顺序游戏:有两位玩家参与,玩家能进行的动作总是有限的,双方的游戏目标是完全相反的(所有游戏的结果之和等于0)。
  • 游戏树是一个数,其中每一个节点代表游戏的一个确定状态。从一个节点到该节点的一个子节点(如果存在)是一个移动。节点的子节点数目称为分支因子。游戏树的根节点代表游戏的初始状态。游戏树的终端节点是没有子节点的节点,至此游戏结束,无法再进行移动。终端节点的状态也就是游戏的结果(输/赢/平局)。
    pseudo-code:
# Step2:Expansion
def monte_carlo_tree_search(root):
    while resources_left(time, computational power):	# MCTS的终止条件,计算资源或者时间限制而停止运行
        leaf = traverse(root) # leaf = unvisited node 
        simulation_result = rollout(leaf)	# Step3:Simulation
        backpropagate(leaf, simulation_result)	# Step4:Backpropagation
    return best_child(root)

def traverse(node):	# Step1:Selection
    while fully_expanded(node):	# 结点是完全扩展的,即	
        node = best_uct(node)	# 选取UTC最高的结点,也就是最优子结点
    return pick_univisted(node.children) or node # in case no children are present / node is terminal 

def rollout(node):
    while non_terminal(node):
        node = rollout_policy(node)
    return result(node) 

def rollout_policy(node):
    return pick_random(node.children)

def backpropagate(node, result):
   if is_root(node) return 
   node.stats = update_stats(node, result) 
   backpropagate(node.parent)

def best_child(node):
    pick child with highest number of visits

是否MCTS可以用于其他领域呢?

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值