|
|
The present topic documents, through blog-style notes, the history and evolution of
HyperGraphDB. This should help clarify the context within which design decision
are made and ultimately assist people in better using and collaborating to the
future of the project. Even a single Java/C++ class deserves to be endowed with
some explanation stating, when not indisputably obvious, the intent of its author.
The HyperGraphDB project originated from Dr.Ben Goertzel et al. in the context of
the Novamente AI engine. Novamente's cognitive model is an "evolving, probabilistic hypergraph".
For more information, please visit Novamente and
Agiri.
We are still hoping that the system will serve its original purpose even though
development hasn't progress as much and requirements diverged somewhat in the
hope of applying the software to other, more practical and immediate problems.
First, HyperGraphDB needs to be ported to C++, a project which hasn't been
initiated at the time of this writing.
Design and development started around March 2005. Since then, it has progressed
as usually software does: through sudden creative bursts or steady, methodical
debugging sessions. At Ben's suggestion, BerkeleyDB was chosen as the underlying
storage mechanism. While the original requirements were fairly well-defined and
targetting specifically the needs of Novamente, I didn't feel confortable in my
understanding of what the end product should be. Moreover, my C++ being quite
rusty be now, I thought that if architectural mistakes were going to be made,
with the ensuing experimentations and rewrites, it would alleviate the pain to
have all of Java's tooling gadgets at one's disposal. Another influential aspect of
the startup mood was the lack of any deadline or any other form of mandating,
organizational or technical constraints. Ben has a cognitive model that he and
his team believe would yield "general artificial intelligence" given the proper
engineering effort and computational resources. And the foundational data structure of
that model is a generalized hypergraph. But then I was free to translate that into
more specific requirements. In particular, I felt free to dream up other uses of
this data structure.
To be continued...
|