From 01e44cf82876872de37e56750fab1580230fa1bd Mon Sep 17 00:00:00 2001 From: gustavo Date: Tue, 18 Jul 2000 11:30:39 +0000 Subject: [PATCH] fix examples using binary_value --- eo/test/binary_value.h | 41 ++++--- eo/test/t-eo.cpp | 2 +- eo/test/t-eobreeder.cpp | 6 +- eo/test/t-eogeneration.cpp | 1 + eo/test/t-eoinclusion.cpp | 5 +- eo/test/t-eoinsertion.cpp | 215 +++++++++++++++++++------------------ eo/test/t-selectOne.cpp | 2 +- 7 files changed, 143 insertions(+), 129 deletions(-) diff --git a/eo/test/binary_value.h b/eo/test/binary_value.h index a450a117..e3a0c756 100644 --- a/eo/test/binary_value.h +++ b/eo/test/binary_value.h @@ -1,18 +1,27 @@ -#include - -//----------------------------------------------------------------------------- - -typedef eoBin Chrom; - -/** Just a simple function that takes binary value of a chromosome and sets - the fitnes. - @param _chrom A binary chromosome -*/ -float binary_value(const Chrom& _chrom) -{ - float sum = 0; - for (unsigned i = 0; i < _chrom.size(); i++) - if (_chrom[i]) +#include + +//----------------------------------------------------------------------------- + +typedef eoBin Chrom; + +/** Just a simple function that takes binary value of a chromosome and sets + the fitnes. + @param _chrom A binary chromosome +*/ + +float binary_value(const Chrom& _chrom) +{ + float sum = 0; + for (unsigned i = 0; i < _chrom.size(); i++) + if (_chrom[i]) sum += pow(2, _chrom.size() - i - 1); return sum; -} +} + +struct BinaryValue +{ + template void operator()(Chrom& _chrom) + { + _chrom.fitness(binary_value(_chrom)); + } +}; diff --git a/eo/test/t-eo.cpp b/eo/test/t-eo.cpp index 38236253..f5cd88fa 100644 --- a/eo/test/t-eo.cpp +++ b/eo/test/t-eo.cpp @@ -17,7 +17,7 @@ int main() cout << "chrom1 = " << chrom1 << endl << "chrom2 = " << chrom2 << endl; - return 1; + return 0; } //----------------------------------------------------------------------------- diff --git a/eo/test/t-eobreeder.cpp b/eo/test/t-eobreeder.cpp index dc2bd326..9672acc9 100644 --- a/eo/test/t-eobreeder.cpp +++ b/eo/test/t-eobreeder.cpp @@ -50,12 +50,14 @@ main() eoBinRandom random; eoPop pop; + + BinaryValue eval; for (i = 0; i < POP_SIZE; ++i) { Chrom chrom(CHROM_SIZE); random(chrom); - binary_value(chrom); + eval(chrom); pop.push_back(chrom); } @@ -73,7 +75,7 @@ main() breeder(pop); // reevaluation of fitness - for_each(pop.begin(), pop.end(), binary_value); + for_each(pop.begin(), pop.end(), eval); cout << "new population:" << endl; for (i = 0; i < pop.size(); ++i) diff --git a/eo/test/t-eogeneration.cpp b/eo/test/t-eogeneration.cpp index 90c39dd1..71f7377c 100644 --- a/eo/test/t-eogeneration.cpp +++ b/eo/test/t-eogeneration.cpp @@ -49,6 +49,7 @@ main() eoBinRandom random; eoPop pop; + // Evaluation eoEvalFuncPtr eval( binary_value ); diff --git a/eo/test/t-eoinclusion.cpp b/eo/test/t-eoinclusion.cpp index 17d4cbdb..c2e7d518 100644 --- a/eo/test/t-eoinclusion.cpp +++ b/eo/test/t-eoinclusion.cpp @@ -19,6 +19,7 @@ main() const unsigned CHROM_SIZE = 4; eoBinRandom random; + BinaryValue eval; for (unsigned POP_SIZE = 4; POP_SIZE <=6; POP_SIZE++) { @@ -28,7 +29,7 @@ main() { Chrom chrom(CHROM_SIZE); random(chrom); - binary_value(chrom); + eval(chrom); pop.push_back(chrom); } @@ -40,7 +41,7 @@ main() { Chrom chrom(CHROM_SIZE); random(chrom); - binary_value(chrom); + eval(chrom); pop2.push_back(chrom); } diff --git a/eo/test/t-eoinsertion.cpp b/eo/test/t-eoinsertion.cpp index dbd53e32..993c228f 100644 --- a/eo/test/t-eoinsertion.cpp +++ b/eo/test/t-eoinsertion.cpp @@ -1,107 +1,108 @@ -//----------------------------------------------------------------------------- -// t-eoinsertion.cpp -//----------------------------------------------------------------------------- - -#include // eoBin, eoPop, eoInsertion - -//----------------------------------------------------------------------------- - -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 CHROM_SIZE = 4; - unsigned i; - - eoBinRandom random; - - for (unsigned POP_SIZE = 4; POP_SIZE <=6; POP_SIZE++) - { - eoPop pop; - - for (i = 0; i < POP_SIZE; i++) - { - Chrom chrom(CHROM_SIZE); - random(chrom); - binary_value(chrom); - pop.push_back(chrom); - } - - for (unsigned POP2_SIZE = 4; POP2_SIZE <=6; POP2_SIZE++) - { - eoPop pop2, pop3, pop4, pop5, popx; - - for (i = 0; i < POP2_SIZE; i++) - { - Chrom chrom(CHROM_SIZE); - random(chrom); - binary_value(chrom); - pop2.push_back(chrom); - } - - cout << "--------------------------------------------------" << endl - << "breeders \tpop" << endl - << "--------------------------------------------------" << endl; - for (i = 0; i < max(pop.size(), pop2.size()); i++) - { - if (pop.size() > i) - cout << pop[i] << " " << pop[i].fitness() << " \t"; - else - cout << "\t\t"; - if (pop2.size() > i) - cout << pop2[i] << " " << pop2[i].fitness(); - cout << endl; - } - - eoInsertion insertion(0.75); - popx = pop; - pop3 = pop2; - insertion(popx, pop3); - - eoInsertion insertion2; - popx = pop; - pop4 = pop2; - insertion2(popx, pop4); - - eoInsertion insertion3(1.5); - popx = pop; - pop5 = pop2; - insertion3(popx, pop5); - - cout << endl - << "0.75 \t\t1.0 \t\t1.5" << endl - << "---- \t\t--- \t\t---" << endl; - for (i = 0; i < pop5.size(); i++) - { - if (pop3.size() > i) - cout << pop3[i] << " " << pop3[i].fitness() << " \t"; - else - cout << " \t\t"; - if (pop4.size() > i) - cout << pop4[i] << " " << pop4[i].fitness() << " \t"; - else - cout << " \t\t"; - if (pop5.size() > i) - cout << pop5[i] << " " << pop5[i].fitness(); - cout << endl; - } - } - } - - return 0; -} - -//----------------------------------------------------------------------------- +//----------------------------------------------------------------------------- +// t-eoinsertion.cpp +//----------------------------------------------------------------------------- + +#include // eoBin, eoPop, eoInsertion + +//----------------------------------------------------------------------------- + +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 CHROM_SIZE = 4; + unsigned i; + + eoBinRandom random; + + for (unsigned POP_SIZE = 4; POP_SIZE <=6; POP_SIZE++) + { + eoPop pop; + + for (i = 0; i < POP_SIZE; i++) + { + Chrom chrom(CHROM_SIZE); + random(chrom); + binary_value(chrom); + pop.push_back(chrom); + } + + for (unsigned POP2_SIZE = 4; POP2_SIZE <=6; POP2_SIZE++) + { + eoPop pop2, pop3, pop4, pop5, popx; + + for (i = 0; i < POP2_SIZE; i++) + { + Chrom chrom(CHROM_SIZE); + random(chrom); + binary_value(chrom); + pop2.push_back(chrom); + } + + cout << "--------------------------------------------------" << endl + << "breeders \tpop" << endl + << "--------------------------------------------------" << endl; + for (i = 0; i < max(pop.size(), pop2.size()); i++) + { + if (pop.size() > i) + cout << pop[i] << " " << pop[i].fitness() << " \t"; + else + cout << "\t\t"; + if (pop2.size() > i) + cout << pop2[i] << " " << pop2[i].fitness(); + cout << endl; + } + + eoInsertion insertion(0.75); + popx = pop; + pop3 = pop2; + insertion(popx, pop3); + + eoInsertion insertion2; + popx = pop; + pop4 = pop2; + insertion2(popx, pop4); + + eoInsertion insertion3(1.5); + popx = pop; + pop5 = pop2; + insertion3(popx, pop5); + + cout << endl + << "0.75 \t\t1.0 \t\t1.5" << endl + << "---- \t\t--- \t\t---" << endl; + for (i = 0; i < pop5.size(); i++) + { + if (pop3.size() > i) + cout << pop3[i] << " " << pop3[i].fitness() << " \t"; + else + cout << " \t\t"; + if (pop4.size() > i) + cout << pop4[i] << " " << pop4[i].fitness() << " \t"; + else + cout << " \t\t"; + if (pop5.size() > i) + cout << pop5[i] << " " << pop5[i].fitness(); + cout << endl; + } + } + } + + return 0; +} + +//----------------------------------------------------------------------------- + diff --git a/eo/test/t-selectOne.cpp b/eo/test/t-selectOne.cpp index ff601796..56da601c 100644 --- a/eo/test/t-selectOne.cpp +++ b/eo/test/t-selectOne.cpp @@ -58,7 +58,7 @@ main() for (i = 0; i < POP_SIZE; ++i) { Chrom chrom(CHROM_SIZE); random(chrom); - binary_value(chrom); + BinaryValue()(chrom); pop.push_back(chrom); }