15人工智能宁波效实中学任立椋.docx

上传人:b****8 文档编号:29360998 上传时间:2023-07-22 格式:DOCX 页数:28 大小:122.17KB
下载 相关 举报
15人工智能宁波效实中学任立椋.docx_第1页
第1页 / 共28页
15人工智能宁波效实中学任立椋.docx_第2页
第2页 / 共28页
15人工智能宁波效实中学任立椋.docx_第3页
第3页 / 共28页
15人工智能宁波效实中学任立椋.docx_第4页
第4页 / 共28页
15人工智能宁波效实中学任立椋.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

15人工智能宁波效实中学任立椋.docx

《15人工智能宁波效实中学任立椋.docx》由会员分享,可在线阅读,更多相关《15人工智能宁波效实中学任立椋.docx(28页珍藏版)》请在冰豆网上搜索。

15人工智能宁波效实中学任立椋.docx

15人工智能宁波效实中学任立椋

图形计算器之人工智能

宁波效实中学任立椋指导老师梁毅

在接触CASIO公司的图形计算器Classpad330的三个月里,我们通过研究发现Classpad的编程功能真的很强大,简直就是一个可以随身携带的VisualBasic语言编程器,同时,也是因为一次偶然的机会,在了解到iphone4s的siri语音控制功能给人们所带来的便利之后,我便有了编一个人工智能对话程序的想法。

【探究目的】

利用图形计算器的编程功能,在机器上实现一个便利的人工智能对话程序,从而对计算机算法以及相关知识有一个深入的认识。

【探究过程】

说起人机智能对话,我最先想到的是这样一个简单的程序:

Lblr‘设置循环点r

Inputstrx,"Hello!

"‘输入语句,保存至x变量

Ifx=m

Then

Printn‘输出变量n

Ifend

Inputstrx,"nexttalk?

","nexttalk"

Gotor‘前往循环点r

(其中m为预设问题,n为预设回答)

通过判断输入问题是否与预设问题等价,来进行回答。

有了这个基础,我便有了信心,开始扩大这个数据库的容量,而dt()这个子程序就是那个时期的产物。

可是很快,我就遇到了困难,如果要实现日常的对话,这个数据库将会变得无比巨大,因为一旦有一个字符不同,系统便会无法判别,就连大小写甚至句末的空格、句号、问号等都要加以区分,实在是很麻烦,所以我便开发了如下的筛选化归程序段:

Strlwrx,x‘将字符串x全部改成小写字母

Strlenx,xl‘测量字长保存至xl变量

Chrtonumx,ui,xl‘ui取得末位字符对应的机内码

Ifui=32orui=44orui=46orui=33orui=63‘32代表“空格”的机内码,44代表“句号”的机内码,以此类推…

Then

Strleftx,xl-1,x‘x取得左起至xl-1的字符串

Ifend

于是乎,当你输入“howareyou”或“howareyou?

”或“Howareyou?

”时,对于机内变量x,都是同一个问题“howareyou”,这样就有效地节约了数据库的空间。

然而随后,在使用的过程中,我又发现,数据库再大,也还是有无法识别的问题,所以,我便想让它具有学习的功能,程序段如下:

z=0‘z变量起标志作用

Ifx=m

Then

z=z+1

Printn

Ifend

Ifx=m2

……

Ifx=m3

……

…………‘以此类推就可以扩大数据库容量

Ifz=0

Then

lp()‘运行学习子程序(learningpart)

Ifend

子程序段如下:

q=0‘q变量起标志作用

Ifq=1

Then

m1=x

Inputstrn1

q=q+1

Return‘返回主程序

Ifend

Ifq=2

Then

m2=x

Inputstrn2

q=q+1

Return

Ifend

Ifq=3

……

………‘以此类推就可以扩大数据库容量

这样,它就具有了学习的功能。

此时的程序已经趋于完善,可当我通过看说明书知道了Strleft这个函数的作用之后,顿时有了新的想法——给对话程序加上“调用其他程序“的功能,程序段如下:

计算:

Strleftx,4,xt‘xt取得左起第4个字符之前的字符串

Ifat=“calc”

Then

Strmidx,6,xy‘xy取得左起第6个字符之后的字符串

te=StrtoExp(xy)‘将xy转换为表达式并计算

ExptoStrte,ter‘将te转换为字符串

Printter

Ifend

绘图:

Ifxt=“draw”

Then

Strmidx,6,xy

DelVarf‘删除变量f

Definef(x)=StrtoExp(xy)‘定义变量f为函数f(x)

Clrgraph

Drawgraphf(x)‘画出f(x)的函数图象

Pause

Ifend

调用其他自制程序:

Strleftx,5,xtt

Ifxtt=“solve”

Then

Fc()‘解一元二次方程程序

ifend

控制程序自身:

