[erlang-questions] General Questions
Benjamin Tolputt
bjt@REDACTED
Fri Apr 20 03:35:23 CEST 2007
Good Day All,
I am currently experimenting with Erlang for the purposes of managing a
"virtual world" (not another MUD, actually an AI agent experiment I am
interested in). I am hoping this leads to the "killer app" ideal
everyone seems to think languages need, but I am not actually setting my
sights there.
A brief overview is as follows:
The agents exist in an evironment simulated by a number of "world
processes" (i.e. a stepped physics process, a weather process, etc).
These will (in general) be implemented as drivers (i.e. linked in DLL's)
for purposes of speed (I don't think Erlang is up to or designed for
physics simulation!). The idea is to give each dynamic object in the
world (not just agents) their own process. So there is going to be alot
of processes in the system (with the intent of using the mdisp package
to lighten the runtime load by saving to disk processes with long idle
times).
I am hoping to simulate a small "community" of agents each with their
own goals ("Get Rich", "Marry Mayor's Daughter", etc) and have them plan
based on these goals (using a predefined set of actions - think of a cut
down STRIPS engine). One of the ways they can accomplish goals is by
obtaining/passing information onto other agents. In order to control the
simulation in a somewhat more "user-friendly" manner - I am hoping to
use an Alice-clone interface to retrieve & send commands to agents (i.e.
implement a "chat-bot" interface to the agent's talk functionality for
user to application discussion).
My thoughts on this are currently to implement/adapt code for the
chat-bot interface as a C-code driver, passing relevant information
state information along with the "parse" command. The driver will need
to load alot of "chat data" from disk and process this into a use-able
runtime format (AIML is XML which is usually processed into tree
structures internally). This runtime structure is both large & static,
implying that it should simply be shared across instances of the port
driver (say two people try to talk to different agents at the same time
- I would like for both processes to use the same runtime data
structure). Is this normal / advisable for an Erlang driver? As the
runtime data is static, the only "concurrent shared state" issue is the
initial loading, which I am assuming can simply be bottlenecked at the
driver instantiation function.
Regards,
B.J.Tolputt
More information about the erlang-questions
mailing list