sorry it took so long to get back to you
Martin,
We need a whiteboard and some time to make all of this gel.
Some ideas – I started on the C++ code but just never completed it. The idea was to build on what I had done but make it more generic and ultimately more flexible. Doing this in C# will be fairly easy to implement since most of my C++ code was creating list objects (not a problem in Java or C#!) and would work well with your server based model.
classes
ActionManager -
Action - actions or action sequence that are randomly selected to occur after an event occurs.
Event - something that occurs to a robot or series of things that occur - hit a wall, a person responds to a robot question, person responds to etc - has overridden CheckIfActionIsFavorable() which can use motivation(s) to decide if when the event occurs, an action occurs and it is favorable or not
EventManager- manages the Events, resets events as they occur and after an action is complete etc. Can create events or event sequences and then random action reactions to those events.
EventPattern-a pattern of events or set of steps. Can specify if event A occurs, then wait 30s and if after that within next 4 minutes event B occurs, wait 40 seconds and if B occur within next 10 minutes, then will activate Action or Action sequence.
Motivation - generalized goals of a robot - eg always tries to go toward light, always tries to engage people, always tries to have more complex interactions with people - so after an event occurs and a random action is chosen, can use the motivations to decide if the actions pushed forward were favorable or not.
MotivationManager - can decide if series of events occurs, can remove or add a Motivation
Habit - if an event happens a lot and the likelihood of an action occurring is near 100%, is moved to become a habit - habits are also “failsafe” events - eg. if bot goes near an edge, it overrides other events and performs back up action - can change habits to events
HabitManager - manage the habits. Check the events for actions that are near 100% and move event to habit.
What would be ideal would be to have a way to randomly combine events and randomly combine action or action sequences. These would then be tried and over time those random events and action combos could be removed if not used or tested.
With Anna, an event could be:
she sees an opportunity to interact with a person,
she responds to a statement from a person,
she enters a room and sees several people,
she enters a room, only one person and she knows them,
she enters a room, only one person and she doesn’t know them
she is in a room and a person enters she knows
maybe have a copy of each for each person she knows with topics to fine tune how she interacts
etc.
she randomly selects an action to say something on a particular topic. As part of her action, she would check motivations to see if the person’s reactions to her are good or bad. That changes the stats on the action and whether it will be higher or lower.
Anyways, just some ideas. I love the idea of being involved with you on this project. My time might be sort of thin over the next year or two since I am looking at doing grad work in the fall but would love to contribute as I can. This might be a huge rewrite of your code so not sure of its viability as a way forward.
Regards,
Bill