当前位置: 首页 > 专利查询>东北大学专利>正文

基于Unity的图灵机虚拟仿真系统技术方案

技术编号:34376847 阅读:31 留言:0更新日期:2022-07-31 13:55
本发明专利技术提供一种基于Unity的图灵机虚拟仿真系统,涉及计算机虚拟仿真技术领域。该系统对图灵机进行建模,设计图灵机进行读写及状态转移的动作,利用图灵机读写字符、状态转移实现对五种算法的仿真模拟,最终以3D动画的形式呈现出图灵机模拟算法的过程,并记录图灵机读写次数及所耗费纸带方格数来计算算法复杂度。利用图灵机模拟算法时,对不同的算法设计了不同的状态转移方程。同时,考虑到不同平台的设备性能及运行环境各不相同,为了提高使用便携性,基于WebGL技术将系统发布成WebGL形式。该系统不仅能够利用模拟多种经典算法的执行过程,而且还能够模拟递归函数调用过程,实现了图灵机算法模拟的功能。图灵机算法模拟的功能。图灵机算法模拟的功能。

Virtual simulation system of Turing machine based on unity

【技术实现步骤摘要】
基于Unity的图灵机虚拟仿真系统


[0001]本专利技术涉及计算机虚拟仿真
,尤其涉及一种基于Unity的图灵机虚拟仿真系统。

技术介绍

