Friday 6 July 2012

Abandoned Projects

So, as a little interlude, I thought I'd list (more as a reminder to me) the "big" projects that I started and then gave up on; these are in the order that I started to write them.

  • Mercury - A game engine that was largely inspired by Deus Ex. There was a game idea associated with it too (Mercury: Rising) which was a multi-path, multi-ending FPS with a large RPG element. I always had trouble coming up with a suitably emotionally climatic ending for all possibilities though. I also wanted to make sure that this engine had excellent AI after having played and made some levels in Unreal Tournament. Learned an amazing amount about computer hardware, algorithm and code optimisation, graphics rendering theory (including some of the more advanced stuff for core engine development) and basic AI.
  • Perspective - An OS aimed to increase speed, decrease dependence on BIOS and be designed with security in mind. It barely got much past the bootloader, initialisation sequence and a handful of the core drivers before I got bored. Linux took long enough to develop for Linus Torvalds and I didn't want to spend so much time re-inventing the wheel. I did learn a lot from this too though.
  • Spy-Games - A joint venture with a friend on a hack challenge website; I mainly did storyline and PC based challenge design. Went quite well but eventually we abandoned it - apparently the website code still exists somewhere in the archives (but not mine). Great fun.
  • CASM: The Compatible Assembler - Pretty much what it sounds like, an assembler/linker (linker was to be called CLINK) that would be modular enough to allow it to run with any of the umpteen x86 assembly syntaxes. Primarily this was to produce a replacement for the version of MASM included in Hutch's MASM32 without the legal problems and to allow easy extension for the 64 bit processors and the OOP stuff being created in the community (particularly the correct name mangling). Naturally, I wanted it to self assemble, so it was written in x86 assembly. As it happens, GoASM did much of what I wanted to do anyway, so I gave up. Again, very interesting to learn about compiler and linker technology though.
Those are all the really big ones... maybe sometime I'll list the medium sized ones. I just hope that Flatrix doesn't end up in this list. I think my main reason for failing before was that I tried to do it all on my own - I won't be making that mistake again. For example, in Flatrix, I won't be doing the website or the UI - I freely admit to being pants at those; I'm an algorithms person. But even there, I may need some help, so we'll see.

Programming Games

I was reminded the other day about the old programming games that I was only vaguely aware of when I was in my teens: RobotWar, Code War etc. I just had a look around and most of these seem to have disappeared; only a handful are still active/remain and many of those are very old now. Most are some sort of very constrained adversarial game - the most open ended active one seems to be Imperfect World of Robots (IWOR) which is still incredibly constrained for testing general AIs. What would be best is something like the Matrix for testing bots.

Taking an aside for a second, consider what happens to children who grow up in the wild without contact with other humans (feral children). There have only been a few cases and documentation is notoriously bad but none of them turn out like the Jungle Book. Feral children seem to act pretty much the same as humans did before the stone age - almost no social skills, unable to learn language, etc. My point is that their brains at birth are entirely capable of doing all of these things but due to a lack of socialisation in a culture that we would consider even rudimentary, they fail to develop these skills. So if we manage to create a general AI as powerful as the human mind but fail to provide it with a cultured, social environment to develop in, it will end up an incoherent idiot.

But there are two problems:

  • Where do the "original" (first generation) parents come from?
  • A full 3D world with all the complex interactions of the real world would require processing power far too great for our initial algorithms... and how would we work out whether it is working anyway?
Ideally we would also like to run the simulated world faster than real time which means that the world needs to be simple but not too simple otherwise it won't be rich enough to generate "intelligent" behaviour. So what do we need?

I would suggest that a 2D world (think flatland) where the bots receive stereoscopic 1D visual information, have pressure/touch sensors, rudimentary hearing, etc (essentially all the human senses but scaled down a lot). That still leaves us the problem of the parents, however; in order to do something here, I would suggest that a load of scripted AIs be generated using a crowd-sourcing approach to play the part of parents and the rest of society. In other words, we need to create an entire flatland world and society... what I like to call the Flatrix.

So here's the plan:
  1. Determine the physics of the world.
  2. Design the physical characteristics and detailed sense information for the inhabitants.
  3. Define the way that we want society to work (languages, trade, governance, etc).
  4. Identify a scoring system to identify the best parent scripts/programmes.
  5. Define the interface for competitors (a protocol on top of TCP... or maybe even UDP)
  6. Create several of our own bots to start to populate the world.
  7. Open the competition, preferably with a website with a nice UI.
I would suggest two types of entry: free and $10. The $10 entry money will go into a central pot and at the end of the competition, will be split between, say, the top three entries. The free entries will not be eligible for any prize money.

Next time: Flatrix Physics Design