diff --git a/eo/test/t-eogeneration.cpp b/eo/test/t-eogeneration.cpp new file mode 100644 index 00000000..1b5219b7 --- /dev/null +++ b/eo/test/t-eogeneration.cpp @@ -0,0 +1,88 @@ +//----------------------------------------------------------------------------- +// t-eogeneration.cpp +//----------------------------------------------------------------------------- + +// to avoid long name warnings +#pragma warning(disable:4786) + +#include + +//----------------------------------------------------------------------------- + +typedef eoBin Chrom; + +//----------------------------------------------------------------------------- + +void binary_value(Chrom& chrom) +{ + float sum = 0; + for (unsigned i = 0; i < chrom.size(); i++) + if (chrom[i]) + sum += pow(2, chrom.size() - i - 1); + chrom.fitness(sum); +} + +//----------------------------------------------------------------------------- + +main() +{ + const unsigned POP_SIZE = 8, CHROM_SIZE = 16; + unsigned i; + + eoUniform uniform(false, true); + eoBinRandom random; + eoPop pop; + + for (i = 0; i < POP_SIZE; ++i) + { + Chrom chrom(CHROM_SIZE); + random(chrom); + binary_value(chrom); + pop.push_back(chrom); + } + + cout << "population:" << endl; + for (i = 0; i < pop.size(); ++i) + cout << "\t" << pop[i] << " " << pop[i].fitness() << endl; + + + // selection + eoLottery lottery; + + // breeder + eoBinBitFlip bitflip; + eoBinCrossover xover; + eoProportionalOpSel propSel; + eoBreeder breeder( propSel ); + propSel.addOp(bitflip, 0.25); + propSel.addOp(xover, 0.75); + + // replacement + eoInclusion inclusion; + + // GA generation + eoGeneration generation(lottery, breeder, inclusion); + + // evolution + unsigned g = 0; + do { + try + { + generation(pop, binary_value); + } + catch (exception& e) + { + cout << "exception: " << e.what() << endl;; + exit(EXIT_FAILURE); + } + + cout << "pop[" << ++g << "]" << endl; + for (i = 0; i < pop.size(); ++i) + cout << "\t" << pop[i] << " " << pop[i].fitness() << endl; + + } while (pop[0].fitness() < pow(2.0, CHROM_SIZE) - 1); + + return 0; +} + +//-----------------------------------------------------------------------------