一、引言

AI(Artificial Intelligence)人工智能,可以说是最近比较火热一个词。就像曾经的互联网概念一样,任何一个项目只要和AI搭上边,就似乎显得非常高大上。AI是一个领域,是一门学科,里面涉及的知识非常多,仅我们大家能想到的AI应用,就能随口说出数几种,像NLP(Natural Language Processing)自然语言处理,TTS(Text To Speech)文本到语音,涉及的人机对话,语音合成。以及我们现在所用到的人脸识别,正在推广的刷脸支付,家里用的智能扫地机器人。情景感知智能家具、智能金融。无处不在的AI技术,同我们的生活息息相关,也在不断影响着我们的生活。AI概念本身不错,如区块链一样,本身是一个很好的理念,但由于部分人过度投机,使得这个领域也存在着参差不齐,鱼龙混杂的情况。现实中存在这种情况,是个人,会写个逻辑语句,就敢叫什么人工智能工程师,什么算法工程师,是个项目加一点点逻辑判断,也敢叫人工智能项目。比较浮躁,缺乏对科学基本的敬畏。我们目前所见到的所谓的人工智能的项目,大多是把市面上已经有的人工智能服务,自己整合一下,包装一下,用用而已,但如果真要形成核心产品,要有相当长的路要走,要投入巨大的人力物力财力。试想,你做的所有的服务,都是其他厂家所提供的,自己没有核心的技术,很容易受到其他厂商的控制,除非你将来做的产品可以被这些大厂收购,但话说回来,做的产品没有核心竞争力,只是整合别人的功能,是没有什么技术壁垒的,就更不要说形成自己的护城河了,很容易被模仿,超越。所以,个人认为,人工智能,最为基础的还是算法,要最最基础的研究,涉及大量的计算机、心理学、运筹学等各学科领域的知识。以文字转语音为例,单纯的一个字转成语音,不是很难,但一长段话转成很流畅的语音,并可以跟据不同人的音色来采样和播放,这一个看似很小的功能,背后有着大量的研发人员。人工智能的核心,就是算法,不同的算法结合起来,像一个个DNA一样,组成了人工智能的应用。所以,今天我们就从一个最简单的例子入手,从而开启人工智能最最基础的算法入门之旅。

二、问题场景

这个问题的确比较基础,网上搜索一下,会一有大堆这样的文章。我自己也在网上看了一些,但发现网上探索出来的内容还是不是很好,有些代码还存在一些问题。不是很严谨。这个世界上,指责别人最容易,认清自己最难。与其去吐槽别人,不如自己写一个更好一点文章,分享给大家。

现在我们进入主题。

有3个美女和3个野人要过河,只有1条船,没有船夫,这6个人都会划船。但这条船1次只能载两个人,任何情况下,只要野人的数量大于美女的数量,美女就会被野人吃掉。也就是说,在河的两岸,即河的左岸上和右岸上,野人的数量任何时候都不能大于美女的数量。

如何6个人能全部过河,并且美女安全(即不被野人吃掉)?

如果我们从逻辑上理解,其实就是各种方案的探索,最终试出一条可行的方案。

现状,我们可以认为他们都在河的左岸,要到河的右岸:

美女1 美女2 美女3 ||河||

野人1 野人2 野人3 ||河||

第一步,两个野人先一起到河的右岸,然后一个野人回来:

美女1 美女2 美女3 ||河||

   野人2 野人3   ||河||   野人1

第二步,两个野人一起到河的右岸,然后一个野人回来:

美女1 美女2 美女3 ||河||

         野人3   ||河||   野人1 野人2

第三步,两个美女去,然后一个美女和一个野人回:

美女2 美女3 ||河|| 美女1

    野人2 野人3  ||河||  野人1

第四步,两个美女去,一个野人回。

||河|| 美女1 美女2 美女3

野人1 野人2 野人3 ||河||

第五步,两个野人去,一个野人回。

    ||河||  美女1 美女2 美女3

野人2 野人3 ||河|| 野人1

第六步,两个野人回。

||河|| 美女1 美女2 美女3

||河|| 野人1 野人2 野人3

以上问题,可以理解为决策问题,其实也是人工智能学科中的一个非常基础的经典问题。

我们分析的思路以及答案,虽然似乎是解决了问题。但问题来了,除了我们上述使用的方法,这个题目还有没有其他方法?哪种最快?以上问题只涉及6个人,我们通过人工分析的方法,还可以将结果罗列出来,那如果是60个人,600个人,难道我们还是靠这种方法来分析?这样单凭人力手工计算是非常复杂耗时的。那如何实现呢?这就需要我们编制一套搜索算法,通过计算机来帮助我们计算。

三、问题分析