Ifx=“bye”or“goodbye”……

Then

Stop‘程序结束

Ifend

Ifx=“pause”

……

Ifx=“cleartext”

……

至此,程序的主体已经完成,再加上心情和体力这两项富有人性化的模块,和富有人性化的提示语,整个程序就算是完成了,程序段大致如下:

心情模块:

a=Rand(1,100)

Lblr

a=a-1

If75

Then

显示好的回答

Elseif25

Then

显示一般的回答

Elseifa<=25

显示差的回答

Ifend

Gotor

体力模块:

c=rand(1,50)

Lblr

b=rand(0,1)

c=c-1

Ifc<0

Then

Print"Iamtired..."

Pause

Inputv,"Wanttotalkmore?

(Input1/0)"

ifv≠b‘体力耗尽后,每次都有50%的几率结束程序

Then

Print"Sorry,Iamreallytired."

Print“TALKEND”

Stop

Ifend

Ifend

Gotor

【探究步骤】

1.开机后,按Menu键进入主菜单,如图:

2.找到Program模块,通过触摸笔单击的方式进入该模块,如图:

3.单击左上角的下拉菜单,选择VariableManager项,如图;

4.单击左上角的Edit菜单,选择CreateFolder项,如图:

5.输入文件夹名称,单击OK,如图:

6.关闭VariableManager,Folder下拉菜单中选择新建的文件夹进入,如图:

7.单击上方左起第二个图标,输入主程序名称,单击OK,如图:

8.单击上方左起第一个图标,输入主程序代码如下:

DispText‘显示文本框

SetDecimal‘设置为十进制

rand(1,100)⇒a

rand(1,50)⇒c

InputStrx,"Hello!

"

print"Hello!

"

Lblr

rand(0,1)⇒b

StrJoin"-",x,y

printy

ifc≤0

then

print"Iamtired..."

pause

inputv,"Wanttotalkmore?

(input1/0)"

ifv≠b

then

print"Sorry,Iamreallytired."

print"TALKEND"

stop

ifend

ifend

StrLwrx,x

StrLenx,xl

ifxl=0

then

Print"Whatdoyouwanttosay?

"

gotort

ifend

ChrToNumx,ui,xl

ifui=32orui=44orui=46orui=33orui=63

then

strleftx,xl-1,x

IfEnd

StrLeftx,4,xt

ifxt="calc"

then

StrMidx,6,xy

strToExp(xy)⇒te

ExpToStrte,ter

strjoin"Theansweris",ter,strr

printstrr

gotort

ifend

StrLeftx,6,xt

ifxt="draw2d"

then

StrMidx,8,xy

DelVarf

definef(x)=strToExp(xy)

Print"Iamdrawingit..."

DrawGraphf(x)

print"Done!

"

pause

gotort

ifend

StrLeftx,5,xtt

ifxtt="solve"

then

print"Iamsolving..."

fc()

print"Done!

"

ExpToStrua,ua

ExpToStrub,ub

StrJoin"x₁=",ua,strr1

StrJoin"x₂=",ub,strr2

Printstrr1

Printstrr2

gotort

ifend

StrLeftx,6,xt

ifxt="draw3d"

then

StrMidx,8,xy

DelVarz14

definez14(x,y)=strToExp(xy)‘3D绘图

Print"Iamdrawingit..."

SelOn3D14

draw3d

print"Done!

"

pause

gotort

ifend

lp()

dt()

lp2()

lblrt

a-1⇒a

c-1⇒c

inputstrx,"nexttalk?

","nexttalk"

Gotor

注意1:

fc(),lp(),dt(),lp2()都为子程序,分别起学习数据库(输入),原始数据库,学习数据库(输出)的功能,代码中所涉及的所有语句都可以通过手动输入的方式“依样画葫芦”得到,也可以在上方的“Misc”、“I/O”、“Ctrl”菜单中找到。

注意2:

计算器中赋值语句为“⇒”而不是“=”。

9.同理,新建子程序fc,dt,lp,lp2及辅助程序pp,输入代码如下:

dt:

ifx="idonotwanttosayanything"orx="886"orx="goodbye"orx="byebye"orx="bye"

Then

print"So,goodbye!

"

print"TALKEND"

Message"Goodbye!

"

Stop

IfEnd

ifa≥75andx="howareyou"orx="how'reyou"

then

print"I'mfine,thankyou."

1⇒k

ElseIf25≤a<75andx="howareyou"orx="how'reyou"‘心情模块的体现

Then

print"I'mjustsoso."

1⇒k

ElseIfa<25andx="howareyou"orx="how'reyou"

then

print"Idon'tfeelverynice..."

1⇒k

IfEnd

ifx="showyourdata"

then

print"Here'smymood:

"

printa

print"Here'smypower:

"

printc

1⇒k

ifend

ifx=""