[0002]对于每个计算机专业的学生来说,“图灵机”一词经常出现在他们的学习资料和授课老师的口中,几乎是计算机专业学生的必学知识点,在学生学习和理解计算机工作原理、算法过程、计算理论等课程内容时起到重要作用。图灵机(又称图灵计算机)是由英国数学家Alan Mathison Turing于1936年首次撰文提出的一种非常具有抽象理论意义的电子计算科学模型,为计算机诞生奠定了理论基础。图灵机不是一种具体的机器,而是一种思想模型,可制造一种十分简单但运算能力极强的计算装置,用来计算所有能想象得到的可计算函数。
[0003]图灵机是图灵受打字机的启发而假想出来的一种抽象机器,即将人们使用纸笔进行数学运算的过程进行抽象,由一个虚拟的机器替代人类进行数学运算,其处理对象是一条无限长的纸带。纸带被划分为一个个大小相等的小方格,每个小方格可以存放一个符号,有一个机器头在纸带上移来移去,机器头有一组内部状态,还有一些固定的程序。在每个时刻,机器头都要从当前纸带上读入一个方格信息,然后结合自己的内部状态查找程序表,根据程序输出信息到纸带方格上,并转换自己的内部状态,然后进行移动。
[0004]图灵提出图灵机的模型并不是为了同时给出计算机的设计,它有着如下重要意义,首先它已经充分证明了一种较为通用的随机计算模型理论,确定了一种直接实现一个计算机内部功能的方法可行性,同时它也充分提出了一种基于计算机内部结构所应有的主要计算架构。图灵机计算模型在结构设计中充分引入了一种读写与算法与程序语言的结合概念,极大的突破了过去的计算机器的设计理念。图灵机模型理论是计算学科最核心的理论,由于计算机极限计算能力就是通用图灵机的计算能力,很多问题可以转化到图灵机这个简单的模型来考虑。
[0005]利用图灵机模拟不同策略的算法不仅能更深入地理解图灵机,还能更好地从计算模型的角度研究算法。和从程序的角度理解算法相比,从计算模型的角度去模拟算法更能理解算法深层次的思想以及计算机在执行程序时的底层操作而不再局限于程序语句。图灵机虚拟仿真系统可以更形象地展示图灵机计算过程,帮助学生学习并理解图灵机工作原理,在教学过程中可以帮助老师更好地讲解图灵机。与通用图灵机相比,具体模拟到不同策略算法的图灵机在算法教学上能更好地帮助学生从计算模型的角度去更深入地理解算法。
[0006]对于建立图灵机的3D模型,Unity技术和开发平台是一种很好的选择。Unity3D版是由中国丹麦unity公司自行设计研制和自主开发的一款大型网络游戏软件开发工具,它主要使用了japhysx的基于粒子物理学的引擎,支持多种javescript、c#、boo脚本,它集成已经可以在所有应用平台、具备先进的超高延时激光照明处理系统、顶级彩色光照学和贴图处理技术、引入了众多脚本自动调试、应用领域覆盖范围广泛等出色的软件功能而使它
不仅广泛应用于网络游戏类软件行业,也在城市建筑、医学和微成像和其他专业领域中都得到了广泛的的使用。
[0007]利用Unity3D技术可以实现获取该物体的一些信息,如位置信息等。此外还可以获得父物体或子物体的相关信息,并且利用MoveTowards函数,通过给定起始位置、结束位置及步长实现仿真过程中读写头、纸带的移动操作,同时还可以利用GetComponent方法实现挂在各个物体上的脚本间的通信,包括获得其他物体上脚本内的变量、调用其他脚本函数等操作。在UI设计中可以利用SceneManagement包与UI包实现用户通过UI选择所要模拟的算法时进行场景跳转的功能。
[0008]使用Unity开发的软件可以以WebGL的形式发布,最终实现无需下载、安装插件即可使用。WebGL(Web图形库)是一种用于在Web浏览器中渲染交互式3D图形的技术。该技术最突出的特点是它可以直接使用,而无需下载和安装任何第三方插件。2011年,WebGL技术由3D图形行业的领先者Khronos联盟进行了标准化,并且现在默认在所有主流浏览器中启用,但并非所有浏览器都是一样的。过去,WebGL只由Mozilla和Google这两个浏览器供应商提供,而其他供应商则不愿提供当时的最新技术。之后,情况发生了巨大变化,最终微软加入了3D Web俱乐部。如今,几乎所有Internet流量都通过支持WebGL的客户端软件进行,从而使该技术成为向4亿以上的用户提供交互式3D内容的强大而广泛的基础。WebGL通过结合OpenGL ES 2.0与JavaScript使得用户可以通过HTML5中的Canvas元素在网页上渲染3D模型。WebGL形式有着跨平台的优势,因此对于一些轻量级的应用发布成WebGL形式是非常合适的,不会因为性能原因使系统产生卡顿。
[0009]在图灵机模拟方向上,目前大多都仅实现了抽象的图灵机模拟仅采用显示状态转移及纸带上的方格,进行3D建模实现虚拟仿真的图灵机较少。从实现角度上来看国内外实现的多为通用图灵机以及模拟较为简单的算法的图灵机,如模拟一元加法的图灵机。国内在本科教学中大多都以图片的形式展现图灵机,对于学生的课题设计中仅要求模拟出只用文字显示状态纸带等信息的通用图灵机即可。
[0010]在国内部分学者的研究中有基于sendmail仿真图灵机也有设计通用图灵机。这些都仅模拟了通用图灵机或者简单的算法如:一元加法、简单的判定机等,并且结果要么以文字形式呈现要么仅进行设计却没给出具体的仿真结果。国外以斯坦福哲学百科全书中的图灵机为例有模拟了抽象的简单算法的图灵机,也有进行制作一个真实存在的机器模拟图灵机。这些都只模拟了较为简单的算法如:一元加法、求素数、可除数等。无论是为了科研仿真如David Gajser在验证单带图灵机是否能在线性时间内运行时进行了简单仿真,还是为了提供一个模拟图灵机的模型,伴有3D模型的虚拟仿真及对一些复杂的算法进行模拟都是较为少见的。

技术实现思路

