《系统架构:复杂系统的产品设计与开发》——第2章,第2.6节任务四:涌现

2024-02-15 20:59

本文主要是介绍《系统架构:复杂系统的产品设计与开发》——第2章,第2.6节任务四:涌现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本节书摘来自华章出版社《系统架构:复杂系统的产品设计与开发》一书中的第2章,第2.6节任务四:涌现,作者[美]布鲁斯·卡梅隆,更多章节内容可以访问云栖社区“华章计算机”公众号查看

2.6任务四:涌现
2.6.1涌现的重要性
系统的奇妙之处,在于涌现。把系统的各个实体组合起来之后,一种新的功能,就会随着由这些实体的功能与实体之间的功能交互所形成的组合而涌现出来。系统是由一系列实体及其关系所组成的,系统的功能要大于这些实体各自的功能之和。后面那半句纯粹是为了强调涌现而说的。“更大的功能”是通过涌现而产生的。
系统的形式领域中并不会发生“涌现”。把部件A和部件B拼起来之后,形式领域内的结果就是A加B,除此之外没有其他效果。通过形式的聚合而产生的属性,计算起来是相对较为容易的。系统的质量就等于部件A的质量加上部件B的质量。形式是“线性的”(linear)。
然而,在功能领域中,部件A加上部件B的效果,却要有趣得多,也复杂得多。功能并不是线性的。当部件A的功能与部件B的功能相交互时,任何事情都有可能发生。系统的强大,正是体现在涌现物的这一属性上。
系统思维的主要目标,就是努力了解并预测涌现物以及涌现物带给系统的强大能力。

2.6.2系统故障
要想理解涌现的重要性,另外一种办法是思考当预期的涌现物没能出现时,会发生什么状况。预期的涌现物未能出现;可以细分为两种情况:一是预期的良好涌现物未能出现;二是意外的不良涌现物出现了(参见表2.1)。这两种情况都很糟糕。
我们以本章所举的实例,来说明潜在的系统故障。在人体的循环系统中,如果从心脏到其他部位的血管有一部分发生了阻塞,那么就会导致系统中其他部件的血压升高,这就是一种意外的不良涌现物,它会影响整个系统。在Team X中,某位团队成员或许很好地总结了需求,但没能有效地把需求与其他成员相沟通,从而导致团队拿出了一份偏离需求的设计方案,使得公司错失了本来应该得到的一笔生意。这属于预期的良好涌现物未能出现的情况。
在四车道的城际高速公路上发生的交通拥堵,就是系统故障的典型例子。交通出现堵塞时,每辆车都在准确地发挥其功能,也就是载人,而公路的功能同样正常,也就是为车辆行驶提供支持。每位司机都保持着适当的车距,其所驾驶的车辆,也都处在适当的车道中。然而预期的良好涌现物还是没能出现,也就是说,汽车没能在道路上快速地行驶。
图2.12是一个有详细资料可查的事件,此事件是由意外的不良涌现物所导致的。一架A320飞机试图在有侧风(crosswind)的情况下通过降低顶风翼(upwind wing)来着陆。在比较滑的跑道上,机轮刹车(wheel brake)是不起作用的,因此,飞机着陆之后,飞行员尝试使用基于引擎的反推器(thrust reverser)来控制飞机,可是该装置却不起作用。这是为什么呢?这是因为:控制该装置的软件系统,基于安全原因,只有当它认为飞机确实已经“着陆”的情况下,才会部署反推器,而它判断飞机有没有着陆的依据,则是两侧的起落架是否全都压紧了。当时由于其中一个机翼比较低,因此有一侧的起落架没有压下,这就导致软件系统判定飞机尚未着陆,因而选择不打开反推器。在这个案例中,每个部件当时都按计划执行着自己的功能,结果却发生了事故,也就是出现了系统故障。


58d5f67b4cb584c2bdf28cc21349cc8c11c0be81

试着理解并预估这种系统故障,也是系统思维的一项目标。

2.6.3预测涌现物
如文字框2.8所示,系统思维的最后一项任务,是预测涌现物。当把系统中多个实体的功能组合起来时,我们很难提前预测该系统会涌现出什么东西。其中可能会涌现出预期的良好功能(系统成功),也可能不会涌现出这种功能,另外还有可能涌现出意外的不良功能(系统故障)。
文字框2.8 方法:系统思维的第四项任务


1fe5ba6f565ee1138c8a2a7b19fc5aa0ef4aa4ac

