src/work/akos/simann_test.cc
changeset 958 75f749682240
parent 942 75fdd0c6866d
equal deleted inserted replaced
1:547c40cb5a80 2:ab17601e780d
     1 #include "simann.h"
       
     2 #include <cstdlib>
     1 #include <cstdlib>
     3 #include <cmath>
     2 #include <cmath>
     4 #include <iostream>
     3 #include "simann.h"
     5 
     4 
     6 using namespace lemon;
     5 using namespace lemon;
     7 
       
     8 class MyController : public SimAnnBase::Controller {
       
     9 public:
       
    10   long iter, last_impr, max_iter, max_no_impr;
       
    11   double temp, annealing_factor;
       
    12   MyController() {
       
    13     iter = last_impr = 0;
       
    14     max_iter = 500000;
       
    15     max_no_impr = 20000;
       
    16     annealing_factor = 0.9999;
       
    17     temp = 1000;
       
    18   }
       
    19   void acceptEvent() {
       
    20     iter++;
       
    21   }
       
    22   void improveEvent() {
       
    23     last_impr = iter;
       
    24   }
       
    25   void rejectEvent() {
       
    26     iter++;
       
    27   }
       
    28   bool next() {
       
    29     temp *= annealing_factor;
       
    30     bool quit = (iter > max_iter) || (iter - last_impr > max_no_impr);
       
    31     return !quit;
       
    32   }
       
    33   bool accept(double cost_diff) {
       
    34     return (drand48() <= exp(cost_diff / temp));
       
    35   }
       
    36 };
       
    37 
     6 
    38 class MyEntity {
     7 class MyEntity {
    39 public:
     8 public:
    40   double mutate() { return 10.0; }
     9   double mutate() { return 10.0; }
       
    10   void revert() {}
    41 };
    11 };
    42 
    12 
    43 int main() {
    13 int main() {
    44   SimAnn<MyEntity> simann;
    14   SimAnn<MyEntity> simann;
    45   MyController ctrl;
    15   SimpleController ctrl;
    46   simann.setController(ctrl);
    16   simann.setController(ctrl);
    47   MyEntity ent;
    17   MyEntity ent;
    48   simann.setEntity(ent);
    18   simann.setEntity(ent);
    49   simann.run();
    19   simann.run();
    50 }
    20 }