Genetic Programming and Algorithms
From Wikibooks, the open-content textbooks collection
How did we come to this point in our existance? How is it that the human being, out of all of the other species competing for survival, came out on top? Was it something special about us? Perhaps it was God, crafting us in His own image, making us better suited for survival. Whatever the case, here we are. Still surviving, looking back, wondering how we did it. Millions of years ago, a one-celled organism died, the last of it's kind, while thousands, maybe millions, of others took over. Why? Whatever the case, they did, and multiplied, until circumstances change, and maybe a freak, an organism with two cells came into play, messing up the whole system, but surviving, and doing it better.
Change is the only constant. Survival of the fittest is the only true law. We are the only ones on this planet that have dominated. What makes us different is our ability to adapt. When circumstances change, we can change with them, rather than die out and let another species already more adept take over. That's what makes us survive. But, what makes us change?
Through massive societal decisions like war, politics, language, religion, and science, we have grown by leaps and bounds, entering new eras of discovery, death, wealth, poverty, humor, misery, self-actualization, and suicide. We experiment as part of our nature. It is more than just what we do, it is who we are. However, this is just a societal evolution. It is not that rapid. What about when we make rapid improvements, what do we do?
Well, we try something. Then, if it doesn't work, we try something else. We talk to people who have also tried. They transmit their experience to us and we continue trying until we find a way. When one of us finds a way, we transmit that exerience to more people, and, through social networks, the idea, or meme, is spread, ready to continually evolve as it goes through the ether of human society. We survived because we learned from nature. We're a product of evolution that can evolve on an entirely different level.
We have come so far that we have created computer systems, extensions of our own intelligence and memory. Massive amounts of storage and processing power, connected by networks of unimaginable size are sprawled out accross the globe and quickly dominating commerce, entertainment, and education. But what is a computer system?
A computer system is system derived from nature. Yes, nature. It is a high level of abstraction for interacting with the world around us. From nature, we observe natural law. From natural law, we create usable constructs. From those constructs, we create higher levels of abstraction, from Ohms law to electrical components to electronic circuits to integrated circuits to instruction sets to operating systems to programming languages to code libraries to applications to media to human thought. A computer system begins and ends with nature.
Wouldn't it be fun to create a computer system that mimics it?
Imagine a computer program that programs itself. What would you model it after? A human being? What did we model ourselves after? Why not write a program that tries something. Then, if it doesn't work, tries something else. Have it communicate with programs that have also tried. Have them transmit their experience and continue trying until one finds a way. When one of them does, have it transmit that exerience to more programs, and, through social networks, the algorithm is spread, ready to continually evolve as it goes through the ether of a computer system.
Enter Genetic Algorithms. Genetic Algorithms, or Genetic Programming, consists of using a computer system to simulate evolution. It may, more succinctly, be called "artificial evolution", but the terms genetic algorithm and genetic programming have taken hold. It is a system in which a large group called a "population" of programming objects, called "genomes" are created in a certain context with certain "goals". The genomes are then tested, after a certain period of time or context, for "fitness" for that particular purpose. The genomes that come the closest to this "fitness" level are "promoted" and the ones that don't are "killed". Just like nature.
Imagine the possibilities:
- Figuring out which learning method teaches math the most efficiently to 5 year old children.
- Figuring out which algorithm for a robot makes it walk the fastest while expending the least amount of energy.
- Figuring out which automated response to give on a phone call to keep a customer, make the sale, or even save a life.
All we are really talking about with Genetic Programming is automation, but it's automation of a groundbreaking kind: We are automating the process of creation: Build, test, debug, tweak, apply.
[edit] Books on Genetic Algorithms
[edit] Books on Genetic Programming
- Banzhaf, W., Nordin, P., Keller, R.E., Francone, F.D. (1998), Genetic Programming: An Introduction: On the Automatic Evolution of Computer Programs and Its Applications, Morgan Kaufmann
- Koza, J.R. (1992), Genetic Programming: On the Programming of Computers by Means of Natural Selection, MIT Press
- Koza, J.R. (1994), Genetic Programming II: Automatic Discovery of Reusable Programs, MIT Press
- Koza, J.R., Bennett, F.H., Andre, D., and Keane, M.A. (1999), Genetic Programming III: Darwinian Invention and Problem Solving, Morgan Kaufmann
- Koza, J.R., Keane, M.A., Streeter, M.J., Mydlowec, W., Yu, J., Lanza, G. (2003), Genetic Programming IV: Routine Human-Competitive Machine Intelligence, Kluwer Academic Publishers
- Langdon, W. B., Poli, R. (2002), Foundations of Genetic Programming, Springer-Verlag
- Nordin, J.P., (1997) Evolutionary Program Induction of Binary Machine Code and its Application. Krehl Verlag, Muenster, Germany.
- Poli, R., Langdon, W. B., McPhee, N. F. (2008), A Field Guide to Genetic Programming, freely available via Lulu.com.
- Weise, T. Global Optimization Algorithms - Theory and Application