我们在使用Go标准库以及一些第三方库时,经常看到需要传入一个context.Context类型的参数。Context 一词翻译过来叫做“上下文”,但在Go语言中,它到底有什么用,应该怎样用呢?
如何停止线程/协程?
我们就以之前聊到的 五子棋AI 为例:
假设我们计算6步棋花了数秒钟,但是计算8步棋花了1分钟还没算出来,就可以提前返回计算6步的策略了。
这段话看似简单,实则涉及到并发编程的一个问题:提前返回后,8步棋的计算仍在进行,这样会持续浪费资源,如何将其停掉呢?
我们在使用Go标准库以及一些第三方库时,经常看到需要传入一个context.Context类型的参数。Context 一词翻译过来叫做“上下文”,但在Go语言中,它到底有什么用,应该怎样用呢?
我们就以之前聊到的 五子棋AI 为例:
假设我们计算6步棋花了数秒钟,但是计算8步棋花了1分钟还没算出来,就可以提前返回计算6步的策略了。
这段话看似简单,实则涉及到并发编程的一个问题:提前返回后,8步棋的计算仍在进行,这样会持续浪费资源,如何将其停掉呢?
注意
此AI并非“人工智能”,而是我们早期意义上的传统AI,并无学习能力,纯粹用算法实现五子棋每一步棋的应对策略。
上一章我们用α-β剪枝和启发式搜索对博弈树搜索算法进行优化,大大提高了算法性能。这一章我们继续用更多的方法进行优化。
在编写网络应用时,服务端与客户端的协议设计是一个非常重要的环节。本文将介绍业界常见的通信协议设计思路。
我们知道,对于面向对象编程(OOP),在程序的内存中,数据一般是struct、object等封装好的类型。而在网络上进行交互,却只能使用二进制流。因此就存在这样两个问题:
Kotlin是基于Java虚拟机的一种静态类型编程语言,如果你有Java编程经验,那么学习Kotlin将会非常容易。
本文主要面向有Java编程经验的开发者,将会介绍Kotlin的基本语法和特性。如果你没有Java编程经验,想要直接上手Kotlin,建议直接在网上搜索Kotlin入门的相关文章。
重要
这篇文章是我看完《Neural Networks and Deep Learning》一书后的个人读书笔记。本文的风格更加偏向于对有一定数学基础的人的科普,并非专业文章。如果你是相关专业的学生或者专业人士,在学习和研究过程中应该考虑研读权威书籍,请勿以本文作为参考。如有理解错误,欢迎指正。
本文主要围绕着如何识别手写数字展开。具体来讲就是给定一个28x28的纯灰度图的手写数字图像,如何判断它是0-9中的哪个数字。我们将使用一个简单的神经网络来实现这个功能。
注意
此AI并非“人工智能”,而是我们早期意义上的传统AI,并无学习能力,纯粹用算法实现五子棋每一步棋的应对策略。
上一章成功的实现了一个五子棋AI,尽管它的性能非常不佳。接下来,我们打算在此基础上进行一系列优化,大幅度提高运算性能。
注意
此AI并非“人工智能”,而是我们早期意义上的传统AI,并无学习能力,纯粹用算法实现五子棋每一步棋的应对策略。
上一章进行了一个五子棋游戏框架的搭建。应该来说,除开AI以外,其他的部分全部写完了。从这章开始,就详细介绍一下五子棋的AI算法。这里说一件非常令人振奋的消息:这章看完之后,你的五子棋AI已经可以下棋了,唯一的缺点就是奇慢无比,但是只要你愿意让他思考足够长的时间,他的棋力绝对是非常棒的了。优化算法将在后续的章节慢慢讲解。
注意
此AI并非“人工智能”,而是我们早期意义上的传统AI,并无学习能力,纯粹用算法实现五子棋每一步棋的应对策略。
之前说想写一些比较大型的算法,想了半天,还是觉得写五子棋的AI比较合适。一则因为自己研究过这个,有一些基础,二则尽管现在网上有很多五子棋AI算法的资料,但是确实都有些晦涩难懂。就想着借这个机会,凭自己的理解,尽量的讲通俗一些。
上一篇文章主要讲了一些并发编程的简单例子。本文进一步扩展,就以常见的N皇后问题,来展示一下如何对回溯问题进行多线程求解。