[0011]本专利技术要解决的技术问题是针对上述现有技术的不足,提供一种基于Unity的图灵机虚拟仿真系统,实现图灵机的虚拟仿真。
[0012]为解决上述技术问题,本专利技术所采取的技术方案是:基于Unity的图灵机虚拟仿真系统,其特征在于:包括图灵机建模模块、图灵机读写动作与状态转移的设计模块、UI设计模块、状态转移方程设计模块、算法复杂度计算模块和基于WebGL的优化模块;所述图灵机
建模模块根据任务需求基于Unity对图灵机进行建模,构建图灵机模型;所述图灵机读写动作与状态转移的设计模块用于实现图灵机读写动作和状态转移的设计;所述UI设计模块用于设计图灵机的UI界面;所述状态转移方程设计模块计用于设计图灵机实现任务需求的状态转移方程,进而通过图灵机完成任务需求;所述算法复杂度计算模块用于计算实现任务需求的算法复杂度;所述基于WebGL的优化模块将图灵机虚拟仿真系统发布成WebGL形式,并在发布后利用node.js部署在服务器上本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于Unity的图灵机虚拟仿真系统,其特征在于:包括图灵机建模模块、图灵机读写动作与状态转移的设计模块、UI设计模块、状态转移方程设计模块、算法复杂度计算模块和基于WebGL的优化模块;所述图灵机建模模块根据任务需求基于Unity对图灵机进行建模,构建图灵机模型;所述图灵机读写动作与状态转移的设计模块用于实现图灵机读写动作和状态转移的设计;所述UI设计模块用于设计图灵机的UI界面;所述状态转移方程设计模块计用于设计图灵机实现任务需求的状态转移方程,进而通过图灵机完成任务需求;所述算法复杂度计算模块用于计算实现任务需求的算法复杂度;所述基于WebGL的优化模块将图灵机虚拟仿真系统发布成WebGL形式,并在发布后利用node.js部署在服务器上,最终实现通过网页端能够访问图灵机虚拟仿真系统。2.根据权利要求1所述的基于Unity的图灵机虚拟仿真系统,其特征在于:所述图灵机建模模块根据任务需求基于Unity对图灵机进行建模的具体方法为:设定的图灵机任务需求为实现一元加法、二分搜索图灵机算法、二分搜索递归算法、可拆分背包贪心算法和0