then

print"?

?

"

1⇒k

ifend

Ifx="hello"orx="hi"

then

print"Hi!

"

1⇒k

ifend

ifx="whatisyourname"

then

print"MynameisCasio."

1⇒k

ifend

ifx="pause"

then

print"Ok,Ihavebeenpaused."

pause

1⇒k

ifend

ifx="goodjob"orx="howkindofyou"

then

print"Thankyou."

print"Itismypleasure."

a+2⇒a

1⇒k

ifend

ifx="cleartext"

then

print"Ok,Iwillclearit..."

wait1

ClrText

1⇒k

ifend

ifx="cleargraph"

then

print"Ok,Iwillclearit..."

wait1

ClrGraph

print"Done!

"

1⇒k

ifend

Return

fc:

Inputua,"ax²+bx+c=0,a?

"

Inputub,"b?

"

Inputuc,"c?

"

ub^2-4×ua×uc⇒ud

ifud>0

Then

(-b+√(ud))/(2ua)⇒ux

(-b-√(ud))/(2ua)⇒uy

message"liangjie"

PrintNaturalux,"x1="

PrintNaturaluy,"x2="

IfEnd

Ifud=0

Then

(-ub)/(2ua)⇒uz

message"chonggen"

PrintNaturaluz,"x1=x2="

IfEnd

Ifud<0

then

(-ub+√(ud))/(2ua)⇒ua

(-ub-√(ud))/(2ua)⇒ub

message"xvgen"

PrintNaturalua,"x1="

PrintNaturalub,"x2="

ifend

return

lp:

0⇒k

ifx=m1

then

printn1

1⇒k

ifend

ifx=m2

then

printn2

1⇒k

ifend

ifx=m3

then

printn3

1⇒k

ifend

ifx=m4

then

printn4

1⇒k

ifend

ifx=m5

then

printn5

1⇒k

ifend

ifx=m6

then

printn6

1⇒k

ifend

……‘以此类推,程序便获得了100句的记忆力

ifx=m100

then

printn100

1⇒k

ifend

Return

Lp2:

ifk=0

then

print"Icannotunderstand..."

print"Pleaseteachme..."

Ifq=1

then

x⇒m1

inputstrn1,"Pleaseteachme.Theanswer?

"

q+1⇒q

Return

ifend

Ifq=2

then

x⇒m2

inputstrn2,"Pleaseteachme.Theanswer?

"

q+1⇒q

Return

ifend

Ifq=3

then

x⇒m3

inputstrn3,"Pleaseteachme.Theanswer?

"

q+1⇒q

Return

ifend

Ifq=4

then

x⇒m4

inputstrn4,"Pleaseteachme.Theanswer?

"

q+1⇒q

Return

ifend

Ifq=5

then

x⇒m5

inputstrn5,"Pleaseteachme.Theanswer?

"

q+1⇒q

Return

Ifend

……‘以此类推,程序便获得了100句的记忆力

Ifq=100

then

x⇒m100

inputstrn100,"Pleaseteachme.Theanswer?

"

1⇒q

Return

ifend

IfEnd

return

pp:

"0"⇒m1

"0"⇒m2

"0"⇒m3

"0"⇒m4

"0"⇒m5

……‘以此类推

"0"⇒m96

"0"⇒m97

"0"⇒m98

"0"⇒m99

"0"⇒m100

"0"⇒n1

"0"⇒n2

"0"⇒n3

"0"⇒n4

"0"⇒n5

……‘以此类推

"0"⇒n97

"0"⇒n98

"0"⇒n99

"0"⇒n100

1⇒q

0⇒a

0⇒b

0⇒c

10.运行辅助程序pp,如图:

11.运行主程序,就可以实现智能对话以及各种各样的调用功能了,如图:

【探究反思&总结】

1.classpad330没有数组变量功能,这是最大的遗憾。

因为如果有了数组变量,就可以利用Forto语句,以空格为标志,分割各个单词,过滤掉“please”之类无意义的词汇,抓关键词回答问题,甚至还可以具有统计词频的功能,从而实现更加高级的人工智能,达到目前市面上成熟的人机对话程序的水平。

然而,终究没有数组变量,所以只能成为泡影。

2.classpad330不支持中文,这也是一种缺憾,所以对使用者的英语水平有一定要求(当然要求也不高)。

不过,中文复杂的语言结构也是很难被计算器所驾驭的。

3.对于第一次接触计算器编程的我来说,能编出这样的程序,确实让我自己感到很惊讶。

回想起以前那些为了寻找程序中的bug(漏洞)而绞尽脑汁的日子,现在也觉得挺有成就感的。

感谢老师给予我们的帮助,也感谢那些一起研究计算器编程的同学,正是通过我们之间相互的交流学习,才有了今天的思想火花。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 自然景观

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1