《信息物理融合系统(CPS)设计、建模与仿真——基于 Ptolemy II 平台》——2.7 高阶组件

简介:

本节书摘来自华章出版社《信息物理融合系统(CPS)设计、建模与仿真——基于 Ptolemy II 平台》一书中的第2章,第2.7节,作者:[美]爱德华·阿什福德·李(Edward Ashford Lee),更多章节内容可以访问云栖社区“华章计算机”公众号查看

2.7 高阶组件

Ptolemy II 包含大量的高阶组件(higher-order component)。这些角色对模型的结构进行操作,而不对输入数据进行操作。接下来将介绍几个相应的例子,在这些例子中,5个Channel角色被置于一个模型中。为什么用5个? 也许最好是有一个单独组件可以表示Channel的n个实例,其中n是一个变量,这正是高阶组件所能解决的问题。高阶角色由Lee和Parks(1995)提出,它使得在模型结构不依赖于问题规模时更容易进行大型设计的构建。在本节中,将对这些角色进行描述,并且它们都能在HigherOrderActors库中找到。
2.7.1 MultiInstanceComposite角色
考虑图2-32所示的模型,有5个并行连接的Channel类实例。实例的数量在图中是硬连接的,很难进行数量的改变,特别是如果需要增加它时。这个问题可通过使用MultiInstance Composite(多实例复合)角色来解决,如图2-40所示。MultiInstanceComposite是一个复合角色,我们可以在它里面插入一个单独的Channel实例(通过创建一个Channel实例,将其复制并粘贴到复合角色中)多实例复合角色。(MultiInstanceComposite)是不透明的(这意味着它包含了指示器)。它在模型中充当着单个角色,但它内部实现是并行运行的多重角色。
3

图2-40 一个模型,它相当于图2-32,但是使用了MultiInstanceComposite,它允许仅仅通过改变一个参数值来改变Channel实例的数量
如图2-41所示,MultiInstanceComposite角色有3个参数:nInstances、instance、showClones。
第一个参数指定了要创建的实例数量。运行时,该角色将自我复制,次数由nInstances指定,如第一个(原型)实例那样,将输入和输出连接到相同的源和目的地。在图2-40中,注意MultiInstanceComposite的输入连接到一个关系(黑色菱形),输出直接连接到一个AddSubtract角色的多端口输入。因此,连接多个实例的方式类似于图2-32,其中相同的输入值将传递给所有实例,但是提供给AddSubtract角色的输出值是不同的。
3

图2-41 MultiInstanceComposite的第一个参数指定实例的数量。第二个参数可以使模型的建立者识别单独的实例。第三个参数控制实例是否呈现在屏幕上(当模型运行时)
因为实例的数量可以由一个参数改变,所以使用多实例创建模型比原始方法更好。根据MultiInstanceComposite中的instance参数来表示每个实例中的参数值,每个实例都可以按需定制。比如,令图2-40中InstanceOfChannel 角色的noisePower参数值取决于instance。如将其设置为instance*0.1,然后将nInstance设置为1。当运行模型时,将看到清晰的正弦波。这是因为这个instance的值为0,所以该实例中没有噪声。
2.7.2 IterateOverArray角色
如图2-37所示,Channel类的实现没有包含任何状态,这意味着信道模型的调用不依赖于上次调用的数据计算。因此,没有必要使用Channel类的几个不同实例来实现一个多样化通信系统;一个实例可以对n个数据副本调用n次。这种方法可以通过使用IterateOverArray高阶角色来实现。
IterateOverArray 角色可以用类似于前面章节中的MultiInstanceComposite的方法来使用。也就是说,我们可以在其内填充一个Channel类实例,类似于图2-40。IterateOverArray 角色在模型中也需要一个指示器。
例2.2 考虑图2-42中的例子。在这种情况下,顶层模型使用一个含有信道输入的多副本数组,而不是使用一个关系将输入广播到Channel的多个实例。这是使用Repeat角色(在FlowControl→SequenceControl子库中找到)和SequenceToArray角色(见2.7.3节补充阅读)的结合来完成的。Repeat有一个参数numberOfTimes,在图2-42中将其值设置为等于diversity参数的值。SequenceToArray角色有一个参数arrayLength,其值也可以设置为等于diversity参数的值(这个参数可以通过arrayLength端口来设置,灰色填充表示它既是一个参数又是一个端口)。输出被发送到ArrayAverage角色(见2.8节补充阅读:处理数组的角色)。
图2-42中模型的执行与它前面的版本类似,除了输出的规模不同外,其输出是平均值而不是总和。
3

图2-42 IterateOverArray 角色可以用来完成与图2-40中一样多的信道模型,但是不需要创造信道模型的多个实例。这种方法是可能的,因为信道模型没有状态
不论IterateOverArray包含什么角色,对于输入数组的每个元素,都将进行简单重复的执行动作。如图2-42所示,它包含的角色可以是不透明的复合角色。然而,有趣的是,它也可以作为原子角色。为了使用带有IterateOverArray的原子角色,只要将原子角色拖到IterateOverArray实例中。然后,它将执行输入数组的每一个元素中的原子角色,并产生作为输出的结果数组。该机制将在图2-43中说明。当一个角色从库中拖出并移到IterateOverArray角色时,它的图标将获得白色的边框。这个边框表明,如果角色被放下,它将放在光标下的角色中,而不是模型所包含的角色上。放入的IterateOverArray角色将成为为输入数组的每一个元素执行的角色。为了和 Channel 角色一起使用,定义了如上规则,但是需要将Channel角色转换为一个不透明角色,方式是通过插入一个指示器,因为对于数组元素IterateOverArray只能应用不透明角色。
3

