首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

什么职业将来最容易被AI取代

很不幸—— 很可能是程序员

事情是这样的,最近本来我沉迷于NS的《超级马里奥:奥德赛》,然而突然有一天我看了一眼U站(油管)的一个talk,内容大概是通过很原始的随机构造的办法解决一个黑盒加密的puzzle,整个过程过于Geek并且机械,以至于我看了一会儿就跳过了。

不过这个放puzzle的网站就有点意思了,它是马尿的开发商任天堂做的一个类似topcoder的网站,叫codingGame.com。有从易到难的各种问题,支持主流编程语言。简单的就是教你学写代码,常规的算法练习;5分钟的Code Clash(拼速度的);复杂的就有算法类,优化类和Multiplayer的竞赛(就是类似写AI比赛谁的分高),不过和传统代码竞赛网站比这里有些不同的地方。

难度循序渐进

题目分为puzzle和compete两种。输出超时要求,第一行输出1s以内,之后每行间隔100ms以内。可能每道题略有不同。

Puzzle 分为容易,中等,难,非常难四个级别,容易级别为语言基础层次,但是也不是送分的;中等就是常规算法,binary search, BFS, DFS之类;第三级别的涉及的算法通常没有常规解,不出意外都是NP问题,不过了解背景后还是可以做的;最后一个难度很多介绍里说涉及模式识别,没看过题目。

后两种虽然难,但是test case是循序渐进的,可以慢慢发现自己解决方案里没有考虑到的情形。只有到最后几个case可能超时问题才会比较突出。

内存方面貌似没有要求。

上图中very hard的第一题就是前面提到的那个很机械的talk对应的题。题面都不想去看……

Compete部分相当于游戏的pvp,没有难度区分,评判标准除了超时以外主要是把参与者提交的程序循环分组PK,看谁最后分高,感觉类似天梯的积分规则,所以胜率和胜谁都有相应权重。参与者分为Wood1-3, Silver, Gold, Legend各个组,每个组有个boss作为分隔线,只要提交后循环赛的积分高于boss就可以升到下一级。

Compete里也有几个分类:

Bot Programming, 基本就是游戏AI涉及的那些,不过要简化很多。下图这比的是操作三种不同技能的车尽可能多的抢夺水资源,名字叫Mean Max,可能跟涉及很多策略选择有关,论坛专题里有很多人展示自己的策略组合。

刚升上Gold League的时候战绩惨不忍睹

第二种是Code Golf:使用语言的trick把源码压缩得尽量短。这好像是一些传统编程比赛网站喜欢的东西。

第三种是优化,没做过,估计比第一种领域更集中。

专为做游戏的人设计

这个网站的大部分问题有一个具体的游戏背景,看完题面以后不会感觉到很强的某种算法的倾向性,很容易抛开基础算法不熟的包袱,直接上手做。但是要想做好,就要了解背景知识,背景知识在题目的主页上有参考链接,主要是wiki和相关的专题,对于做游戏的人来说这些专题就是很好的归纳。比如下面这个叫 Coders Strike Back 的标签就有一堆:

这个问题涉及的Steering Behavior就是做游戏比较常用但是很多都用得不好的一种技术。当时解决了一个以前忽视的seek问题,直接从wood3升到了silver前5。

题目里隐藏了计算转向,加速的细节,只让输出目标坐标和动力大小

过程游戏化

下面这个题笔者刚杀入Gold League,上面还有Legend League,最右侧那一栏缩进去的是聊天区域。有半边是放代码和测试功能区。左半部分上面是游戏模拟区域,下面可以看输出信息和调试信息,整个看起来像一个IDE,游戏模拟的过程有一些辅助功能,可以停下来看每一帧(对应一次输出)的信息,也可以加速、慢速播放。这些在优化或者排错的时候都很有用,更复杂的功能要设计题的人另外实现(而通常他们都很懒),剩下要知道的信息就只能自己输出了。

整个比赛的过程还是挺有趣味性的,既有解决问题的成就感,又有比赛的刺激感。而且优化的代码得到预期的结果能更直接的通过模拟画面看到,还带五毛钱的特效……

社区

网站上可以自己创建题目,也可以社区里几个人合作完善。之前的Mean Max就是社区产出的第一个题目。讨论区还是挺活跃的,还有人专门在下面写攻略。不过想在这里找几个人一起做游戏恐怕够呛,因为没有美术。

回到标题,之前做的MeanMax内容,这里复述一下:三组玩家,每组有三辆车,一辆采水,一辆可以把随机出现的水车撞破,留下水塘,第三辆在运动中会产生怒气,释放技能需要消耗怒气,三辆车有各自不同的技能。先采集到50或者到时间结束时采集到最多的组获胜。

游戏开放的数据(就是系统输入)有每个车辆的位置,速度,摩擦力,质量;可以输出的控制参数是目标的坐标和作用力。相对来说输入信息对于控制程序来说比较有限,整个过程其实是半黑盒的,输出能控制的也有限,而影响结果的有物理因素(碰撞),时间片因素(影响决策)等等。在没有掌握影响结果的关键点之前,笔者想了一套自觉很好的决策组,然后啪啪啪的敲了两小时,一提交,排名从60+掉到200+。而对于一开始就用机器学习的方案,就没有太多的纠结,定义影响的参数,然后套模型算吧,不用为各种可能性和对应决策写太多冗余代码。可能一开始机器学习的方案结果很差,但是从长远看机器学习的结果肯定碾压人工进行决策的结果。(说到这里,刚才看到论坛里有人抱怨对神经网络不友好,那人搞了半天停在silver 200然后就放弃了╮(~~)╭)

另外,人工写代码尝试什么东西影响结果和机器学习的方式肯定效率差别也很大,也没法严密的像机器一样验证收敛方向。比如有20个环境因素,加上别人代码里有动态因素(通常题目使用的是伪随机物理方案,初始条件一样结果肯定一样,但是提交代码里可能有动态随机数),人工尝试一组参数就很麻烦,机器则快很多,而且不会烦或者犯错。

前面提到的Silver组60+的排名下,笔者只控制了一辆车,其他两辆车什么也不做,笔者尝试优化了好几处明显只会有正收益的环节,包括寻路,障碍回避,技能释放规则等等,结果排名掉到200+,然后就蒙逼了,开始加策略然后测试各种策略。一直没什么效果,用同一组数据测有提升,换一组就下降;或者和A、B比赢了,和C、D就输得一塌糊涂。一度觉得这里面有玄学。当然,最后经过仔细的推测和排查,改掉一些bug后,还是找到了关键环节,和预想的差别不大,然后很快进了Gold组,果然人工还是有点用的。其实在解决了功能环节之后,可以想象的是要想更好的效果就必须要用机器学习了。而在之前的推测关键因素的环节(可以看作未知环境的特征学习),人也比不了机器学习的方法,人靠的是直觉,而机器不靠直觉,算得快干嘛靠直觉。

大概在去年年底google发布了一个论文,大概是说通过机器学习学习数据分布,然后得出的模型和通用数据库组件相比有70%的速度提升(缓存优化的B树索引)。索引倒下了,接下来就是排序,查询等等,都是传统算法集中的区域(而搞数据库的可能一年也没能优化相关组件超过10%)。做AI的人最了解的是什么,当然是算法,数学模型,数据结构,所以AI最容易革谁的命,很可能,是在最了解的领域。[跪了]

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180202G01WRE00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券