char GATEST_CC_ID [] = "$Id: genopt.cc,v 1.1 2000/03/23 15:51:11 binder Exp $"; #include #include #include #include struct MyRealGenome: public GARealGenome { MyRealGenome(const GARealAlleleSetArray& arr_, float(*obj_)(GAGenome&)): GARealGenome(arr_, obj_) {} MyRealGenome(const MyRealGenome& cp): GARealGenome(cp) {} virtual GAGenome* clone(CloneMethod) const { return new MyRealGenome(*this); } virtual void copy(const GAGenome &cp) { GAGenome::copy(cp); // no data specific to `MyRealGenome' } }; static float objfuncy(GAGenome& gen); int main() { GARealAlleleSetArray mybounds; for (unsigned int i(0); i < 3; ++i) { mybounds.add(-2, -1); } MyRealGenome genome(mybounds, objfuncy); GAPopulation pop(genome); GASteadyStateGA ssga(pop); GAGeneticAlgorithm& ga(ssga); ga.populationSize(2); ga.nBestGenomes(2); ga.minimize(); ga.evolve(); cout << ga.statistics() << endl; } static float objfuncy(GAGenome& gen) { MyRealGenome& rg((MyRealGenome&) gen); unsigned short int xsubi[3]; if (rg.length() != 3) { cerr << "illegal length of genome" << endl; exit(1); } cout << "request: "; for (unsigned int i(0); i < (unsigned int) rg.length(); ++i) { cout << rg[i] << " "; xsubi[i] = (unsigned short int) rg[i]; } cout << endl; return erand48(xsubi); }