For the last little while now, I've been spending a lot of my spare time learning to work with a language called AgentSpeak[1] using a platform called Jason[2].
Briefly, Jason is a platform for building intelligent agents based on the BDI (Belief-Desire-Intention) software model[3], which is in turn based on the Belief-Desire-Intention cognitive model[4]. Broadly speaking, it's an event based programming model, where "events" are things like "gaining a new belief", "dropping a belief", "selecting a plan to execute" (aka an "intention"), etc. AgentSpeak programs (normally) run "forever" cycling through a "reasoning cycle" that involves perceiving the world, updating beliefs, choosing intentions, executing intentions, communicating with other agents, etc.
And to commit a little self-plagiarism, from a recent post on LinkedIn:
----
On the one hand, AgentSpeak is basically a logic programming language with a lot of #prolog in its heritage. On the other hand, the runtime is all Java and to do anything interesting you have to write your custom Environment class and other helper functions in #Java. And while the interop is seamless in a way, getting your head around the execution model and knowing what's really happening at runtime can be a bit tricky.
Still, it's starting to make sense. And I do think this #BDI inspired approach has a lot going for it. I'm just looking forward to getting to the point where I can really start to exercise this. I have a few things that I want to accomplish soon:
1. I want to create a BDI agent that I can connect to an #XMPP server so I can talk with it from anywhere.
2. I want to start working on customized perception, using neural networks and various sensors (web-cam, microphone, accelerometer, distance sensor, etc.) to create an embodied agent that can truly sense its environment.
3. I want to take a stab at integrating some symbolic reasoning. I've given thought to trying to adapt the "belief base" to be an #RDF triplestore (probably #Apache #Jena) and include a reasoning engine or two. This all starts to get really speculative from here, but I spent a lot of time working on abductive inference a couple of years ago, and I'd like this thing to be able to use abductive inference, along with deductive reasoning, rule induction, possibly case based reasoning, etc. all in one system.
4. Might experiment with implementing a #Blackboard architecture and have specialized "problem solving" agents that collaborate by using the Blackboard in some situations. What would be really interesting here would be to figure out how to seamlessly translate in and out of a structured representation that lets you use existing specialized code for things like, eg. R for statistical operations.
5. And of course, experimenting with continual learning, as opposed to the "batch training job" stuff that we all use for ANN's today. This gets really speculative as well, but I want to explore contrastive learning, Hebbian learning, associative learning, operant conditioning (ala Pavlov), etc.
[5] above is why you'll see me spending as much time lately with Developmental Psychology, Infant Development, and Cognitive Psychology books, as with "AI" books per-se. I still believe that getting an AI that can learn from its environment, and build up useful mental representations with the minimal set of hard-coded behaviors, will be the best way to make progress with regards to #AGI.
----
I didn't mention it in the LinkedIn post, but as part of all of this, I've been building a hardware platform for some time now as well, where said platform is meant to support "perceiving the environment" so the system can learn from the physical world. It's not finished yet, but today it includes a GPS receiver so it can "know" it's location in physical space, a 6-DOF accelerometer/magnetometer/gyroscope board so it can sense movement (of itself), and two microphones (for stereo audio input). Future plans include one or two webcams to emulate vision, and possibly some other sensors: IR and/or ultrasonic distance sensors, temperature sensor, humidity and barometric pressure sensors, etc.
Also in the "speculative / for the future" category: AgentSpeak programs don't have any inherent notion of learning built into the model. All "plans" (aka "desires" or "candidate intentions") have to be coded by the developer up-front. This is obviously pretty limiting if you're trying to create truly autonomous agents, so another area I want to dig into is how we might combine work on "AI Planning"[5] to dynamically create new plans.
And since this has kind of turned into a big brain-dump of stuff that's on my mind, I'll finish by saying that I've been chewing on some ideas about explicitly modeling other "mental states" that aren't part of the base BDI model. Things like "attitudes", "values", different emotional states (eg "boredom", "frustration", etc.), "curiosity", "confusion" / "cognitive dissonance", and so on.
[1]: https://en.wikipedia.org/wiki/AgentSpeak
[2]: https://jason-lang.github.io/
[3]: https://en.wikipedia.org/wiki/Belief%E2%80%93desire%E2%80%93...
[4]: https://en.wikipedia.org/wiki/Belief%E2%80%93desire%E2%80%93...
[5]: https://en.wikipedia.org/wiki/Automated_planning_and_schedul...