图形计算器之人工智能
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
图形计算器之人工智能
在接触CASIO公司的图形计算器Classpad 330的三个月里,我们通过研究发现Classpad的编程功能真的很强大,简直就是一个可以随身携带的Visual Basic语言编程器,同时,也是因为一次偶然的机会,在了解到iphone4s的siri语音控制功能给人们所带来的便利之后,我便有了编一个人工智能对话程序的想法。
【探究目的】
利用图形计算器的编程功能,在机器上实现一个便利的人工智能对话程序,从而对计算机算法以及相关知识有一个深入的认识。
【探究过程】
说起人机智能对话,我最先想到的是这样一个简单的程序:
Lbl r‘设置循环点r
Inputstr x,"Hello!"‘输入语句,保存至x变量
If x=m
Then
Print n ‘输出变量n
Ifend
Inputstr x,"next talk? ","next talk"
Goto r‘前往循环点r
(其中m为预设问题,n为预设回答)
通过判断输入问题是否与预设问题等价,来进行回答。有了这个基础,我便有了信心,开始扩大这个数据库的容量,而dt()这个子程序就是那个时期的产物。可是很快,我就遇到
了困难,如果要实现日常的对话,这个数据库将会变得无比巨大,因为一旦有一个字符不同,系统便会无法判别,就连大小写甚至句末的空格、句号、问号等都要加以区分,实在是很麻烦,所以我便开发了如下的筛选化归程序段:
Strlwr x,x ‘将字符串x全部改成小写字母Strlen x,xl ‘测量字长保存至xl变量
Chrtonum x,ui,xl ‘ui取得末位字符对应的机内码If ui=32 or ui=44 or ui=46 or ui=33 or ui=63 ‘32代表“空格”的机内码,44
代表“句号”的机内码,以此
类推…
Then
Strleft x,xl-1,x ‘x取得左起至xl-1的字符串Ifend
于是乎,当你输入“how are you ”或“how are you?”或“How are you?”时,对于机内变量x,都是同一个问题“how are you”,这样就有效地节约了数据库的空间。然而随后,在使用的过程中,我又发现,数据库再大,也还是有无法识别的问题,所以,我便想让它具有学习的功能,程序段如下:
z=0 ‘z变量起标志作用
If x=m
Then
z=z+1
Print n
Ifend
If x=m2
……
If x=m3
……
…………‘以此类推就可以扩大数据库容量
If z=0
Then
lp() ‘运行学习子程序(learning part) Ifend
子程序段如下:
q=0 ‘q变量起标志作用
If q=1
Then
m1=x
Inputstr n1
q=q+1
Return ‘返回主程序
Ifend
If q=2
Then
m2=x
Inputstr n2
q=q+1
Return
Ifend
If q=3
……
………‘以此类推就可以扩大数据库容量
这样,它就具有了学习的功能。此时的程序已经趋于完善,可当我通过看说明书知道了Strleft这个函数的作用之后,顿时有了新的想法——给对话程序加上“调用其他程序“的功能,程序段如下:
计算:
Strleft x,4,xt ‘xt取得左起第4个字符之前的字符串
If at=“calc”
Then
Strmid x,6,xy ‘xy取得左起第6个字符之后的字符串
te=StrtoExp(xy) ‘将xy转换为表达式并计算
ExptoStr te,ter ‘将te转换为字符串
Print ter
Ifend
绘图:
If xt=“draw”
Then
Strmid x,6,xy
DelVar f ‘删除变量f
Define f(x)=StrtoExp(xy) ‘定义变量f为函数f(x) Clrgraph
Drawgraph f(x) ‘画出f(x)的函数图象
Pause
Ifend
调用其他自制程序:
Strleft x,5,xtt
If xtt=“solve”
Then
Fc() ‘解一元二次方程程序
ifend
控制程序自身:
If x=“bye”or “goodbye”……
Then
Stop ‘程序结束
Ifend
If x=“pause”
……
If x=“clear text”
……
至此,程序的主体已经完成,再加上心情和体力这两项富有人性化的模块,和富有人性化的提示语,整个程序就算是完成了, 程序段大致如下:
心情模块:
a=Rand(1,100)
Lbl r
a=a-1
If 75 Then 显示好的回答 Elseif 25 Then 显示一般的回答 Elseif a<=25 显示差的回答 Ifend Goto r 体力模块: c=rand(1,50) Lbl r b=rand (0, 1) c=c-1 If c<0