diff --git a/eo/test/t-testStateAndParser.cpp b/eo/test/t-testStateAndParser.cpp new file mode 100644 index 00000000..87f0a8c9 --- /dev/null +++ b/eo/test/t-testStateAndParser.cpp @@ -0,0 +1,113 @@ +//----------------------------------------------------------------------------- + +// to avoid long name warnings +#pragma warning(disable:4786) + +#include // runtime_error + +//----------------------------------------------------------------------------- +// tt.cpp: +// +//----------------------------------------------------------------------------- + + +// general +#include // Random number generators +#include +#include +#include + +//----------------------------------------------------------------------------- + + +//----------------------------------------------------------------------------- + +int the_main(int argc, char **argv) +{ // ok, we have a command line parser and a state + + typedef eoBin Chrom; + + eoParser parser(argc, argv); + + // Define Parameters + eoValueParam chrom_size(2, "chrom-size", "Chromosome size"); + eoValueParam rate(0.01, "mutationRatePerBit", "Initial value for mutation rate per bit"); + eoValueParam factor(0.99, "mutationFactor", "Decrease factor for mutation rate"); + eoValueParam seed(time(0), "seed", "Random number seed"); + eoValueParam load_name("", "Load","Load",'L'); + eoValueParam save_name("", "Save","Save",'S'); + + // Register them + parser.processParam(chrom_size, "Representation"); + parser.processParam(rate, "Genetic Operators"); + parser.processParam(factor, "Genetic Operators"); + parser.processParam(load_name, "Persistence"); + parser.processParam(save_name, "Persistence"); + parser.processParam(seed, "Rng seeding"); + + eoState state; + state.registerObject(parser); + + if (load_name.value() != "") + { // load the parser. This is only neccessary when the user wants to + // be able to change the parameters in the state file by hand. + state.load(load_name.value()); // load the parser + } + + // Create the algorithm here + + // Register the algorithm + state.registerObject(rng); + //state.registerObject(pop); + + if (parser.userNeedsHelp()) + { + parser.printHelp(cout); + return 0; + } + + // Either load or initialize + if (load_name.value() != "") + { + state.load(load_name.value()); // load the rest + } + else + { + // else + + // initialize rng and population + + rng.reseed(seed.value()); + } + + // run the algorithm + + // Save when needed + if (save_name.value() != "") + { + string file_name = save_name.value(); + save_name.value() = ""; // so that it does not appear in the parser section of the state file + state.save(file_name); + } + + for (int i = 0; i < 100; ++i) + rng.rand(); + + cout << "a random number is " << rng.random(1024) << endl;; + + return 1; +} + +int main(int argc, char **argv) +{ + try + { + the_main(argc, argv); + } + catch(exception& e) + { + cout << "Exception: " << e.what() << endl; + } + + return 1; +} \ No newline at end of file