最小系统的设计原理

如何优雅地设计一个极客风格的系统

随笔# 随笔# 工程哲学

一般而言,根据钱老的《工程控制论》思想,一个系统可以由以下部分组成:

texttext
1. 被控对象(Plant / Process)2. 参考输入(给定值、目标值)3. 比较环节(求偏差)4. 控制器(调节器、控制律)5. 执行机构(执行器、驱动装置)6. 测量环节 / 传感器(反馈检测)7. 反馈通道8. 输出量(被控量)9. 扰动 / 干扰10. 环境与边界条件 

其基本结构可表示为:

texttext
扰动 ↓参考输入 r → 比较器 → 控制器 → 执行机构 → 被控对象 → 输出 y              ↑ -                              │              └──────── 传感器 / 反馈通道 ←──────┘ 

其中:

  • 比较器:计算偏差,例如 e=r−ye=r−y;

  • 控制器:根据偏差生成控制信号;

  • 执行机构:把控制信号转化为实际作用;

  • 被控对象:被控制的设备或过程;

  • 反馈通道:把输出信息送回输入端,形成闭环;

  • 扰动:外界或内部不可控因素对系统的影响。

因此,按《工程控制论》的观点,一个系统最核心的是:被控对象、控制器、反馈、输入输出以及扰动。它们通过信息流和能量流相互联系,构成一个具有目标、行为和稳定性的控制系统。

但并非所有系统都包括数理化的控制部分,而是一些逻辑的拓扑结构,对于这样的一般性系统,我认为由以下几个基本组成:

texttext
1. 输入输出端(IO)2. 调度器(router)3. 执行器(actuator)4. 存储单元(storage) 

它们按如下结构组成最小系统:

texttext
Input[...] -> router -> actuator[...] -> router -> Output[...]/storage[...] 

[...] 代表这里可能存在多个对象,例如输入经过调度器后,分发到不同的执行端,最后由调度器收集结果,分发到输出或存储,形成完整的输入输出模型。 在通常情况下还应当包含异常捕获机制,但它往往也是按照最小系统组成的,所以一个完善设计的系统最基本的情况下应当由两个最小系统组成:

texttext
IO System :	Input[...] -> router -> actuator[...] -> router -> Output[...]/storage[...]	Catch -> ErrorException System:	Error Input[...] -> router -> actuator[...] -> router -> Output[...]/storage[...] 

基于这个模型出发构造的系统就是一个最基本的冯诺依曼架构的计算机,这里提到的计算机并非电子设备,而是广泛意义上的计算机器。

除非特别说明,本站文章采用 CC BY-NC-SA 4.0 许可协议。

在 GitHub 编辑

相关阅读

1 阅读

安静的机器

关于「不做多余的事」的一点想法

一台安静的机器,通常意味着设计者替使用者做完了大部分决定。 好的构建工具不该让你读完它的文档才能用起来。它应该有一个能跑通的默认值集合,然后…

随笔# 随笔# 工程哲学
1 阅读

开站

为什么又写一个博客

平台换过好几个,文章搬来搬去,最后剩下的只有一堆打不开的链接。 所以这次换个思路:内容就是文件,文件就在仓库里。 写作 = 编辑 发布 = 归档 = Gi…

随笔# 随笔# 建站
14 阅读

How to Design an Elegant Agent System

从 cell.cpp 提炼的十条构造原则 —— 把不确定性关进确定性的笼子

Agent 框架越做越厚,但真正的问题只有一个 —— 如何让一个只会预测下一个 token 的东西,可靠地改变外部世界。我以单文件 C++ Agent「cell.cpp」为样…

工程# Agent# 系统设计# 工程哲学# LLM

评论