数学建模社区-数学中国
标题: 让计算机通过“模仿学习”学会解一类小学推理题的代码程序 [打印本页]
作者: madio 时间: 2020-3-11 09:26
标题: 让计算机通过“模仿学习”学会解一类小学推理题的代码程序
编程实验:让计算机通过“模仿学习”学会解一类小学推理题
: O7 e. k7 ]; ~* U+ z让我们来看一下这道推理题:
赵小亮、潘芸、叶昭君三人,一个是北京人,一个是上海人,一个是香港人。现在下面三句话中只有一句是真的:
1. 赵小亮是上海人
2. 潘芸不是上海人
3. 叶昭君不是香港人
求:赵小亮、潘芸、叶昭君分别是哪里人。
这道题目有两种解法:
1. 假设赵、潘、叶三人的籍贯分别为{上海、北京、香港}{上海、香港、北京}{北京、上海、香港}……穷举出所有的情况。每次都要检验三句话中有多少句是符合事实的,如果只有一句话是对的,则是正确答案。
2. 假设三句话中的某一句话是对的,然后检验另外两句话的正确性。如果另外两句话都是错误的,则这个假设是正确答案。
为了编程的方便,我采用第一种方法。
本程序的目的不是解决这一道“北上广”推理题,而是让程序能够通过学习解决这道“北上广”,从而能够解决所有同类的推理题目。
程序运行步骤及原理:
先输入题目中的所有对象名(即上题中的人名,句子中做主语),以空格分隔,如:黑 银 黄。
再输入所有的谓词(即待判定的事实),如:是中国人 是日本人 是北欧人。
接下来输入一个表示否定的词,如:不。
然后告诉程序总共有多少个命题,我输入:4。
最后按照以下格式输入所有的命题:
1 银 是北欧人
2 黄 是日本人
3 黑 不 是中国人
4 黑 是中国人
程序询问:以上命题中有多少个是真命题?
我输入:3
题设条件的输入过程到此为止,接下来的便是程序的“模仿学习”过程了。
我输入:枚举所有可能情况
这时候程序就会开始进行枚举。当然它不会把所有可能的假设情况一次性列举出来,而是每次显示一种情况,等待用户来确认(这个假设是否正确)。输出内容如下:
黑是中国人
银是日本人
黄是北欧人
这是正确结果吗?(Y/N)
我输入N
程序要求我输入一段推理过程,证明这个假设为什么是错误的(如果我前面输入的是“Y”,它就会要求我证明该假设为什么正确)。我输入:统计真命题数
程序显示:
黑是中国人
根据当前假设,以上1个命题为真命题。
我再输入:与题设条件相比较
程序输出如下4行文字:
按照你的设定条件,所有命题中,真命题数目为:3
按照当前的假设,真命题数目为1
当前假设不成立的原因是? 设定的真命题数_____按照当前假设推出的真命题数
请在划线处填上:大于、小于、等于、不等于。要强行退出训练,请输:结束训练
我输入:不等于
按下回车以后,我没有再输入任何内容,程序便开始自动执行我刚才输入的第一步命令——枚举所有可能情况。程序开始输出第二个假设:
黑是中国人
银是北欧人
黄是日本人
这是正确结果吗?(Y/N)
由此可以看出,程序已经记忆下了我刚才输入的三步命令:枚举所有可能情况、统计真命题数、与题设条件相比较。但是程序还没有完全学会判断一个假设是正确的还是错误的,于是我输入Y,告诉程序这个假设是正确的(题目是我出的,我当然知道答案)。
程序执行它保存的第二步、第三步指令:统计真命题数、与题设条件相比较。
程序输出如下:
银是北欧人
黄是日本人
黑是中国人
根据当前假设,以上3个命题为真命题。
按照你的设定条件,所有命题中,真命题数目为:3
按照当前的假设,真命题数目为3
当前假设成立的原因是? 设定的真命题数_____按照当前假设推出的真命题数
请在划线处填上:大于、小于、等于、不等于。要强行退出训练,请输:结束训练
我输入“等于”,告诉程序:按照假设,如果推出的真命题数与我题设条件中要求的真命题数是相等的,这个假设就是正确的。
到此处,学习过程就已经完成了。虽然程序接下来还会显示第三个假设,但是后面我只要输入N告诉它此假设错误,然后一步再打入“结束训练”,就可以了。
/ a$ ]/ W9 Q# Z6 z0 d
9 N- S7 ~% u, N9 E- N
-
-
模仿学习简单推理.rar
3.98 MB, 下载次数: 2, 下载积分: 体力 -2 点
售价: 10 点体力 [记录]
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) |
Powered by Discuz! X2.5 |