A Robot Learns To Fly
jerkychew writes: "For those of you that read my last post about the robot escaping its captors, there's more news regarding robots and AI. According to this Reuters article, scientists in Sweden created a robot that essentially 'learned to fly' in just three hours. The robot had no preprogrammed instructions on how to achieve lift, it had to deduce everything through trial and error. Very interesting stuff."
Especially tried to cheat by standing on it's wingtips or similar. I would like to see something else though. What if we build lots of small generic robots, let's say they have wheels to move around only. The on the floor there could be more components that robots can attach themselves to, like giving them legs, wings, arms, eyes, ears etc., and then give them all different objectives, for example to survive, escape, learn from others, etc. Could be interesting to see if it would evolve into some kind of robot society where they all evolve different abilities and so on.
Will work for bandwidth
Here's what I did to play around with breeding algorithms from small building blocks:
Define a very simple stack-based language. The stack only holds boolean values, and when empty pops and endless supply of "false" values and when full discards pushes. Choose some control flow opcodes:
NOP, SKIP (pop, if true, skip ahead a fixed amount), REPEAT (pop, if true, skip back a fxied amount), NOT, RESET (clear stack, back to beginning)
and some opcodes related to your environment (mine was a rectangular arena):
GO (try to move forward one step, push boolean success), TURN (90 degrees clockwise), LOOK (push boolean "do I see food ahead?"), EAT (try to eat, push boolean success)
Pick a stack size (this has interesting consequences, as some of my organisms learned to count by filling the stack with TRUE values and consuming them until they hit the endless supply of FALSE when empty) and a code size. Force all organisms to end in your RESET op. Generate them randomly and run them in your simulator (I did 20-50 at once letting each one run a few hundred instructions in a row). Evaluate fitness (in my case, how well fed they were) and breed them. You can combine the functions in lots of ways. Randomly choose opcodes (or groups of opcodes) from each, possibly with reordering or shifting. Introduce some mutations.
Once you get something interesting, try to figure out how it works. This can be the hardest part -- my description above produced many variations that were only 8-10 instructions long before an unavoidable RESET opcode, and they could search a grid with obstacles for food!
MAIN
{
target = 72;
do
{
guess = rand();
}
while guess target;
print "GOT IT!"
}
NEWS HEADLINE:
Artificial Intelligence researcher creates computer program that comes up with the number 72.
The objective of the learning algorithm was to achieve maximum lift while attached to two vertical poles . So the headline should be: 'Robot learns to achieve maximum lift by flapping wings while attached to two poles'. I think keeping balance, avoiding stall, etc. are much harder to achieve.
1.Equiping a test subject with wings short-circuits the most intreguing part of the experiment.
2.Equipping a winged test subject with a moter too heavy to maintain loft is stupidity at work.
3.Thrust is not lift. Flight requires both, but this was thrust. The robot recreated 19th and 20th century flying machines. They didn't work either.
4.Horizontal stabilizers (vertical rods) are not considered to have been available during the evolution of flight.
The test is intriguing, for sure. But to bill this as AI learned flight is either poor press coverage, or a scientist seeking funding through an uninformed press.
--- "1.21 Jigawatts!" -Doc