图2-43 IterateOverArray 角色支持在它上面放入一个角色。它变换为模仿放入角色的图标。这里我们使用Channel类,保存到如图2-39所示的UserLibrary(用户库)中
2.7.3 生命周期管理角色
Higher OrderActors中的一些角色调用整个Ptolemy II模型的执行。这些角色通常把端口(用户或者角色创建的)和模型的参数关联在一起。它们可用于创建模型,所创建的模型可通过修改参数值来使得其他模型反复运行。包括RunCompositeActor,其执行所包含的模型。ModelReference 角色执行文件或URL中定义的模型。当VisualModelReference执行模型时,VisualModelReference角色打开模型的Vergil视图。更多细节可以在角色文档和Vergil连接展示中找到。
补充阅读:数组构建与拆分角色
下面是构建和拆分数组的角色:
3

ArrayToElements将输出端口信道中的数组元素输出。
ElementsToArray用输入端口信道中的元素构建一个数组。
ArrayToSequence将输出端口中的数组元素顺序输出。
SequenceToArray用输入端口中的一系列元素构建一个数组。
StringToUnsignedByteArray从字符串构建一个数组。
UnsignedByteArrayToString从数组构建一个字符串。
ArrayToMatrix从数组中构建一个矩阵。
MatrixToArray从矩阵构建一个数组。
此外,很多多态角色,比如说AddSubtract,也能对数组进行操作。

相关文章
|
自然语言处理 Java API
阿里云自然语言处理--文本相似度(电商)Java SDK 调用示例
自然语言处理(Natural Language Processing,简称NLP),是为各类企业及开发者提供的用于文本分析及挖掘的核心工具,旨在帮助用户高效的处理文本,已经广泛应用在电商、文娱、司法、公安、金融、医疗、电力等行业客户的多项业务中,取得了良好的效果。文本相似度可以提供不同文本之间相似度的计算,并输出一个介于0到1之间的分数,分数越大则文本之间的相似度越高。可广泛应用于信息检索,新闻推荐、智能客服等场景。使用该服务建议分数不要用于直接判断,可以作为特征,并按照范围进行分桶。本文将使用Java Common SDK 演示文本相似度(电商)服务的快速调用以供参考。
979 0
阿里云自然语言处理--文本相似度(电商)Java SDK 调用示例
|
JavaScript Java 测试技术
基于小程序的家庭记账本+springboot+vue.js附带文章和源代码说明文档ppt
基于小程序的家庭记账本+springboot+vue.js附带文章和源代码说明文档ppt
236 0
|
算法
数据结构之路由表查找算法(深度优先搜索和宽度优先搜索)
在网络通信中,路由表用于指导数据包的传输路径。本文介绍了两种常用的路由表查找算法——深度优先算法(DFS)和宽度优先算法(BFS)。DFS使用栈实现,适合路径问题;BFS使用队列,保证找到最短路径。两者均能有效查找路由信息,但适用场景不同,需根据具体需求选择。文中还提供了这两种算法的核心代码及测试结果,验证了算法的有效性。
580 23
|
存储 缓存 算法
《信息物理融合系统(CPS)设计、建模与仿真——基于 Ptolemy II 平台》——第3章 数据流 3.1同步数据流
Ptolemy II 能够使异构系统的开发和仿真一同进行,将开发和仿真作为整个系统建模的一部分。正如前两章讨论的那样,不同于其他设计和建模环境,Ptolemy II的一个关键创新在于支持多种计算模型,这些计算模型可被剪裁以适应具体的建模问题。
1994 0
|
消息中间件 SQL Java
Flink报错问题之insert语句报错如何解决
Apache Flink是由Apache软件基金会开发的开源流处理框架,其核心是用Java和Scala编写的分布式流数据流引擎。本合集提供有关Apache Flink相关技术、使用技巧和最佳实践的资源。
|
Go
golang力扣leetcode 2055.蜡烛之间的盘子
golang力扣leetcode 2055.蜡烛之间的盘子
93 0
|
消息中间件 应用服务中间件 nginx
【RabbitMQ六】——RabbitMQ主题模式(Topic)
【RabbitMQ六】——RabbitMQ主题模式(Topic)
749 1
|
Java 测试技术
深入探索 Java 中的 @Test 注解:优化单元测试流程的利器
在软件开发中,单元测试是保障代码质量和稳定性的重要手段之一。Java 中的 `@Test` 注解则为开发人员提供了一种方便、高效的方式来编写和执行单元测试。通过该注解,我们可以轻松地标记测试方法,自动化运行测试,并确保代码在各种情况下的正确性。本文将带您深入探索 Java 中的 `@Test` 注解,揭示其作用、用法以及在实际开发中的应用场景。
|
机器学习/深度学习 开发框架 人工智能
|
JavaScript 安全 定位技术
摄影测量学:期末考试重点总结
本文参考《摄影测量学》 (王佩军,徐亚明 编著);
737 0

热门文章

最新文章