equal
deleted
inserted
replaced
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 } |