Thanks Owen, I didn't know that NetLogo had an eval function. There's nothing in the documentation under *eval*. In fact, the word *eval *doesn't appear at all, and *evaluate *appears only in a couple of comments in examples that evaluate expressions. But now that I know it's there, it's worth considering. There's still the problem of generating the strings to be evaluated though. Without syntactic support that's non-trivial. Writing and embedding a GP system is also non-trivial. (I'm not interested in a GA with a fixed rule template.)
In general I like NetLogo. It would be my first choice for relatively simple agent-based models. My main complaints about it are its lack of a real sub-classing and inheritance system and (probably most important) that one is limited to a single file of NetLogo code. That means that anything of any complexity quickly gets difficult to manage. Can you imagine dealing with the NetLogo file that includes NetLogo GP code as well as any other code? I wouldn't want to start down that road. I couldn't find the paper by Miles Parker that you mentioned. I think I copied the list on the email I sent him. So far, no reply. I mentioned Drools <http://jboss.org/drools/> in an early message. Here's what I originally wrote about it. >From my initial Googling the closest I could find was *Drools*<http://jboss.org/drools/>. It's intended to provide a forward chaining rule programming language for distributed systems (J2EE). It's open source from JBoss. Although it has nothing to do with Agent-based modeling, it seems quite nice and quite general. It runs on top of and is completely integrated with Java. Agent can simply be an object type. Its Template<http://hudson.jboss.org/hudson/job/drools/lastSuccessfulBuild/artifact/trunk/target/docs/drools-expert/html_single/index.html#d0e5774>capability allows it to generate rules that are stored as Java objects, which seems to make it capable of manipulating rules dynamically. I'll have to look into that further. One can make it a simulation engine by keeping a tick counter in the workspace. I still think it's the closest thing there is to what I want -- and that it can be used to create what I want more easily than anything else. In fact, with a little work I'd say that enhanced Drools can be to Java with respect to Agent-Based Modeling and Simulation what C++ is to C with respect to OO Programming. It will be a layer of abstraction that provides the right additional elements without getting in the way. (By the way, Jade doesn't do it for me. It supports agent communication across a distributed system, but it doesn't support rule-driven agents or agents interacting in a workspace. It's intended domain of application is really not ABM. It's intended to allow one to use agents in developing distributed systems.) I had never heard of Drools a week ago. But having looked at the website, having scanned some of the documentation, and having talked to some of the people on their list, I'm quite impressed. It seems well designed and implemented. It's also both mature (version 5.0) and active. It's amazing what's out there that one doesn't know about. I thought that perhaps the list could point me to some other hidden gems. -- Russ On Tue, Aug 25, 2009 at 11:44 AM, Owen Densmore <[email protected]> wrote: > On Aug 24, 2009, at 6:18 PM, Russ Abbott wrote: > > I think Marcus gets to the problem. I want agents that can create new > agents that have new functionality -- or equivalently modify their own > functionality in new ways. > > > Well, will table based functionality work? .. i.e. a list of behavior > parameters? > > If not, will code snippets work? NetLogo has an eval function (run & > runresult) so dynamically created code snippets as behavior would work. > > I don't see how NetLogo lets you do that. > > > See above. > > You need the ability to manipulate the rules themselves. > > > Well, both the above can do that. > > Just creating a class of agents that you call rules doesn't do that. It > doesn't provide a way to create new functionality. > > > Agreed, at least to a point. Agents are just objects. And it's easy to > embed genetic algorithms in them. I've got a TSP in NetLogo that uses the > algorithm in the Modern Heuristics book. The list probably has a hundred > others! > > As Marcus said, think of it as having an agent with a built-in Genetic > Programming system that it can use to generate and test possible rules. > > > OK, GP is a different deal. None the less, with the eval function in > NetLogo, I believe this is possible. > > When it finds good ones, it either creates a new agent with those rules or > it replaces its own rules with that new rule set. I don't see how NetLogo > lets you do that without building an awful lot of new stuff. > > > This is a fairly big/detailed conversation. > > What are the performance requirements, for example. Redfish found that > there are ranges of number of agents that NetLogo does fine with, but when > we got in the 100,000+ range, we had to move to Processing and roll our own > agent classes. Hopefully you are not in Doug Robert's world needing a room > full of clusters, but if so, he's the expert on the list. > > How about other agent systems? We used Repast for years, but found that > there was very little it could do that NetLogo could not. It might be worth > another look after all these years. > > How about libraries that already exist to make your life easier? I think > there are GP libraries in several languages. That might bias you in a > particular direction. > > And possibly most important of all is community. Is there a community that > is working in this domain? This was why I mentioned Miles, I thought his > WedTech talk of a few years past sounded like it might do well in this > domain. > > -- Owen > >
============================================================ FRIAM Applied Complexity Group listserv Meets Fridays 9a-11:30 at cafe at St. John's College lectures, archives, unsubscribe, maps at http://www.friam.org
