Sunweaver

From WikiManual
Jump to: navigation, search

This is Numsgil's thought page to list all upgrades to the DNA language for a theoretical new DNA language, "codenamed" Sunweaver. Sunweaver would run side by side with the existing DNA language in the program and provide non backwards compatible upgrades to the original DNA language.

This goes beyond a simple DNA specification too. There are features included that wouldn't work well with the existing DNA. Thus Sunweaver includes things like an enhanced metabolic system. It should allow us to wipe the slate clean and start over, without losing the aspect of backwards compatibility.

General Guidelines

The following are general guidelines to guide the development of the language. I'll try to organize this better as the page grows:

  • As many sysvars and commands as possible are stretched or pulled to have domain and ranges in the interval [-1000, 1000]. In general, values out of this range are modded into it. The exception to this rule is
  • Where possible, sysvars are used for both input and output. That is, the two sysvars fixpos and fixed would be combined into a single sysvar. Reading the value would tell you your current fixed state. Changing the value of the sysvar would initiate a request to change the fixed state. The only "downside" is that you can't tell what your current state is after you modify the value.
  • Bots have no absolute knowledge about their position, orientation, or most other "global" data. One exception is that bots do know their absolute velocity. The reasoning is that in the majority of situations, bots would be aware of the ground passing under them or the fluid rushing across them.
  • Sysvars which previously returned limited information, or took limited information, are modified to accept and give more data. For instance, .shoot is split into different sysvars such as .bodyshot, etc. These new sysvars accept values that were previously given for .shootval.
  • The current nrg/body/waste model is upgraded to a fat/muscle/nrg/waste model. Outlined below (later).
  • Codules would be implemented.
  • All commands and codules have a fixed input and output list that's always the same. That means that the DNA is always deterministic in its flow within a codule, even with different stimuli.
  • DNA inside codules should be easily interpretable by a human reader. This is to hopefully increase accessibility to long term evolved genomes.

Sysvars

  • Memory locations 1-500 would be reserved for personal use by bots. Memory 1-100 is epigenetic, being passed on to offspring automatically. Memory locations 501-1000 are reserved for sysvars.

Possible features

I haven't worked out the logistics of how to do these, but I'm enchanted with the ideas ;)

  • Simultaneous threads - The DNA would have multiple starting points. Each starting point would run to completion, then give control to the next thread. Each thread gets its own stack and copy of the bot's memory. At the end of the DNA execution, the signals from the different threads would be combined into a final memory array. UNRESOLVED ISSUE - How do you fairly combine the signals from the different threads? A simple average might work, but there are issues with averaging signals to things like ID numbers.
  • Real numbers - Replace the integers in current use with fixed point numbers between -1 and 1. This allows for less discrete changes, which seems to be the way evolution likes it. UNRESOLVED ISSUE - Can all sysvars be made to properly work over this range?
  • A neural net constructed with codules being the neurons instead of simple signal modifiers.