最近看到一个很有“未来感”的新闻:一辆特斯拉在拉斯维加斯出了车祸,撞“死”了一个……emmmm……机器人。不知道是意外还是炒作,又或者是这位机器人故意碰瓷,反正人们也无法从受害者口中了解“被特斯拉撞是怎样一种体验”了。
图为受害者,情绪看起来很稳定
随着“人工智能”的应用场景越来越多,此类新闻以后可能也会越来越频繁。但愿这些机器人们能严格遵守阿西莫夫三定律:
机器人不得伤害人类个体,或者目睹人类个体将遭受危险而袖手不管机器人必须服从人给予它的命令,当该命令与第一定律冲突时例外机器人在不违反第一、第二定律的情况下要尽可能保护自己的生存
在早些年,人工智能这个概念还没有这么火的时候,提到 AI 经常是指游戏中电脑角色的运行策略。比如枪战游戏、即时战略游戏、MOBA 类游戏中的电脑方,对于寻路、攻击、躲避等行为的判断和执行。早期的一些 AI 有点傻,真的可以称得上“人工智障”。比如玩过星际争霸的玩家一定知道“勾农民”的战术:你只要攻击一下电脑方的基地,它的所有农民就会放下手中工作来追着你。
在众多可编程的游戏中,有个比较知名的项目:Robocode。它是 IBM 在 2001 年发布的坦克机器人战斗仿真引擎,并在数年后开源。简单来说,它就是一个“坦克大战”的游戏,你可以控制一辆坦克,和别人对战。然而与一般游戏所不同的是:你不是通过键盘鼠标控制坦克,而是需要自己写一段代码,制定坦克的策略,在游戏开始后自动对战。
这里我定义了一个名叫 World 的坦克类,继承框架提供的 Robot 类。在初始化里,把雷达和炮台角度绑定,这样只要发现敌人就可以开炮了。run是主体策略部分,会一直循环执行,这里我让它同时做三件事:炮台旋转90度、车身旋转随机角度、车身前进/后退随机距离。而当发现敌人后,就开炮,并将炮台移动10度(避免死锁)。