diff -r 186aa53d2802 -r 75fdd0c6866d src/work/akos/simann_test.cc --- a/src/work/akos/simann_test.cc Fri Oct 08 13:07:51 2004 +0000 +++ b/src/work/akos/simann_test.cc Mon Oct 11 18:02:48 2004 +0000 @@ -1,39 +1,50 @@ -#include "SimAnn.h" +#include "simann.h" #include #include #include +using namespace lemon; + class MyController : public SimAnnBase::Controller { public: - long MaxIter, MaxNoImpr; - double af; + long iter, last_impr, max_iter, max_no_impr; + double temp, annealing_factor; MyController() { - MaxIter = 500000; - MaxNoImpr = 20000; - af = 0.9999; - T = 1000; + iter = last_impr = 0; + max_iter = 500000; + max_no_impr = 20000; + annealing_factor = 0.9999; + temp = 1000; + } + void acceptEvent() { + iter++; + } + void improveEvent() { + last_impr = iter; + } + void rejectEvent() { + iter++; } bool next() { - T *= af; - std::cout << T << std::endl; - return !((sab->getIter() > MaxIter) || (sab->getIter() - sab->getLastImpr() > MaxNoImpr)); + temp *= annealing_factor; + bool quit = (iter > max_iter) || (iter - last_impr > max_no_impr); + return !quit; } - bool accept(double cost) { - return (drand48() <= exp(cost / T)); + bool accept(double cost_diff) { + return (drand48() <= exp(cost_diff / temp)); } }; class MyEntity { public: - void init() {} double mutate() { return 10.0; } }; int main() { - SimAnn sa; - MyController c; - sa.setController(c); + SimAnn simann; + MyController ctrl; + simann.setController(ctrl); MyEntity ent; - sa.setEnt(ent); - sa.run(); + simann.setEntity(ent); + simann.run(); }