src/work/akos/simann_test.cc
author alpar
Mon, 01 Nov 2004 17:57:19 +0000
changeset 953 d9c115e2eeaf
parent 918 bb77eaa8fa0e
child 958 75f749682240
permissions -rw-r--r--
- Named parameters and traits for Dijkstra
(in src/work/alpar/dijkstra.h to be swithced to src/lemon)
- doc/named-param.dox: Doxygen page for named parameters.
     1 #include "simann.h"
     2 #include <cstdlib>
     3 #include <cmath>
     4 #include <iostream>
     5 
     6 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 
    38 class MyEntity {
    39 public:
    40   double mutate() { return 10.0; }
    41 };
    42 
    43 int main() {
    44   SimAnn<MyEntity> simann;
    45   MyController ctrl;
    46   simann.setController(ctrl);
    47   MyEntity ent;
    48   simann.setEntity(ent);
    49   simann.run();
    50 }