luoway / blog

个人博客,issues管理
19 stars 3 forks source link

架构模式——黑板模式(Blackboard) #24

Open luoway opened 4 years ago

luoway commented 4 years ago

背景

未找到或找不到确定解决之道的不成熟领域

问题

黑板模式解决这类问题:没有可行而确定的解决方案将原始数据转换为高级数据结构。

这类问题具有如下特点:可以分解成多个子问题,但每个子问题都属于不同的专业领域。要解决子问题,需要使用不同的表示法和范式,往往没有既定策略。

上述有些领域的信息可能不可靠或不准确,每个转换步骤都可能提供多个解或无解。因此,必须详细说明黑板模式系统的局限性,如果要根据其结果作出决策,必须对结果进行验证。

对应这类问题,影响其解决方案的作用力如下:

解决方案

黑板架构背后的理念是:一系列独立的程序携手合作,致力于处理同一个数据结构。每个程序善于解决整项任务的某一部分;所有程序合作致力于找到解决之道。系统前进的方向主要取决于当前的进展状态。一个中央控制组件负责评估当前状态并协调各个专业程序。

之所以命名“黑板”,是因为它让人想起专家们站在黑板前协作解决问题的情形。每位专家都独立地对当前状态做出评估,随时可能到黑板前添加、修改或删除信息。专家们通常自行决定接下来由谁来到黑板前,在黑板模式中,如果有多个程序都能提供帮助,将由调停者(moderator)组件决定这些程序的执行顺序。

结构

对系统进行划分,使其包含一个黑板组件、一系列知识源以及一个控制组件。

黑板

黑板是中央数据存储区,解空间中的元素及控制数据都存储在这里。使用术语“词表”表示可能出现在黑标上的所有数据元素。黑板提供了一个接口,让所有知识源都能够对其进行读写。

解空间中的所有元素都可能出现在黑板上。出现在黑板上的解称为“推测”或“黑板项”。遭到否决的推测将从黑板中删除。

推测通常有多个属性,如所属的抽象层级、正确的可能性、推测对应的时段。

指定推测之间的关系常常很有帮助,如部分——整体关系、支持关系。

知识源

每个知识源都是一个独立的子系统,解决整个问题的特定方面。这些知识源解决的子问题一起构成问题域。整合多个知识源的结果是找到解的唯一途径。

知识源彼此不直接通信,而只是读写黑板,因此它们必须明白黑板的词表。

知识源通常运行在两个抽象层级。

每个知识源都负责判断自己在什么情况下可帮助找到解,因此知识源分为条件部分和行动部分。条件部分对求解过程的(写在黑板上的)当前状态进行评估,行动部分生成结果,可能导致黑板的内容发生变化。

控制组件

控制组件运行一个监视黑板内容变化的循环,并决定接下来采取什么措施。

它根据知识运用策略决定激活哪个知识源。这种策略可能依赖于控制知识源,这些特殊的知识源不参与直接求解,而执行为控制决策提供依据的计算。他们的典型任务包括估算可能取得的进展以及知识源的计算开销。它们的计算结果是控制数据,也被写到黑板上。

从理论上说,黑板可能处于任何知识源都不适用的状态,系统将无法提供结果。

实际上,更可能出现的情形是,每个推理步骤都提出了多个新推测,导致接下来可采取的步骤猛增。因此,要解决的问题是限制备选方案的数量,而不是找到适用的知识源。

控制组件中有一个特殊的知识源或过程,负责决定系统在什么情况下该停止以及最终结果是什么样的。在找到可接受的解或系统时间、空间资源耗尽时,停止系统。

