- 博客(7)
- 资源 (7)
- 收藏
- 关注
原创 从零开始再造打爆李世石的AlphaGo:使用蒙特卡洛树搜索实现围棋落子算法
上一节我们完成了最大最小搜索树,加上alhpa-beta剪枝算法实现了围棋落子走法。它存在一个问题是,树搜索的层次不高,尽管如此,围棋机器人下棋时还是要多次扫描棋盘,进行复杂的运算比较后才能做出决定,这个过程异常耗时,以至于好几分钟都无法运算完。在计算机科学中,当面对一个计算量大的复杂问题时,一种常用的做法就是引入概率和随机性,我们不一定要寻找理论上的最优做法,我们只要以一定的概率寻找到相对优越...
2019-03-29 11:44:37 1787 1
原创 使用最大-最小树搜索算法和alpha-beta剪枝算法设计有效围棋走法
我们的世界纷繁复杂,看起来完全不可捉摸。但在很多场景下,它运行的本质其实是通过付出最小的代价获得最大化收益。例如在自然界里的自然选择,光的运行路径。对于人的世界更是如此,由于我们做任何事情,任何选择都要付出相应的成本,因此选择一种决策方式让我们以最小的代价获得最大化的回报无疑是我们行动思考的核心。围棋,以及一切棋类它的本质就是寻求一种最优化策略,但不同之处在于,它不是寻求即时回报,而是寻求最终回...
2019-03-26 10:34:46 3534 1
原创 DHCP,主机动态配置协议的代码实现第一步:实现设备请求和服务器应答
本节开始,我们代码实现DHCP的协议流程。其本质上是在相应的阶段,构造相应的数据包进行发送和接收,总体而言,DHCP数据包的格式如下:它最复杂的其实是填写options字段,该字段种类及其繁杂,我们根据不同协议的不同阶段去搞清楚options字段的内容。根据我们前面描述,DHCP协议启动时,第一步是客户端在子网内广播dhcp discover消息,然后子网内相应的dhcp服务器回发dhcp o...
2019-03-22 09:18:57 1112 1
原创 从零开始再造打爆李世石的AlphaGo:创造能下围棋的机器人
我们在上节完成了围棋规则和棋盘状态监测功能,本节我们在基于上节的基础上,设计一个能自己下棋的围棋机器人。首先我们设计一个类叫Agent,它的初始化代码如下:class Agent: def __init__(self): pass def select_move(self, game_state): raise NotImplementedError()代码中的s...
2019-03-18 17:15:52 671
原创 DHCP:主机动态配置协议过流解析和数据包格式说明
本节,我们使用代码实现主机配置协议。对协议实现而言,一是要理解数据包的交互流程,二是要了解数据包的结构,因此我们首先抓取DHCP协议的数据包,先了解它的大致结构。首先启动wireshark,然后输入过滤条件为:bootp.option.type == 53 。然后找到DHCP协议配置地方,在我的mac机器上,情景如下:然后点击按钮"DHCP续租”,在wireshark上可以捕捉到数据包:...
2019-03-14 16:43:25 541
原创 DHCP:实现基于UDP的主机动态配置协议
主机动态配置协议是在无线互联时代,我们“日用而不知”的幕后英雄。试想你拿着手机,连接上wifi后就可以上网,如果没有改协议的存在,我们估计没有那么轻松自如就能惬意的在指尖冲浪。该协议的做大作用是动态的为加入网络的设备分配IP地址,在该协议出现前,IP地址的分配基于静态模式,你把设备的mac地址手动在路由器设置,然后路由器自动生成一个IP与你的mac地址绑定起来。这种应用在有线网络时代可以适用,但...
2019-03-08 08:29:09 1687
原创 从零开始再造打爆李世石的AlphaGo:快速构建棋盘和围棋规则
从本节开始,我们废话少说,迅速进入代码编写阶段。对技术而言“做”永远是比“讲”更好的说,很多用语言讲不清楚的道理,看一下代码自然就明白了。我们要实现的围棋机器人必须做到以下几点:1, 跟踪当前所下的每一步棋。2, 跟踪当前的棋局进展。如果是机器人自我对弈,那么代码对棋局的跟踪与人和机器人对弈是对棋局的跟踪有所不同。3, 根据当前棋盘局势,搜索多种可行的下法,并从中评估出最好的走法。4, 将...
2019-03-05 12:00:26 912 3
一个java实现的简易编译器
2016-02-18
一个android 文本比对app的实现代码
2015-11-16
Android 4.4 App Development Essential
2014-11-21
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人