我们从初态和终态来分析,可以知道初态是河的左岸有3个美女和3个野人,而终态是河的右岸有3个美女和3个野人。就是初始状态是【3,3】,表示左岸最开始,有3个美女和3个野人。而终态是【0,0】,表示左岸最终美女和野人的数量均为0。而美女和野人,从左岸到右岸,右岸回左岸,是要靠船来运送的,所以,船的状态有两种(航行中就不考虑了),要么在左岸,要么在右岸。我们用1表示船在左岸,用0表示船在右岸。那么结合美女和野人的状态,最初始状态就是【3,3,1】,表示最初船停靠在左岸,左岸有3个美女,3个野人。那么终态我们知道,是船在右岸,左岸美女和野人数量都为0,那么怎么用数学来表示呢?就是【0,0,0】。

现在问大家一个问题,如果从状态的视角来分析,会有几种状态?

很显显然,会有32种状态,怎么来的?这就用到了数学基础中的排列组合。美女的状态有4种【0,1,2,3】,表示左岸没有美女,有1个美女,有2个美女,有3个美女。同样,野人的状态也有4种【0,1,2,3】,船的状态有2种【0,1】。排列组合一下。我们整理出

同时,我们标记出不符合条件的状态:

1、野人人数大于美女人数的状态,用绿色标出。不符合条件。因为按照题目要求,河的左岸和右岸上,野人人数大于美女人数,美女会被吃掉,任务失败。这里不仅要考虑左岸的情况,也要考虑右岸的,例如:【2,0,1】,这就很明显,船在左岸的时候,右岸有1个(3减2)美女和3个(3减0)野人,也是不满足题目要求的。

2、不可能存在的状态,用黄色标出。例如:船不可能停在没有人的岸边【0,0,1】,以及美女不可能在野人占多数的情况下,划船到对岸【3,0,1】。

整理后的状态表,如下表所示。

表3-1 左岸美女与野人的状态表

我们根据以上的状态,画出状态空间图,如下图所示。

图3-1 美女与野人过河的状态空间图

很显然,所有从初态可以到达终态的路径,都是美女可以安全过河的方案。

四、算法实现

我们分析的思路有了,接下来就是如何通过算法,实现我们的思想。其实这就用到了数据结构中,经典的图的搜索。图的遍历,一般有深度优先和广度优先遍历算法,如果从最小生成树的角度,可以使用普里姆算法和克鲁斯卡算法。如果题目要求最优解,我们还会用到最短路径计算的概念。这里如果扩展的话,又可以写很多。因为同一个问题,解决问题的方法也肯定不止一种。接下来,我们算法实现的基本思路就是:找出船上的载人状态,比如:船上可以有1个美女,1个野人,也可以有2个美女,也可以有2个野人。也就是船上的承载人数,受到船的承载量限制。本文题目要求是船上最多为2个。我们根据船上的运送人员的数量,根据船的运送满足题目要求的结果,来去寻找满足条件的运送方案,之后我们存在动态数组中。同时,为了防止重复计算,我们还要判断生成的方法是不是已经存在历史结果中,当然,历史结果的存储我们用的也是动态数组。如果历史中已经有了这条信息,我们就不再计算,再去寻找新的方法。直到找出所有的结果。实现的算法如下图4-1所示,已经经过实验检验,并可以保证正确运行。