基于实体的功能以及实体之间的功能互动,来确定系统的涌现属性。
本章所举的一些例子展示了预期的功能得以涌现的情况。在放大器电路中,放大电压与设置增益这两个功能结合起来,就产生了放大功能。在Team X中,各团队成员有效地完成其工作并相互沟通,就创造出了良好的设计方案。而当系统思考者并不知道系统会涌现出何种功能时,他们是如何进行预测的呢?
预测涌现物有三种方式。第一种是根据以前做过的情况来预测,也就是根据先例(precedent)来预测。我们根据自己的经验,回想以前做过的相同或极相似的解决方案,然后对其略作修改,并把它实现出来。比如,我们会按照祖父辈所使用的方式来构建钟摆机制,因为他们就是那样做的。过去的经验表明,某一群人可以形成一个有效的团队,因此我们就以该方式把这样的一群人组合成Team X。
预测涌现物的第二种方式是做试验。依照先前所设想的关系,把相关的涌现物组合起来,看看能涌现出什么功能。要想通过这种办法来预测,有时只需要做一些小规模的操作就可以,然而,有的时候,却要构建高度结构化的原型。比如,如果想研究运算放大器的输出效果,那我们就构建出这么一个放大器,给它加上输入电压,然后监控其输出。螺旋式开发(spiral development)则是另外一种试验,我们要先把系统的某些部分构建出来,并检验其涌现物是否合意,然后再于后续的螺旋环节中逐次构建系统的其余部分。
预测涌现物的第三种方式是建模(modeling)。如果实体的功能及实体间的功能交互可以建立成模型,那就有可能根据该模型来预测涌现物。通过建模来预测涌现物并取得巨大成功的一个例子,就是集成电路(Integrated Circuit,IC)的开发。包含数十亿个逻辑门的集成电路每天都在制造着,这些电路均可以产生正确的涌现属性。这是如何做到的呢?电路的基本元件是晶体管(transistor),它可以用简单的模型表示出来,此后我们只需要执行数据计算即可。如果了解运算放大器和电阻的本构关系(constitutive relation),并且知道基尔霍夫电压定律(Kirchhoff抯 voltage law)与基尔霍夫电流定律(Kirchhoff抯 current law),那么只用几行代数式就能把放大器电路的模型建好。
如果系统既没有先例,又不能试验,而且无法可靠地建模,那该怎样预测其涌现物呢?这就问到了系统思维的核心。包括研发新产品在内的许多领域,都经常会碰到这样的事情。在这种情况下,我们必须对将要涌现出来的功能进行推理。在推理过程中,尽管我们可以从先例中得知一部分信息(这部分信息是通过对相似但不相同的系统进行观察而得到的),同时还可以通过试验和不完备的建模了解一些情况,但对涌现物的最终推定,还是必须依靠我们自己的判断力。

2.6.4涌现物依赖于实体及其关系
系统所涌现出的功能,依赖于系统中各实体的功能以及实体之间的功能交互。实体的形式使得实体的功能得以表现,而形式关系也是功能交互的载体。这意味着形式与形式关系(也就是结构)对预测涌现物有着重要的意义。我们用图2.13中这几个简单的系统,来更加清楚地说明这一点:
低通滤波器(low pass filter)是由一个电阻和一个电容构成的。把电阻放在电压输入端与电压输出端之间,把电容放在输出端与地之间,就可以使高频衰减。如果改变连接模式(pattern of connectivity),交换电阻与电容的位置,那么可以反过来使低频得以衰减。


89c89f5339043c41f7f05656d90caea8d92e7577

机械杠杆是由杠杆和支点组成的。把支点放在远离操作者的一端,就可以产生良好的涌现功能,也就是“使力得以放大”(magnify force)。若是改变支点的位置,将它放在距操作者较近的这一侧,那么刚才产生的良好涌现物就消失了。
一段简单的软件代码由条件语句和简单的计算语句构成。如果把IF条件语句放在前面,那么只有当受测条件为真时,“a=100”这条计算语句才会执行。若是改变顺序,把a=100放在前面,那么这条计算语句就总是能够得到执行。
形式关系对于涌现物起着关键的作用。电子元件的连接模式、支点的位置,以及软件指令的先后顺序,都会分别影响其所在系统的涌现功能。形式关系对特定的功能交互起着重要的引导作用,进而使得这种功能交互可以产生出系统级别的涌现物。
总之:
把实体的功能与实体间的功能交互合并起来时,会涌现出新的功能,它使得系统的功能大于“这些部件各自的功能之和”。
系统是成功还是失败,通常取决于涌现物的好坏。
涌现物可以通过先例、试验及建模来提前预测。对于前所未见且无法轻易进行试验与建模的系统来说,人类必须根据所知的信息来推断其涌现物。
涌现物依赖于实体的功能,而实体的功能是通过形式得以体现的,涌现物也依赖于实体之间的功能关系,而功能关系是以形式关系为载体的。
涌现物的属性既给系统带来了强大的力量,又为系统思考者对其进行的理解工作与预测工作带来了挑战。

