我多年来一直对Blackboard pattern感兴趣(特别是在我学习人工智能的时候),但是我仍然无法在学术界之外找到一个很好的实现方法,尽管它似乎是对于当前软件开发趋势非常有用的模式,我想不出任何围绕模式构建的大框架。
有没有人知道与此模式相关的成功或失败故事?
注意:其他链接
编辑:现在我想知道这种模式是否可以用作混搭生态系统的模式或类似的模式
编辑:在调查了一些后,我发现了一个有趣的paper,它提出像维基百科这样的东西是黑板,但它依赖于人类作为代理人。这让我意识到StackOverflow几乎就是一个Blackboard系统,我们作为代理人,分享我们关于董事会中未确定问题的专业知识......无论如何,这都是值得深思的。
答案 0 :(得分:9)
黑板模式适用于协作应用程序。除此之外,我倾向于认为这不是一个好主意。
黑板最终会成为一个共享状态的大包,它可以创建各种有趣的访问模式。现代语言和技术都试图尽可能地封装和控制状态管理,黑板恰恰相反。
我发现它在算法中使用的时间通常是一个告诉我没有对要解决的问题进行适当的前期理解的迹象。所以“为了安全起见”,你为太多的演员提供了太多的状态。
我已从两个应用程序中删除了此模式,并将其替换为代表实际功能和数据要求的良好,可靠的接口,并且两次都成功;)
答案 1 :(得分:7)
我的观点是,当你有一组受约束的数据时,黑板模式可以很好地工作,几个参与者可以并行工作,并且应该对数据集进行细化和重新细化。它允许演员完全独立编写,界面非常简单,并且都是异步运行。
作为一个好的候选人将是我们的系统。
我们的视觉系统有一些基本数据(图像),我们有许多算法可以从中产生新的数据。我们经常看到一种算法可以很好地利用其他算法产生的信息,但我们分享这些信息的方式很差,因为通过oo系统中的消息的正常参数会很快使列表变得很大。此外,我们遇到的问题是,我们在流程后期发现的一些信息可能会提早做出猜测,但这样做需要更多的参数流水线。
不幸的是,这样的重构需要比我们现有的资源更多的资源:(
答案 2 :(得分:5)
查看元组空间及其实现。它从未产生过很大的影响,但仍然是构建分布式应用程序的有趣方法。
答案 3 :(得分:3)
这在C4I系统中很常见,其中许多更新状态的参与者都是人,但有些是软件代理。
我还看过SCADA系统中使用的元组空间,但通常不会这样调用,并且没有那么多强调软件代理方面。 (尽管通常有一个简单的规则系统连接到监控空间)
答案 4 :(得分:-1)
Blackboard-Pattern的略微修改版本的一个例子是由Mojang在Minecraft中实现的。
像Zombies,Sheeps这样的实体代表了BlackBoard。每个PathfinderGoal都是一个修改实体状态的知识源。
对于羊: 如果高草在实体前面。 // executeCheck - >该实体消耗该草并增加羊毛的生长计数器// executeAction
稍微修改了一下,因为实体可以访问所谓的PathfinderGoalSelector,即Controller。这个控制器有一个tick方法(Minecraft是基于刻度的20 Ticks / s - 相当于循环方法)。主线程循环遍历每个实体并调用实体的tick方法。实体本身将其委托给PathfinderGoalSelector。