![

图4-1 算法实现

代码执行结果,我们可以看到,安全过河的方法有好几种。如下图4-2 算法执行结果所示。

图4-2 算法执行结果

五、结论

本文中,我们从美女与野人过河这个经典的问题出发,展开分析。阐述了解决此类问题的基本逻辑与解决方法。并对美女与野人的算法进行了扩展。美女人数和野人数量,以及船的承载人数进行参数修改后,此算法仍然可以根据要求进行计算,算法的灵活性较强。如下图5-1 人数与船承载量参数修改后执行的结果,所示。

图5-1 人数与船承载量参数修改后执行的结果

本文也有不足之处,就是程序的算法仍然有优化的空间。根据测算,当船最大承载量为2,美女和野人数量各为8人的情况下,找到第一种方案程序需要执行约40万次。如下图5-2所示,算法的时间复杂度和空间复杂度较高,仍然有进一步的优化空间。

图5-2 美女和野人数量各为8人的情况

从这个实验中,我们也可以发现,仅这么一个简单问题,用到的理论知识已经相当多了,数据结构与算法、数值计算。而且还并不是十分完美,离理想中的优美的算法,还有较大的差距。仅从这一个小问题出发,要做到算法的极限,仍然需要付出很多努力,而这仅仅只是人工智能中,非常非常非常基础的,非常非常非常微小的一个知识点而已。而真要做到极致,博士也不是那么容易。所以,有时候就不明白,有时仅仅本科毕业一两年的人也敢叫什么算法工程师,真不知道哪里来的自信。真正的科学研究是枯燥的,是要沉下心来踏踏实实做研究的,也是要耐的住寂寞的。不走心的走秀最多只能是昙花一现,唯有踏实与真诚才可以基业长青。最后,希望本文能给大家带来帮助。

共勉!

源代码已经作为资源上传。可在我的资源中查看。代码不重要,最重要的是搞清思路。不明白其中的逻辑,把代码下载下来,即便是正确运行了,也毫无意义。

如果需要交流,请关注我的微信订阅号:佳佳原创

人工智能基础之美女和野人过河问题相关推荐

  1. 人工智能--野人过河

    课程简介 人工智能(Artificial Intelligence),英文缩写为AI.它是研究.开发用于模拟.延伸和扩展人的智能的理论.方法.技术及应用系统的一门新的技术科学.人工智能的定义可以分为两 ...

  2. 传教士与野人过河问题 人工智能实验算法

    问题描述 有 N 个传教士和 N 个野人来到河边渡河,河岸有一条船,每次至多可供 k 人乘渡.问:传教士为了安全起见,应如何规划摆渡方案,使得任何时刻, 河两岸以及船上的野人数目总是不超过传教士的数目 ...

  3. 人工智能实践作业-修道士和野人过河问题

    人工智能实践作业-修道士和野人过河问题: 用编程语言编写和调试一个基于深度优先搜索法的解决"野人与传教士过河"问题的程序.目的是学会运用知识表示方法和搜索策略求解一些考验智力的简单 ...

  4. 修道士和野人过河问题 A*算法 人工智能

    /** * 2014-08-25 by Liy * 修道士和野人过河问题,一共有3个修道士和3个野人,1条船 * 1.船最多可乘坐2人 * 2.两岸边 野人的数量不能多于修道士的数量,否则修道士会被吃 ...

  5. 首部高中《人工智能基础》教材问世,40家中学引入

     整理 | 阿司匹林 出品 | AI科技大本营(公众号ID:rgznai100) 随着人工智能逐渐上升为国际竞争的新焦点,AI 人才短缺也日益凸显,全球对于人工智能基础教育的呼声不断.国务院印发的 ...

  6. 理解与理论:人工智能基础问题的悲观与乐观

    来源:筑土为坛 梅剑华,男,1980年生,湖北秭归人,山西大学哲学社会学院教授,博士生导师,先后赴美国罗格斯大学.匹兹堡大学.奥地利萨尔茨堡大学等访学,研究方向是语言哲学与心灵哲学.实验哲学与认知科学 ...

  7. UC伯克利教授Stuart Russell人工智能基础概念与34个误区

    来源:数据简化DataSimp 数据简化DataSimp导读:UC伯克利教授StuartRussell人工智能基础概念与34个误区,Russell是加州大学伯克利分校人工智能系统中心创始人兼计算机科学 ...

  8. 综述 | 联邦学习-新兴的人工智能基础技术

    点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 编辑:Sophia 计算机视觉联盟  报道  | 公众号 CVLianMeng 转载于 :arivx, 专知 [人工 ...

  9. 大学计算机与人工智能基础课后答案,好书推荐 | 人工智能基础及应用

    原标题:好书推荐 | 人工智能基础及应用 扫码优惠购书 内容简介 本书主要介绍与人工智能相关的一些基础知识,全书共9 章.第1 章简要介绍人工智能的发展历史及国内外研究现状,第2 章详细给出学习人工智 ...

最新文章

  1. 推荐一个分布式JVM监控工具,非常实用!
  2. Python使用matplotlib可视化发散型点图、发散型点图可以同时处理负值和正值、并按照大小排序区分数据、为发散型点图添加数值标签(Diverging Dot Plot )
  3. Kubernetes安装之证书验证
  4. ASP.NET MVC 1.0 RC 版发布了【转】
  5. linux清理内存命令
  6. 为什么百万医疗险越来越多,到底选哪款?
  7. SpringBoot+Thymeleaf+DataTables实现数据的查询与显示
  8. 电脑win10-重装系统
  9. 为什么一个实例只有一个LGWR
  10. 警告: Can't find the request for http://localhost:8080/ibatisSpringDemo/ws/testWS's Observer
  11. 2008年希赛软考学院招生
  12. SQL-(增)-插入操作
  13. 一个在线工具箱:栅栏密码加密解密工具
  14. Excel数据分析day1
  15. 次世代建模之人体比例及肌肉骨骼介绍
  16. laravel-admin / Dcat admin 上传Excel并导入数据到数据库
  17. 高仿知乎android,Android高仿知乎首页Behavior
  18. Linux系统之进入单用户模式的方法及相关作用
  19. 内核网络接口层的实现
  20. ON DUPLICATE key update的介绍与使用

热门文章

  1. 用C语言求斐波那契数1,1,2,3,5,8......
  2. Excel按照单元格内设定好的次序进行工作表排序
  3. 程序员常用的网站合集
  4. 沉痛悼念游戏开发技术专家毛星云(网名“浅墨”)
  5. 荣耀最强拍照手机诞生:荣耀20系列塑造的“潮流科技宇宙”
  6. 想成为企业疯抢的新型数通人才?华为Datacom认证喊你来学习啦
  7. 躺平即是正义,另一种幸福生活的方式
  8. 大数据平台架构与原型实现-读书笔记8
  9. 如何借助分布式存储 JuiceFS 加速 AI 模型训练
  10. quartus 13.0 之四位全加器(不需要用modelism的歪门邪道)