这篇关于《系统架构:复杂系统的产品设计与开发》——第2章,第2.6节任务四:涌现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/712527

相关文章

PyQt5 GUI 开发的基础知识

《PyQt5GUI开发的基础知识》Qt是一个跨平台的C++图形用户界面开发框架,支持GUI和非GUI程序开发,本文介绍了使用PyQt5进行界面开发的基础知识,包括创建简单窗口、常用控件、窗口属性设... 目录简介第一个PyQt程序最常用的三个功能模块控件QPushButton(按钮)控件QLable(纯文本

Linux系统中查询JDK安装目录的几种常用方法

《Linux系统中查询JDK安装目录的几种常用方法》:本文主要介绍Linux系统中查询JDK安装目录的几种常用方法,方法分别是通过update-alternatives、Java命令、环境变量及目... 目录方法 1:通过update-alternatives查询(推荐)方法 2:检查所有已安装的 JDK方

Linux系统之lvcreate命令使用解读

《Linux系统之lvcreate命令使用解读》lvcreate是LVM中创建逻辑卷的核心命令,支持线性、条带化、RAID、镜像、快照、瘦池和缓存池等多种类型,实现灵活存储资源管理,需注意空间分配、R... 目录lvcreate命令详解一、命令概述二、语法格式三、核心功能四、选项详解五、使用示例1. 创建逻

基于Python开发一个图像水印批量添加工具

《基于Python开发一个图像水印批量添加工具》在当今数字化内容爆炸式增长的时代,图像版权保护已成为创作者和企业的核心需求,本方案将详细介绍一个基于PythonPIL库的工业级图像水印解决方案,有需要... 目录一、系统架构设计1.1 整体处理流程1.2 类结构设计(扩展版本)二、核心算法深入解析2.1 自

使用Python构建一个高效的日志处理系统

《使用Python构建一个高效的日志处理系统》这篇文章主要为大家详细讲解了如何使用Python开发一个专业的日志分析工具,能够自动化处理、分析和可视化各类日志文件,大幅提升运维效率,需要的可以了解下... 目录环境准备工具功能概述完整代码实现代码深度解析1. 类设计与初始化2. 日志解析核心逻辑3. 文件处

golang程序打包成脚本部署到Linux系统方式

《golang程序打包成脚本部署到Linux系统方式》Golang程序通过本地编译(设置GOOS为linux生成无后缀二进制文件),上传至Linux服务器后赋权执行,使用nohup命令实现后台运行,完... 目录本地编译golang程序上传Golang二进制文件到linux服务器总结本地编译Golang程序

SpringBoot+EasyExcel实现自定义复杂样式导入导出

《SpringBoot+EasyExcel实现自定义复杂样式导入导出》这篇文章主要为大家详细介绍了SpringBoot如何结果EasyExcel实现自定义复杂样式导入导出功能,文中的示例代码讲解详细,... 目录安装处理自定义导出复杂场景1、列不固定,动态列2、动态下拉3、自定义锁定行/列,添加密码4、合并

Linux系统性能检测命令详解

《Linux系统性能检测命令详解》本文介绍了Linux系统常用的监控命令(如top、vmstat、iostat、htop等)及其参数功能,涵盖进程状态、内存使用、磁盘I/O、系统负载等多维度资源监控,... 目录toppsuptimevmstatIOStatiotopslabtophtopdstatnmon

Knife4j+Axios+Redis前后端分离架构下的 API 管理与会话方案(最新推荐)

《Knife4j+Axios+Redis前后端分离架构下的API管理与会话方案(最新推荐)》本文主要介绍了Swagger与Knife4j的配置要点、前后端对接方法以及分布式Session实现原理,... 目录一、Swagger 与 Knife4j 的深度理解及配置要点Knife4j 配置关键要点1.Spri

mysql中的服务器架构详解

《mysql中的服务器架构详解》:本文主要介绍mysql中的服务器架构,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、mysql服务器架构解释3、总结1、背景简单理解一下mysqphpl的服务器架构。2、mysjsql服务器架构解释mysql的架