这是一篇开放获取的文章,根据创作共用署名许可协议(https://creativecommons.org/licenses/by/4.0/)发布,该协议允许在任何媒体上不受限制地使用、分发和复制,前提是要正确引用最初发表在《医学互联网研究杂志》上的原始作品。必须包括完整的书目信息,//www.mybigtv.com/上的原始出版物链接,以及版权和许可信息。
在教学中使用的模拟器是交互式应用程序,包括被研究系统的数学模型和图形用户界面(GUI),允许用户以直观和教育的方式控制模型输入和可视化模型结果。设计良好的模拟器促进主动学习,提高解决问题的能力,并鼓励协作和小组讨论。然而,为教学目的创建模拟器是一个具有挑战性的过程,需要许多贡献者,包括教育家、建模师、平面设计师和程序员。建立模拟器的用户友好的软件工具链的可用性可以促进这一复杂的任务。
本文旨在描述一个名为Bodylight.js的开源软件工具链,该工具链促进基于浏览器的客户端模拟器的创建,用于教学目的,它是平台独立的,不需要任何安装,并且可以离线工作。工具链将最先进的建模工具与当前的Web技术连接起来,并被设计为能够适应软件生态系统中未来的变化。
我们使用了几种开源Web技术,即WebAssembly和JavaScript,并结合Modelica建模语言的强大功能,将它们与使用Adobe Animate构建的交互式动画一起部署到互联网上。
模型通过使用OpenModelica或Dassault Systèmes Dymola在Modelica语言中实现,并导出到标准化的功能模型单元(FMU)以确保未来的兼容性。来自FMU的C代码使用Emscripten进一步编译到WebAssembly。业界标准Adobe Animate用于创建交互式动画。开发了一个名为Bodylight.js Composer的新工具链,使人们能够通过使用拖放风格的动画、图形和控制元素组合GUI并将它们绑定到模型变量来创建最终的模拟器。生成的模拟器是独立的超文本标记语言文件,包括JavaScript和WebAssembly。我们使用Bodylight.js工具链创建了几个生理学教育模拟器,得到了老师和学生的一致好评,从而验证了我们的方法。本文介绍了肾元模拟器、循环模拟器和压力-体积回路模拟器。js是通用公共许可3.0授权的,任何人都可以免费使用。
js使我们能够有效地开发教学模拟器。有了这项技术,我们打算专注于开发新的模拟器和交互式教科书的医学教育。js的使用不仅限于为医学教育开发模拟器,还可以促进开发用于教学各种不同领域的复杂主题的模拟器。
教育工作者的任务是开发创新和创造性的教育材料,以补充和进一步加强传统的授课形式。这需要开发和传播材料,促进主动学习,提高解决问题的技能,并鼓励小组环境中的讨论和互动。计算机模拟是满足这些要求的一种方法。
一个模拟应用程序,通常称为模拟器,包括一个被模拟对象的数学模型(在这里是一个生理系统)和一个图形用户界面(GUI)。用户界面直观地表示模拟对象及其状态(由模型计算),并允许学生通过各种输入和控件控制模型。
模拟器在全球范围内被用于激励学生,增强他们对复杂话题的理解,培养批判性思维和解决问题的技能[
复杂的模拟器可能会让学生感到困惑,因此在没有额外解释的情况下是无效的。新的有效的教学工具包括将文本与模拟器(由模型驱动的交互式可视化)集成在一起的交互式教科书。学生可以使用模拟器对所学习的系统和概念进行实验,从而验证和加深他们的理解。模拟器的功能在附带的文本中解释,并补充了合适的场景,以使学生从经验中获得最大的效用。例如,由Burkhoff和Dickstein编写的关于心血管生理学的交互式教科书是该领域最早在互联网上可用的著作之一[
我们的目标是开发一种创建类似教材的技术,但与伯克霍夫[
创作由文字、图片或动画组成的书籍在技术上并不困难。有几种适合的软件工具可以用于此目的。具有挑战性的任务是包括模型驱动模拟器,允许学生改变变量,做出预测,并发现系统是如何工作的。
制作教学模拟器是一项要求很高和多方面的任务,需要多个领域的专家组成跨学科团队,包括教育、图形、建模和软件开发。
在开始这个过程时,教育者定义模拟器的教学目标,确定满足这些目标的主要设计,并提出模拟器应该能够演示的场景。教育工作者还通过确定应该建模的(生理)过程、用户控制的参数以及在GUI中显示的变量来定义对模型的需求。教育者还从概念上设计GUI,以便系统及其状态以教育的方式呈现。
建模师首先要在文献中找到一个合适的模型,并通常将几个模型结合起来。如果找不到方便的模型,建模师就从基本(如物理和生理)原理推导模型。此时,建模者用编程或建模语言实现模型,以便其计算可以在计算机上运行。如果模型是新开发的,则应通过将其结果与可信的参考数据进行比较来验证[
美术人员根据教育人员的任务设计GUI的视觉外观,并决定完整的安排,包括颜色和字体。艺术家还准备所有的图纸,包括可能链接到各自的模型变量的交互式动画,从而由模型控制。
软件开发人员使用图形组件组成GUI,将其与模型拼接在一起,并生成最终的模拟器。用户可控元素与模型的输入绑定。来自模型的输出变量与交互图形元素、图形和GUI的其他指标相连接。然后将最终的应用程序部署到目标平台上,该平台可以是一个Web页面或一个经典的本机二进制文件,最终将它嵌入到更广泛的教学单元中。
最后,教育者在教育环境中测试模拟器,并根据学生的反馈,可能决定迭代模拟器的新版本(
模拟器开发过程。
我们描述了我们为开发一个轻量级的、易于使用的、平台独立的、开放的和标准化的框架所做的软件工程努力,用于为医学教育创建基于交互式方程的模拟。在本节中,我们将讨论几个与模拟器创作相关的现有工具,以解释我们决定开发一个新的工具链并支持我们的技术决策的原因。
LINDSAY虚拟人[
基于代理的建模方法[
教学模拟器可以基于类似的综合生理模型。包括虚拟病人模拟器在内的多个应用都需要这些模型[
复杂模型的子系统通常在复杂的反馈循环中相互作用,这可能很难理解。因此,解释一个特定系统或身体器官的模拟器,如果基于只关注该系统的较小模型,则更容易理解[
模拟机生产中的一个重要和开创性的工具是国家仪器公司的
LabVIEW为多个操作系统生成可安装的可执行文件。长期用于生理教学模拟器的制作[
在LabVIEW中使用的面向块的建模方法中,模型由功能块(添加、乘法、集成和其他更具体的块)组成。这些块通过它们的输入和输出连接起来。模型输入值通过块网络传播并修改,计算输出值[
面向块建模方法的缺点是,建模师必须在模型实现之前知道哪些变量是输入的,哪些是输出的。建模师还必须推导出模型评估的因果关系,即变量将依次评估的顺序[
我们发现基于方程的建模方法比面向块的方法更方便。这样做的原因是,使用基于方程的建模方法,实现模型组件时不需要任何关于因果关系的假设。由建模工具自动解析因果关系[
根据教程,GUI通常使用LabVIEW中预定义的组件组成[
控件可将新的交互动画作为图像序列包含在内
有一些新的图片功能可供使用[
除了上面讨论的面向块的建模问题之外,LabVIEW还是一个商业产品。这将它的使用限制在那些强烈决心从事建模和模拟器开发的个人,因为它需要在软件许可方面的投资。根据我们的经验,使用商业产品可能会产生不利的影响,使我们偶尔的合作者不愿意参与模拟器的开发。
雷斯曼和伯克霍夫合著的心血管教材的iPad版[
一般来说,分发一个独立的可执行文件可能会带来安装问题并阻碍其使用。可执行程序是平台相关的,必须为每个平台分别生成或编译。
客户-服务器模拟器的例子包括JustPhysiology [
一个名为Modelica University的Modelica互动内容平台由Tiller和Winkler开发[
Žáková和切赫[
使用基于浏览器的客户机-服务器方法的模拟器已经是平台独立的,不需要任何安装。不幸的是,在教室或讲座中使用,许多学生可能同时使用模拟器,增加了对服务器的计算和带宽需求。这可能是一个主要的缺点。
延迟可能是这种方法的另一个缺点。在快节奏游戏中,超过50毫秒的延迟会降低用户体验。
总延迟是由模型评估、图形呈现和(在客户机-服务器体系结构的情况下)网络通信延迟引起的。互联网连接必须快,服务器必须足够近,以达到较低的网络延迟[
为了解决客户端-服务器架构中连接不稳定会导致动画停顿的问题,我们将使用缓存策略,如Brukhoff [
这种方法的另一个缺点是,这些模拟器需要不断地连接到服务器后端,因此,这种方法不适合需要脱机工作的交互式教科书。
我们认为客户端方法更合适,因为租用云服务提供足够的计算能力,可以同时为众多终端用户提供服务,并且拥有分布在全球各地的数据中心,以实现合理的往返时间,这对许多个人和小团队来说可能会变得昂贵。
另一方面,当客户端设备没有足够的性能在合理的时间内评估模型时,客户机-服务器方法很方便,服务器可能更快地交付结果。
为了克服独立和客户机-服务器解决方案的缺点,模拟器可以直接在客户机(即浏览器)上运行。客户端模拟器是平台独立的。其他的优点包括它们不需要任何安装,不会给服务器带来沉重的负载,并且可以在较慢的互联网连接下运行或完全脱机。这种方法的一个主要困难是需要将任何现有平台重做为JavaScript代码库。瓦格纳已经完成了一些开创性的工作[
具体来说,我们开发了Bodylight(.Net)模拟器框架[
的
除了方法一节中描述的技术和软件库之外,还有其他一些技术可能对使用有益。在这里,我们将讨论其中的一些。
另一个重要的游戏引擎和开发平台是
有许多基于JavaScript的优秀Web技术,包括许多有用的框架和库,它们几乎可以平衡浏览器和本机应用程序的功能。也有很好的建模工具可用。问题是模型是用本地编程语言(C或c++)部署的,因此它们不能在浏览器中运行。我们的目标是填补这一空白,并允许使用专用的建模工具,并允许在没有服务器端后端的情况下在浏览器中运行结果模型。根据我们之前的经验,我们对模拟器生产的工具制定了如下要求:
在模拟器的生产过程中,有许多工具是有用的,它们满足一些要求。然而,我们无法找到一个满足我们所有需求的工具或工具链。为了解决这个限制,我们开发了一个满足我们所有特定需求的工具链。
我们在指定的需求范围内创建了一个新的工具链,使用以下技术。
Modelica [
在基于方程的(因果)方法中,模型由描述变量之间关系的方程组成(例如,
下面,我们用方程中描述的谐振子模型举例说明两种方法之间的区别
由于
Modelica得到许多不同的建模工具的支持,主要是因为它是一个
Modelica是一种开源工具支持的开放标准语言,因此非常适合模型共享[
在Modelica中使用面向块的方法实现谐振子模型。
在Modelica中使用基于方程的方法实现谐振子模型。
利用Modelica标准库实现谐振子模型。
功能模拟接口(FMI) [
FMU可以导出与编译实现联合仿真标准的二进制文件所需的源代码。这种能力对于我们的目的非常有利,因为我们可以将源代码编译成Web语言,并可以完全访问浏览器中的协同仿真功能的FMI,这允许我们轻松地与模型交互。
FMI标准确保了与OpenModelica和Dymola未来版本的兼容性。此外,Bodylight.js系统可以很容易地调整,以支持实现FMI导出选项的其他模拟工具。
JavaScript是一种多平台、面向对象、解释性编程语言[
我们使用
最后,
WebAssembly [
WebAssembly是高级编程语言(如C或c++)的编译目标,支持将现有的和用C/ c++编写的新代码编译到浏览器平台。实现这一点的编译器是开源项目Emscripten [
新的Bodylight.js工具链使用了一些第三方开源工具、编译器和其他新编写的工具。网页[
模型工作流程在
下一步是将模型导出到FMU中。Dymola支持在FMU中导出源代码
然后需要将FMU编译成WebAssembly和JavaScript。为了完成这一步,我们准备了一个Docker容器,它使用Emscripten自动将FMUs编译为Composer兼容的文件[
容器接受由Dymola使用
模型工作流- modelica模型从OpenModelica或Dymola导出到功能模型单元(FMU),使用emscripten编译成WebAssembly和JavaScript。
我们使用Adobe Animate [
Composer的核心是建立在React上的,这是一个成熟的、非常流行的JavaScript库。HTML布局引擎是由GrapesJS提供的,应用程序的其余部分都是围绕这个引擎形成的。Composer允许用户轻松地设计交互式HTML模拟器。还有几个可用的输入和输出小部件。的
作曲家配备了
用户还可以保存和打开可共享的项目文件。从Composer导出的最后一个文件是一个独立的HTML文件,其中包含JavaScript和WebAssembly代码。编写器工作流描述在
我们建议读者在Bodylight.js网页上查看视频教程[
创建Composer工作流方案- html (Hypertext Markup Language,超文本标记语言)布局,加载动画,加载模型,绑定模型和动画变量,添加控制元素和图形,并与模型变量绑定。
Bodylight.js Composer中的肾小球应用程序页面。
压力-体积回路模拟器是更高级的教程的结果。
使用Bodylight.js创建了几个模拟器。在本节中,将展示一个模拟器来演示Bodylight.js的功能。首先介绍了一些基本的生理学,然后介绍了模拟器,并着重介绍了Bodylight.js的特点。
肾脏的主要作用是产生尿液并控制其成分。肾脏的功能单位是肾元。一对肾脏中大约有200万个肾元。肾元由肾小球和小管系统组成。肾小球是由毛细血管组成的网状组织。血液通过毛细血管壁过滤;因此,产生初级尿(滤液)(约180升/天)。滤液随后流经相应的小管系统,每个小管的功能略有不同,在小管中水和特定的溶质被重新吸收,从而产生和排出适量的尿液,其成分符合维持体内平衡的要求。
这些过程由模拟器直观地解释。为了简单起见,刺激剂只关注水和钠。模拟器可在网上下载[
注意,公式中的流量指标数值和压力值也受模型控制。还有一个
模型中没有时间演化,所有的事情都在初始化阶段计算。模拟器在所谓的
肾小球。压力由液柱指示器显示,流量由螺旋桨和半圆指示器显示。红色箭头代表血液流向,黄色箭头代表尿液流向。肾小球滤过率。
完整肾元的模拟器见
完整的肾单位。半圆计表示尿流率,小管内的亮度梯度表示渗透压,蓝色和橙色虚线移动箭头表示水和钠通过小管壁的流动,蓝色通道表示小管水的渗透率。流量和渗透压绘制在图表中(各个部分用不同的颜色表示)。ADH:抗利尿激素;肾小球滤过率。
血流和渗透压是沿肾肾小管的距离的函数,并在图表上标出。各个部分(其变量使用模型中的数组进行离散化)用不同的颜色突出显示,以便于识别。图例、标签、线颜色、宽度以及其他一些情节属性也进行了调整。
血液循环模拟器(
血液循环模拟器。压力由液柱计显示,血量由黑色边界的血管截面的宽度表示,血流速率由闪烁箭头的频率表示。动脉压力的变化也反映在面部表情和颜色的生动变化上。
心血管模拟器(
我们创建了Bodylight.js工具链,以促进基于Modelica模型的交互式模拟器的开发。在本报告中,我们将重点描述工具链的一个重要新组件(Bodylight.js Composer),它支持创建基于浏览器的模拟器。有关工具链及其使用的更多信息,可浏览网页[
解决了工具链的目标。重要的是,Bodylight.js Composer和它产生的模拟器都是
这种方法集合了建模、Web技术和图形设计领域,支持教师、建模师、软件开发人员和图形设计人员之间更好的跨学科合作。
js Composer是一个自包含的客户端应用程序,提交的任何内容都不会离开用户的设备;因此,没有特别的安全或隐私问题。
在Bodylight.js中创建了几个模拟器,它被证明是满足设计者需求的一个方便的解决方案。如果没有这个万能的工具链,实现这些应用程序将非常耗时。本文介绍了新的肾元模拟器、血液循环模拟器和压力-容积循环模拟器,以演示Bodylight.js的功能。肾元模拟器近年来被应用于医学生的病理生理学教学中,得到了学生和老师的一致好评。
与目前可用的客户端-服务器解决方案相比,客户端方法有几个优点。首先,模拟器不受服务器计算限制的限制。通过避免任何服务器端计算的必要性,可以绕过伸缩问题。相反,我们只是提供一个Web页面,它可以托管在任何Web服务器上。其次,客户端解决方案不需要到服务器的低延迟连接。因此,客户端方法避免了对昂贵的Web主机服务的需求。
在线学习和远程学习在全世界变得越来越重要,在发展中国家尤其重要,因为那里的许多潜在学生不容易接触到教师[
向FMU导出用于联合仿真的OpenModelica目前仅限于欧拉解算器,没有选项可以包含OpenModelica编译器中可用的任何其他解算器。欧拉是可用的最简单的求解器,与OpenModelica中包含的更高级的求解器相比,它的数值性能通常较差。因此,从OpenModelica导出目前对于许多模型是不可用的。我们经常被迫从专有的Dymola导出FMU,这至少会持续到OpenModelica FMU导出问题得到解决为止。
Adobe Animate是一个用于创建动画的商业工具。使用EaselJS库描述动画的JavaScript代码也可以手工编写。
在模拟器中计算复杂的模型或多个情节或动画的情况下,性能下降变得明显。较慢的帧速率或模型更新速率并不会使模拟器无用,但会降低用户体验。
js依赖于相对较新的Web技术;因此,只有2017年底之后的浏览器才能运行我们的模拟器。然而,因为运行旧的浏览器存在安全风险,大多数浏览器供应商已经切换到自动更新系统。
我们将扩展OpenModelica,以便它可以在FMU中使用高级求解器进行联合仿真。我们计划优化模型计算和图形渲染,以实现更高的帧率。编写器在设计上是模块化的;因此,我们计划添加对新库的支持,如不同的图表库甚至其他动画库,并欢迎外部代码贡献。
新的工具链促进了教学模拟器的生产,不仅在生理学,而且在其他领域,系统的行为可以用数学方程描述,包括生物学、物理学、化学、工程和经济学。此外,这项技术并不局限于教育或学术界。任何有能力为他们的系统建模的人,无论它可能是什么,都可以使用Bodylight.js以可视化的方式向任何感兴趣的方解释它。
将文本与图像、动画、多媒体和交互式模型驱动模拟器相结合的新一代电子教科书正在出现。这些教科书允许对所教授的特定系统进行模拟实验,这有助于对感兴趣的主题有更深的理解。
我们建议将教材开发为独立于平台的浏览器内应用程序,不需要安装,也可以在没有互联网连接的情况下运行。js满足了所有这些要求,并且是免费的,任何人都可以使用,这只会帮助增加它的影响力。我们希望这个项目能帮助人们更好地理解各种各样的系统。
js Composer弹跳球教程视频。
肾元模拟器。
抗利尿激素
电子学习
功能模型接口
功能模型单元
图形用户界面
超文本标记语言
这项工作得到了TRIO MPO FV20628、FV30195、PROGRESS Q26拨款和Creative Connections公司的支持
Creative Connections旨在基于Bodylight.js平台开展咨询业务,提供动画、模型或完整的模拟器。