简单地表达复杂的世界,这是各类思想家近千年来的追求。如何将人类在世界上观察到的结果进行概念化表达?又如何描述人造的复杂工具?这种探索成为人类文明进步的一个重要的驱动力。计算机的出现,推动了人类对现实事物进行概念化的描述。
事物概念化的基本方法称为建模。在科学中,模型是对某种“真实”事物的简化表示。科学家说是在研究自然,但实际上他们做的大部分工作是在对自然进行建模,并对他们建立的模型进行研究。模型是一种思维方法,成语“去伪存真”就是建模的过程。
建模是人类对人类思想进行整理的技术,也通过人类进行验证。同样一个事物而言,不同的目的,建立的模型是不一样的。
-表现性(Representation)
模型表现了一个事物(A model represents some thing)。它能够反映该事物的基本特征,便于对事物进行识别,存储,统计和处理。
数学是一种描述自然和社会学现象的模型语言,使用数学来描述物理事物,以便我们采用数学方法来推演物理现象。比如弹道轨迹来确定炮弹落地的位置。
-抽象性(Abstraction)
模型抑制了无关紧要的细节,专注重要的方面。比如形形色色的人,我们构建的基本模型可能只包括了姓名,年龄,性别,民族
-实用性(Pragmatics)
模型为了某一个目的而设计。建模的艺术就在于去除掉实在中与问题无关的部分。所以建立的模型与要解决的问题有关。如果随意地使用模型,存在一定的风险。建模者可能忽略了你解决问题时需要的某些重要的因素。
例如,对于一个人而言,人的基本特征包括了年龄,姓名,性别。如果他是一名学生,可能需要的基本特征还有专业,年级,学习成绩,同学等特征。如果他参加选美,那么需要身高,体重,三围尺寸等特征。
人们对事物的模型最初是在头脑中形成的,也是人类的认知过程,我们常说通过实践对某件事情形成了概念,其实是对该事物建立了一个模型。
在中文语境中,形成了概念与建立了一个模型十分相似。
也许我们还不清楚3岁之前的儿童是如何建立起对周边事物的模型。比如通过了味觉,视觉,环境反射等等因素。
人类对自然和社会现象的研究,本质上是通过观察和实验,揭示事物的规律,并且构建这些事物的模型。
动物学家通过不断地观察,根据动物的习性,对地球上的动物进行了详细的分类。并且描述了它们各种的特征。这些研究可以认为是建立动物模型的过程。
物理学家通过实验和观察揭示了力学,电磁,光学,天文等诸多领域事物以及事物之间的相互作用的模型。
构建模型的另一个重要的作用是用于交流,当你告诉另外一个人发现了一条狗,别人马上就知道了此事,并且想象出哪个画面。这是因为你们双方都建立了狗的模型。
描述模型最简单的方式是采用自然语言或者是一张图片,比如小时候妈妈常给孩子唱儿歌“一个青蛙四条腿,两个眼睛,一张嘴”。她为孩子的脑海里构建了一个青蛙的模型。
除了口头交流之外,人类还能够通过文字来描述模型。 发明书写语言是人类最伟大的智慧。这样就使各种知识能够广泛地传播和传承。知识是有大量的概念构建而成的。
自然语言的特点的词汇丰富,能够书写出动人的文字。但是它的缺点是不够严谨。
还记得“按图索骥”的故事么?
孙阳有个儿子,看了父亲写的《相马经》,以为相马很容易,就拿着这本书到处找好马.他按照书上所绘的图形去找,一无所获.又按书中所写的特征去找,最后发现有一只癞蛤蟆很像书中写的千里马的特征,便高兴地把癞蛤蟆带回家,对父亲说:“爸爸,我找到一匹千里马,只是蹄子稍差些.”父亲一看,哭笑不得,没想到儿子竟如此愚笨,便幽默地说:“可惜这马太喜欢跳了,不能用来拉车.”接着感叹道:“所谓按图索骥也.”
这个故事其实告诉我们,模型的描述非常重要,如果模型的特征不完整,描述不清晰,可能会闹笑话。
数学是人类发展起来的一种严谨描述模型的语言。在问及什么是数学这个问题时,大多数回答是关于数字的学问。在《数学语言》一文中指出,数学是一种模型描述语言。我觉得恍然大悟。许多的物理现象能够使用数学语言来描述和推演。
在计算机科学中,人们基于数理逻辑的思想,创造了一系列没有二义性,上下文无关的形式化语言来描述模型。例如XML 语言。
人类语言的最大困惑是各地的人类使用不同的语言,例如中国人使用象形文字中文,法国人使用法语,德国人使用德语,阿拉伯人使用阿拉伯语,希伯来语等等。书写语言的两个要素,语法和符号。不同地区采取不同的语法和符号。
据说,远古时期天下人的口音,语言都是一样的。后来发现人类使用同一种语言的力量太强大了,就将各地的人改成使用不同的语言。各地区语言的不同的确造成了人类的困惑。千百年来,人们耗费了大量的精力从事语言的学习,翻译。也有人希望发明一种世界统一的语言来代替各地方言,或者使用某一种语言成为世界的通用语言,始终没有成功。
在信息模型的描述语言领域,同样是如此。人们建立了各种各样的模型描述语言,并且加以标准化。希望成为统一的标准。例如 UML,SysML,AutomqtionML,OPC UA ,工业4.0 AAS,IEC61360,ISO/PAS 19450 等等,名目繁多,层出不穷。这样语言的设计者和拥护者各持己见,谁也说服不了谁。都说掌握了标准就掌握了全局,在这里好像不好使。于是,各种网关,转换器苦逼地使用。
对于大多数学习者,我们并不要学习各种语言,成为精通多国语言的专家。而是要了解语言背后的逻辑。从而提高掌握语言的能力。
利用信息技术构建模型的主要方法是基于面向对象的思想。
与数学建模的方式不同,信息技术构建模型的方式更加接近人类的知识积累的方式。一切从观察到的,或者想到的事物出发,事物是确定存在的任何事情,比如山,动物,人,书等等。在目前信息技术领域,这些事物被称为“对象”,而在台湾被翻译成“物件”,笔者认为更贴切一点(嗨,该死的语言差异)。
对象:对象是在某段时间内有可能稳定而且无条件存在的事物。
对象可分文物理对象和信息对象。例如一所房子,它是一个物理对象,也是一个有形对象。而电脑中的一文件是信息对象。
类- 对象模型
对象的模型是通过其属性和特征来描述的。 属性用来区别不同的同类事物,而特征用来描述事物的特征。例如 人的姓名,身份证号码是其属性,而特征是事物的某些特征数据,比如性别,年龄,学历等等。
对象的一个重要的特征是该对象与其它对象的关系(relationship)。无论是自然界和社会中的事物都不是独立地存在的,它们与其它事物具有千丝万缕的关系,比如父子关系,同学关系等等。因此,事物模型的特征中还具有与其它事物的关系特征。
复杂的对象可以分解成为多个简单的对象。无法分解的对象成为本体或者原子。在自然语言中,本体通常被称为基本概念,术语。人们在基本概念和术语达成共识。
人们通常将复杂的对象称为系统(System),在模型学的观点下,系统的定义如下:
系统:由一组实体和这些实体之间的关系所构成的集合。
系统架构:架构是对系统中的实体和实体之间的关系进行抽象描述。
更简单一点讲,架构是系统的描述。
分层结构
复杂的对象可以分解成为多个简单的对象。复杂系统模型是使用其它模型构建,这是一种“Top Down” 的结构。
分层结构是一种简化的图结构-树形结构
图模型
某些复杂系统的对象之间的关系不是简单的分层结构。对象之间的关系是一个网络关系来表示。节点是对象,连线是关系。
例如。在大学中的一个学生,他属于某一个班级,班级属于年级,学院。同时学生还属于某一个实验室,宿舍楼。学生和学生之间可能是同学关系,恋爱关系等等。
图模型的最大缺点是难以使用图来构建,编辑。寻找一种图模型的组态方式是富有挑战性的。下面这种结构令人困惑。
面向对象设计思想传播最广泛的是面向对象的程序设计语言 ,例如C++。建模语言也吸取了面向程序设计语言的思想,在类定义中包含了方法(也称为函数Function)。这些方法描述了对象的行为。
对象是”一等公民“,将方法和服务是二等公民。笔者认为,这种构建类的方法其实受到了面向过程程序设计的思想的影响,比如隐藏实现,暴露接口,定义和实现分离等软件工程的思想。如果以面向对象程序设计的范式区看待信息模型,例如OPCUA 信息模型。如何改变信息模型的状态,当信息模型的数据改变时,调用哪一个方法?总是感觉不清不楚。方法和信息模型之间隔着一堵墙。
值得幸运的是,以色列理工学院的多夫多里(Dov Dori) 教授在上世纪90年代也看到了这个问题。正是他提出了对象过程法(Object-Process Methodology OPM)。这个方法的核心思想是对象和过程平起平座。他描述的系统包含了两类要素:对象和过程。其概念非常简单,只用了两个基本的概念:带状态的对象和改变对象状态的过程。
国际标准化组织ISO 制定了OPM 的国际标准
ISO/PAS 19450:2015 Automation systems and integration — Object-Process Methodology
Dov Dori 关于OPM 的书有中译本。感兴趣的读者可以读一下。
OPM 的基本概念。
大致看了一下 Dov Dori的书,感觉OPM 模型中最大的困惑是过程的调用。有许多种Link。搞得有点复杂,而且为了解释这些LINK ,出现了许多的概念和名词。总的感觉OPM 离现在其它的建模方法有点远。
但是OPM 的建模思想还是可以参考的,主要包括:
过程改变对象是容易信息表达和理解的。过程触发的情况就相对比较复杂。
1 环境触发,所谓环境系统其实就是上一层对象,比如车间里面有机床,车间便是机床的环境。车间断电,触发机床停机。
2 对象状态改变 比如机床的温度超过警戒值,触发告警过程的执行。
其实问题并不那么简单,比如工人打开机床 ,这种情况下, 人是对象,还上过程?人开机床如何建模?细想起来有点蒙圈了。
在比如,环境的温度如何建模?构建一个传感器对象,那么信息化的传感器对象如何读取物理事物的值?具体地是由另外一个过程来读取物理对象的值,还上在传感器对象中自动地读取呢?
OPM 使用了一堆概念,解决这些问题。但是过于复杂了。笔者认为可以按照如下方式简化
1 过程改变对象的状态
2 对象状态变化触发过程
在一个模型架构下,定义对象触发过程的事件类型,最基本的
1 ReadBefore(读之前事件)
2 WriteAfter(写之后事件)
其中红色的箭头为事件,黑色的是读写操作。在上面的模型中,物理环境的温度是由过程读取的。当然也可以在传感器内部的支持程序完成。
感觉第一种方法更符合OPM 的模型。
许多事情深入细节后,就复杂了。信息模型与过程(方法) 如何结合是需要拿捏的事情。