实现

  1. 定义问题

    • 确定问题域以及为找到解所需的知识领域
    • 仔细研究系统的输入。找出输入的所有特点
    • 定义系统的输出。确定为确保输出规范、可靠应满足的需求。
    • 详细描述用户如何与系统交互
  2. 定义问题的解空间

    将解按抽象层级分为中间解和顶级解,也分为部分解和完整解。

    • 指出顶级解由哪些内容组成
    • 列出解的各种抽象层级
    • 将解组织成一个或多个抽象层次结构
    • 找出完整解中可独立处理的部分
  3. 将求解过程分为如下步骤

    • 定义如何将解转换为上一层级的解
    • 描绘如何作出同一抽象层级的推测
    • 详细说明如何从其他层级寻找证据,以证实作出的推测
    • 指出可利用什么样的知识将部分解空间排除在外
  4. 根据子任务将知识划分为专业知识源

    这些子任务通常对应于专业领域。

  5. 定义黑板的词表

    细化最初的解空间和抽象层级定义,找到解的一种表示方式,让所有知识源都能读写黑板。

    并非每个知识源都必须明白每个黑板项,只要求每个知识源都能判断自己能否为黑板项做贡献。

    如果必要,在黑板项和知识源内部表示之间提供进行转换的组件,易于更换知识源,使知识源不依赖于其他知识源使用的表示方式和范式,并能够使用其他知识源的结果。

    要对黑板的内容进行评估,控制组件必须能够看懂这些内容。因此,黑板的词表并非一次成型,而是与知识源和控制组件的定义一起演变,但必须在设计过程的某个时间点固定下来,以便能够给知识源开发稳定的接口。

  6. 规范系统的控制机制

    无法证明推测是正确的,因此我们的目标是找到解空间中可信度最高的顶级完整解。

    推测的可信度指的是其正确的可能性。为找到可信度达到指定阈值的顶级完整解,系统排除可信度低的推测,并查找与输入数据一致且相互支持的推测集合。

    在最简单的情况下,每当黑板的内容发生变化时,控制策略都向所有知识源的条件部分咨询,再随机地选择并激活一个适用的知识源。这种策略通常效率低,制定良好的控制策略是系统设计中最难的一项工作,常常要尝试多种机制和子策略。

    下述机制可优化知识源评估,让控制策略更有效、性能更高。

    • 将黑板内容变化分为两类,一类可能新增一组适用的知识源,另一类不会。发生第二类变化时,控制组件不会再次调用所有知识源的条件部分,而是直接选择一个知识源。
    • 将每个黑板内容变化类别与一组可能适用的知识源关联起来。
    • 控制焦点。焦点要么包含接下来应处理的黑板上的部分结果,要么包含应优先考虑的知识源。
    • 创建一个队列,适用的知识源在其中等待执行。适用队列可保存有关知识源的重要信息,而不是每当黑板内容发生变化都将这些信息丢弃。

    控制策略适用经验法则确定该激活哪个适用的知识源,经验法则是基于经验和猜测的规则。下面是可供使用的经验法则:

    • 排列适用知识源的优先顺序。

      计算优先级的依据是对知识源条件部分的评估结果,还可能考虑其他信息,如取得进展的可能性、付出的代价。确定优先顺序时,控制组件可能考虑知识源的贡献。在这种情况下,它必须先执行每个适用知识源的行动部分,再决定让哪个知识源去修改黑板的内容。

    • 优先考虑低层次或高层次的推测。

    • 优先考虑对应于问题较大部分的推测。

    • 岛屿驱动(island driving)。这种策略假设特定推测是合意解的一部分,并将其视为一个“确定性岛屿”,从而优先激活处理该推测的知识源,这样就无需搜索优先级更高的替代推测了。

  7. 实现知识源

    根据控制组件的需求,将知识源划分为条件部分和行动部分。为确保知识源的独立性和可更换性,不要对其他知识源和控制组件做任何假设。对于同一个系统的不同知识源,可以使用不同的技术来实现。

变种

已知应用

效果

采用黑板模式来分解问题和运用知识,有助于消解大部分作用力。

缺点:

总之,黑板架构能让你能够诠释性地运用知识,最适合用于试验可助一臂之力的不成熟领域。经过一段时间的研究并获得一定经验后,可能有更好的算法面面世,让你能够使用效率更高的架构。