1背包动态规划算法五种算法;确定图灵机的读写头及图灵机框架模型;利用3dsMax对图灵机的纸带、读写头和有限状态自动机进行建模;建模后导出FBX模型再导入Unity赋予材质,最终加以设计完成建模的工作;在Unity中将利用3dsMax建模后的纸带、读写头和有限状态自动机各部分绑定在一起,构成整体的图灵机模型;并添加显示自动机状态及纸带内容的text组件;为了便于用户直观地观察到图灵机的工作过程,将图灵机设计成三读写头和三纸带模型,包括输入读写头、工作读写头、输出读写头、输入纸带、工作纸带、输出纸带、自动机和状态转移显示屏。3.根据权利要求2所述的基于Unity的图灵机虚拟仿真系统,其特征在于:所述图灵机读写动作与状态转移的设计模块设计控制读写头脚本、更新纸带内容脚本、控制纸带移动脚本、状态转移脚本、状态显示脚本、模拟函数调用脚本以及单位时间访问数组用于实现图灵机读写动作和状态转移;所述控制读写头脚本用于控制读写头上下移动仿真模拟读写操作;首先在Unity场景中创建一个空物体,作为读写头移动的目标位置;通过MoveTowards()函数给定读写头的起始位置、目标位置及步长,实现改变读写头位置,使得读写头在目标位置与起始位置间往复移动;当读写头移动到目标位置时将向状态转移脚本发送信号开始进行状态转移,当读写头移动回初始位置时将向控制纸带移动脚本发送信号,开始移动纸带;所述更新纸带内容脚本用于管理纸带上数据,对外提供setBST()和getBST()两个接口,setBST()通过给定写入位置与写入数据来修改纸带上目标位置元素,getBST()通过给定指定位置来获取指定位置上纸带数据;每次得到状态转移脚本的更新纸带内容信号后进行更新当前场景显示的纸带数据;所述控制纸带移动脚本用于控制纸带移动;调用状态转移脚本提供的接口getI()通过给定纸带名称来获取当前纸带应移动到的目标位置,在收到移动纸带信号后开始移动纸带,移动到目标位置后发送信号给读写头使其落下模拟下一次读写操作;所述状态转移脚本用于控制图灵机状态转移和切换输入、工作和输出纸带以及读写头;每次状态转移过程为,首先修改当前纸带上的内容,然后再更新当前纸带位置,之后发
出信号允许纸带更新内容并使读写头升起回到初始位置,最后移动纸带、选定下个状态所用纸带,并且更新图灵机状态;在该脚本内部定义了变量nowTape用于确定当前纸带与读写头是输入、工作或输出纸带与读写头;同时定义变量inputI、workI和outputI用于标记输入、工作和输出纸带当前读写位置;所述状态显示脚本利用继承至GameObject类的GetComponent方法调用状态转移脚本提供的接口getState()获取图灵机状态,并且显示在状态显示屏上;所述模拟函数调用脚本将纸带数据移动到视角外进行更新,以达到模拟函数调用过程;在场景中创建一个空物体作为纸带移动的目标位置;利用MoveTowards()函数以实现读写头在目标位置与初始位置间的往复运动;对于递归调用仅将纸带上数据更新为下一层递归输入的参数,对应排序的调用直接更新为排序后的结果;所述单位时间访问数组分为在确定状态转移下实现、在不确定状态转移下实现和切换纸带下实现这三种情况;对于确定状态转移下的单位时间访问数组实现仅需在执行纸带左移右移操作时直接移动到根据数组下标定位的位置;对于不确定状态转移与切换纸带这两种情况,则需要在进入下一状态前修改定位变量inputI、workI和outputI,并调用控制纸带移动脚本提供的接口控制纸带移动,然后进入下一状态。4.根据权利要求3所述的基于Unity的图灵机虚拟仿真系统,其特征在于:所述UI设计模块具体用于设计算法选择界面、算法模拟界面以及实现算法说明与交互功能;所述算法选择界面设计五个按钮用于选择所要模拟的算法,通过调用Unity中SceneManager包实现点击按钮进行场景跳转的功能;所述算法模拟界面用于显示算法模拟时各纸带数据、时间复杂度、空间复杂度和返回算法选择页面的按钮,通过小窗显示三条纸带正在读写的位置,并提供了算法模拟开始/暂停、加速和减速按钮,具体方法为:调用更新纸带内容脚本提供的接口读取纸带上的数据并显示在界面中对应的Text构件上;小窗显示采用了设置三个摄像机分别对应着三条纸带的中央位置,利用相机属性中的render texture获得相机的视角,并将相机的视角渲染到界面中的图片实现利用小窗显示纸带正在读写位置的数据;在二分搜索递归算法中还需实现在界面中显示递归栈,即每次调用压入递归栈的数据;通过执行状态call时将low、high和mid按顺序入栈,并在return时遵循先进后出的原则出栈;在小规模0

1背包动态规划算法中还在界面中通过二维表动态显示二维数组中的数据;所述实现算法说明与交互功能的具体方法为:在算法选择界面选择要模拟的算法后,给出所选定算法的相关说明,当用户阅读完毕点击继续按钮观看算法模拟过程;并且在算法说明页面利用UI中的InputField组件提供了输入功能,使用户在该页面自行输入初始输入纸带数据。5.根据权利要求4所述的基于Unity的图灵机虚拟仿真系统,其特征在于:所述算法复杂度计算模块用于计算图灵机模拟五种算法的复杂度的具体方法为:在控制读写头移动脚本中,新增变量num1并初始化为0,当读写头落下移动至目标位置时令num1+1,并提供返回num1值的接口用于给出时间复杂度;
在更新纸带内容脚本中添加vis数组,用于标记工作纸带上各位置是否被使用;并增加将所用到的工作纸带方格数量传出的接口,在UI中实时显示算法复杂度。6.根据权利要求5所述的基于Unity的图灵机虚拟仿真系统,其特征在于:所述状态转移方程设计模块通过设计一元加法自动机、二分搜索图灵机算法自动机、二分搜索递归算法自动机、可拆分背包贪心算法自动机和0

