I've been interested in the Blackboard pattern for years (especially back when I was studying AI), however I still haven't been able to find a good implementation of it outside of academia, although it seems a very useful pattern for the current trends in software development, I can't think of any big framework built around the pattern.
Does anyone here know of success or failure stories related to this pattern?
Note: Other links
Edit: Now I'm wondering if the pattern might have use as a pattern for a mashup-able ecosystem or something like that
Edit: After investigating some more I found an interesting paper which proposes stuff like Wikipedia is a Blackboard however it depends on Humans as agents. That just led me to realize StackOverflow is pretty much a Blackboard system, with us as agents, sharing our expert knowledge about the undetermined problems set on the board... anyways its some food for thought.
A blackboard system consists of three components: 1) Knowledge sources (KSs); 2) Blackboard; 3) Control component. Knowledge sources are independent modules that contain the knowledge needed for problem solving.
The blackboard model defines three main components: blackboard - a structured global memory containing objects from the solution space. knowledge sources - specialized modules with their own representation. control component - selects, configures and executes modules.
A blackboard system is an artificial intelligence approach based on the blackboard architectural model, where a common knowledge base, the "blackboard", is iteratively updated by a diverse group of specialist knowledge sources, starting with a problem specification and ending with a solution.
A blackboard (also known as a chalkboard) is a reusable writing surface on which text or drawings are made with sticks of calcium sulphate or calcium carbonate, known, when used for this purpose, as chalk. Blackboards were originally made of smooth, thin sheets of black or dark grey slate stone.
The blackboard pattern is good for collaborative applications. Other than that I tend to think it's really not a very good idea.
The blackboard has a tendency to end up as a big bag of shared state that create all sorts of interesting access patterns. Modern languages and techniques all try to encapsulate and control state management as much as possible, the blackboard is quite the opposite.
The times I have found it used in algorithms its usually a tell-tale sign of not having a proper up-front understanding of the problem to be solved. So "to be on the safe side", you make too much state available to too many actors.
I have removed this pattern from two applications and replaced it with good, solid interfaces that represented the actual functionality and data-requirements, and it was a success both times ;)
My view is that a blackboard pattern would work very fine when you have a constrained set of data, which several actors can work on in parallel, and where the dataset should be refined and re-refined. It allows for actors to be written completely seperate, with a very simple interface, and all running asynchronously.
As a good candidate for this would be our system.
Our vision system has some fundamental data (images) and we have many algorithms that produce new data from these. Very often we see that one algorithm could make good use of information that other algorithms produce, but we have very poor ways of sharing these, as normal arguments through messages in a oo-system would quickly make a list to large to handle. Also we have the problem that some information we find late in the process could improve earlyer guesses, but doing this would require more pipelining of arguments.
Unfortunately would such a refactoring require more resources than we currently have :(
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With