An artificial life approach to evolutionary computation: from mobile cellular algorithms to artificial ecosystems