1背包动态规划算法自动机完成图灵机的任务需求;所述一元加法自动机通过0、1、10、11四个状态实现一元加法的模拟;所述二分搜索图灵机算法自动机构建13个状态用于实现二分搜索图灵机算法的模拟;13个状态分别为:initLow,从输入纸带上读取待搜索区间数组A的初始下标low;writeLow,写入low到工作纸带上;initHigh,从输入纸带上读取待搜索区间数组的结束下标high;writeHigh,写入high到工作纸带上;compareLow,将high和low进行比较,如果low>high则停机;calMid,将low和high的中间值mid写入到工作纸带上;readMid,在输入纸带上读取mid位置的数组元素A[mid];compareMid,比较mid位置的数组元素A[mid]和目标搜索元素x,如果A[mid]=x,则搜索成功,如果A[mid]>x,则更新high,如果A[mid]<x,则更新low;updateLow,更新工作纸带上的low为mid+1;compareHigh,将更新后的low和high进行比较,如果low>high则停机;updateHigh,更新工作纸带上的high为mid

1;success,搜索成功;stop,停机;所述二分搜索递归算法自动机在二分搜索图灵机算法自动机的状态基础上,减少initLow,initHigh,writeLow,writeHigh这四个状态,增加递归调用所使用的call和return两个状态,构建二分搜索递归算法自动机的11个状态;直接从输入纸带上读取参数low和high,计算得出的mid仍记录在工作纸带上;并且将更新low和high这个状态合并到递归调用中,直接根据A[mid]与x的比较结果将参数传入下次递归调用;所述可拆分背包贪心算法自动机通过12个状态实现可拆分背包贪心算法的模拟,12个状态分别为:readCapacity读取输入纸带的背包容量;writeCapacity写入背包容量到工作纸带上;readWeight读取输入纸带上的物体重量;readValue读取输入纸带上的物体价值;writeAverage写入物体价值与重量的比到工作纸带上;writeNum写入物体序号到工作纸带上;sort对各物体按价值重量比进行排序;readNum读取工作纸带上的物体序号;readC读取物体序号对应的输入纸带上的重量;subBag将背包容量减去已装入的物体重量并在工作纸带上进行更新;writeAns写入解向量到输出纸带上;success算法模拟结束;所述0

1背包动态规划算法通过14个状态实现0

1背包动态规划算法的模拟;14个状态分别为:readCapacity读取输入纸带上背包的容量;readNum读取输入纸带上物体的数量;readWeight读取输入纸带上物体的重量;readValue读取输入纸带上物体的价值;writeM(i,j)将装入物体信息的最优解写入到工作纸带的位置(i,j)上;readM(i+1,j)读取工作纸带(i+1,j)位置上的装入物体信息;readW(i)读取输入纸带上第i个物体的重量;calM(i+1,j

weight)读取工作纸带上(i+1,j

weight)位置的物体信息的最优解;ansM(i,j)读取工作纸带上装入当前物体的最优解;cmpAnsM(i,j)读取工作纸带上的M(i+1,j)和M(i,j)进行比较;writeAns(i

1)写入解向量到输出纸带上;writeAns(num)写入解向量到输出纸带的num位置上;cmp将装入当前物体的最优...

【专利技术属性】
技术研发人员:郭楠丛欣宇吕雅静高天寒
申请(专利权)人:东北大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1