Code center > Suggestions
Would a *.subspecies sysvar be facist?
EricL:
I am maintaining a "subspecies" number internally for each bot in order to implement the new Species Diversity graph. Bots inherit the subspecies of their parent, but it gets set to a new value (based on a per species counter) when a mutation or virus infection occurs.
The new chart (2.43b) counts the number of unique subspecies within a "species".
Is there any interest in exposing this as a sysvar? It would allow a bot to determine if it was "different" from another of it's same "species" without performing a detailed DNA analysis. Additionally, by comparing the two numbers, bots could potentially make some rough, fuzzy determination as to how different. (What the difference actually indicates is the number of mutations and virus infections that have occurred to all members of the species between the two events that set the two bots own subspecies number.)
One can imagine bots using this for policing their own genetic purity: parents could kill their mutated children or potentially attack other members of it's species which have a larger/different subspecies value then their own under the assumption that they are more mutated (or have been virus infected) from the "pure" 0 valued subspecies value all bots start with at the beginning of a sim....
googlyeyesultra:
That would make it a bit to easy to determine whether or not someone else has been infected by a virus. Thus, another bot could easily be used to eliminate all infected bots, without the virus being able to do anything.
So, my vote is no.
Numsgil:
Generally the philosophy thus far for sysvars (at least as long as I've been around) is to give bots limited and imperfect knowledge about their surroundings. Things that a human or animal or bug or whatever could gather about their environment by being placed in a similar position. As I see it, there are three degrees of information for sysvars:
1. Observational data about a bot's surroundings. Such as what it can see, in/out variables, etc. Things that a human or other animal (bug, bacteria, whatever) could determine at a glance in the bot's position.
2. "Hidden" data about other bots, such as their nrg, body, etc. levels, Memloc/memval, refeye. Things that a bot can figure out if they could peek into the other bots memory array.
3. Global data that an animal similarly placed couldn't possibly determine, or shouldn't have to determine. Things like maxvel, for one, xpos and ypos to a lesser extent. That's probably about it.
I'm strongly against moving up that list without some very good reasons. Maxvel, for instance, is a limitation of the system, so the idea is that it isn't fair for a bot to be subjected to that law without some heads up. I was never a fan of xpos and ypos as absolute references. They were added for early antbots. But even here, the argument went that real ants use pheremone trails and polarized sunlight to navigate. We could simulate those things, we just can't/don't want to right now. If you haven't, try going to the old forum and reading through the early development reasoning behind different features we take for granted.
Even hidden data I think gives too much information about the system. You shouldn't be able to tell by looking at a bot if it's dead or alive, for instance. You should have to do some reasoning (well, it hasn't moved in a couple of cycles, and when I poke it, it doesn't react). And the whole refeye/myeye thing is indefensible when you really examine it. Conspec ID should be handled with in/out pairs.
The lower level you keep things, the more possibility there is for bots to make mistakes, or take advantage of each other. A bot could play dead, for instance, and wait for another bot to drop its guard and then attack it. Bots can try to spoof in/out conspec alot easier than the refeye/myeye system.
For the new version, I'm reworking things to be as low level as possible. I'm trying to find ways to eliminate the need for refnrg, etc. Keep things strictly based on information immediately available to bots. What you're suggesting here is something I'd put in the third tier. It provides information that a human in a similar position would have no way of knowing.
Trying to cope with mutated offspring is an interesting and rewarding area for bots to try to figure out. Even telling if your kid is lame requires some good coding. I don't see a reason to give bots this information when with some good work they can figure it out for themselves.
That said, I do think that using shepherd bots in evosims as a poor man's scripting system is extremely useful. These shepherd bots are less animals and more forces of nature, so I concede that in this case giving these bots better information is valuable. Perhaps set up some shepherd sysvars that are deactivated by default, but can be enabled for shepherd bots.
EricL:
So, I strongly agree with this philosophy for the most part.
Regarding your first sysvar catagoy, I have referred to this as the Principle of Locality in other posts and strongly agree we should adhere to this prinicple. I would similarly be quite happy to see global information such as xpos and ypos go away (although agreed, perhaps not until there is substitue for ant bots which obeys this principle such as ability to leave phermone bread crumbs which can only be observed locally, as you suggest). I agree .totalbots and .totalmyspecies are and should be special exceptions for use by shepard bots and would be happy to see them disabled by default and/or otherwise restricted or limited for exclusive use by bots whose purpose is to be a force of nature (love that term).
Regarding the second, I think about this in the following way. A bot's mem array is not just hidden state, its part of its morph and I would submit that direct interactions on bot mem arrays are actually more "natural" for bots then are indirect interactions via simulated physical intermediaries (shots, collisions, vision, etc.). We simulate phenotpic physicality, but we do so primarily for reasons having to do with evolving bots in an environment intuitive to humans, one that eases human observation, I.e. allows humans to more easily observe and recognize intersting behaviour or adapations. Imagine how difficult it would be to pick out a new adapatation in a Core Wars style Alife sim with no simulated physical morph! But the truth is our bots are ditigal creatures residing in a digital world and I thus have no issues with enabling interations "native" to such an existance. In fact, I could make a case (elsewhere) that moving in this direction is the only way we will ever overcome the "collision detection scalability" problem. The physicality simulation is for us humans. It defines the complex set of interactions in how bot mem array values effect one another (based on the simulated physics) but it is not really the native environment of digital Alife. So, thinking about it this way is how I justify and even strongly support direct mem-array operation/observation.
Regarding the third, I think we are half pregnant today. We have .maxvel. Why don't we have .zaxisgravity, .yaxixgravity, .fluidresistance, .staticfriction, .dynamicfriction, .xfieldsize, .yfieldsize, etc.? Bots should either be able to know a lot about the global environment or nothing. I prefer nothing, which is in keeping with your low level approach. They have to figure it out for themsleves through trial and error and the indirect impact such things have on their state array. Thus, I would be happy to see .maxvel go away along with .xpos and .ypos.
I actually put .subspecies into the second catagory, not the third. We are maintaining it as per bot state internally, as we do a lot of other stuff, some of which we expose. I think the question is simply whether we want to expose that state to the bot (and to others) and allow DNA to potentially use it or not. There's a bunch of state we don't expose today. Bot number for example or species name or generation or number of mutations. There are things we do expose that don't stike me as being part of a simulated physical morph, such as .kills and .refkills. Again, kind of half pregnant. I'm not strongly advocating exposure of .subspecies, but I do think it is valuable to discuss what our guiding principles are regarding what per-bot state gets exposed and what does not.
Jez:
--- Quote from: Numsgil ---Generally the philosophy thus far for sysvars (at least as long as I've been around) is to give bots limited and imperfect knowledge about their surroundings.
--- End quote ---
Nums, Eric, I agree, anything, like instant trigonometry, that gives bots a perfect view shouldn't be. I like imperfection, it's more realistic.
.subspecies devalues all the recognition systems for a start.
Navigation
[0] Message Index
[#] Next page
Go to full version