ladanyi@942: #include "simann.h" ladanyi@918: #include ladanyi@918: #include ladanyi@918: #include ladanyi@918: ladanyi@942: using namespace lemon; ladanyi@942: ladanyi@918: class MyController : public SimAnnBase::Controller { ladanyi@918: public: ladanyi@942: long iter, last_impr, max_iter, max_no_impr; ladanyi@942: double temp, annealing_factor; ladanyi@918: MyController() { ladanyi@942: iter = last_impr = 0; ladanyi@942: max_iter = 500000; ladanyi@942: max_no_impr = 20000; ladanyi@942: annealing_factor = 0.9999; ladanyi@942: temp = 1000; ladanyi@942: } ladanyi@942: void acceptEvent() { ladanyi@942: iter++; ladanyi@942: } ladanyi@942: void improveEvent() { ladanyi@942: last_impr = iter; ladanyi@942: } ladanyi@942: void rejectEvent() { ladanyi@942: iter++; ladanyi@918: } ladanyi@918: bool next() { ladanyi@942: temp *= annealing_factor; ladanyi@942: bool quit = (iter > max_iter) || (iter - last_impr > max_no_impr); ladanyi@942: return !quit; ladanyi@918: } ladanyi@942: bool accept(double cost_diff) { ladanyi@942: return (drand48() <= exp(cost_diff / temp)); ladanyi@918: } ladanyi@918: }; ladanyi@918: ladanyi@918: class MyEntity { ladanyi@918: public: ladanyi@918: double mutate() { return 10.0; } ladanyi@918: }; ladanyi@918: ladanyi@918: int main() { ladanyi@942: SimAnn simann; ladanyi@942: MyController ctrl; ladanyi@942: simann.setController(ctrl); ladanyi@918: MyEntity ent; ladanyi@942: simann.setEntity(ent); ladanyi@942: simann.run(); ladanyi@918: }