[Lemon-commits] [lemon_svn] ladanyi: r1495 - hugo/trunk/src/work/akos
Lemon SVN
svn at lemon.cs.elte.hu
Mon Nov 6 20:45:52 CET 2006
Author: ladanyi
Date: Wed Jan 26 10:00:40 2005
New Revision: 1495
Modified:
hugo/trunk/src/work/akos/simann.h
hugo/trunk/src/work/akos/simann_demo.cc
Log:
Various changes.
Modified: hugo/trunk/src/work/akos/simann.h
==============================================================================
--- hugo/trunk/src/work/akos/simann.h (original)
+++ hugo/trunk/src/work/akos/simann.h Wed Jan 26 10:00:40 2005
@@ -98,7 +98,8 @@
prev_cost = prev_prev_cost;
}
void saveAsBest() {
- *best_ent = *curr_ent;
+ delete(best_ent);
+ best_ent = new E(*curr_ent);
best_cost = curr_cost;
}
};
@@ -129,7 +130,7 @@
* \param _ann_fact annealing factor
*/
SimpleController(long _max_iter = 500000, long _max_no_impr = 20000,
- double _temp = 1000, double _ann_fact = 0.9999) : iter(0), last_impr(0),
+ double _temp = 1000.0, double _ann_fact = 0.9999) : iter(0), last_impr(0),
max_iter(_max_iter), max_no_impr(_max_no_impr), temp(_temp),
ann_fact(_ann_fact) {}
void acceptEvent() {
@@ -149,7 +150,8 @@
bool accept() {
double cost_diff = base->getPrevCost() - base->getCurrCost();
if (cost_diff < 0.0) {
- return (drand48() <= exp(cost_diff / temp));
+ bool ret = drand48() <= exp(cost_diff / temp);
+ return ret;
}
else {
return true;
@@ -166,10 +168,13 @@
Timer timer;
/*! \param time the elapsed time in seconds */
virtual double threshold(double time) {
- // this is the function 1 / log(x) scaled and offset
+ // 1 / log(x)
+ /*
static double xm = 5.0 / end_time;
static double ym = start_threshold / (1 / log(1.2) - 1 / log(5.0 + 1.2));
return ym * (1 / log(xm * time + 1.2) - 1 / log(5.0 + 1.2));
+ */
+ return (-1.0) * start_threshold / end_time * time + start_threshold;
}
public:
double alpha, beta, gamma;
@@ -184,27 +189,21 @@
* \param _gamma parameter used to increase the temperature
*/
AdvancedController(double _end_time, double _alpha = 0.2,
- double _beta = 0.9, double _gamma = 1.2) : alpha(_alpha), beta(_beta),
- gamma(_gamma), end_time(_end_time), ann_fact(0.9999), warmup(true) {}
+ double _beta = 0.9, double _gamma = 1.6) : alpha(_alpha), beta(_beta),
+ gamma(_gamma), end_time(_end_time), ann_fact(0.99999999), warmup(true) {}
void init() {
avg_cost = base->getCurrCost();
}
void acceptEvent() {
avg_cost = alpha * base->getCurrCost() + (1.0 - alpha) * avg_cost;
if (warmup) {
- static double max_cost_diff = 0.0;
- static int incr_cnt = 0;
- double cost_diff = base->getCurrCost() - base->getPrevCost();
- if (cost_diff > 0.0) {
- incr_cnt++;
- if (cost_diff > max_cost_diff) {
- max_cost_diff = cost_diff;
- }
- }
- if (incr_cnt >= 100) {
+ static int cnt = 0;
+ cnt++;
+ if (cnt >= 100) {
// calculate starting threshold and starting temperature
- start_threshold = fabs(base->getBestCost() - avg_cost);
- temp = max_cost_diff / log(0.5);
+ start_threshold = 5.0 * fabs(base->getBestCost() - avg_cost);
+ //temp = max_cost_diff / log(0.5);
+ temp = 10000.0;
warmup = false;
timer.reset();
}
@@ -227,6 +226,7 @@
else {
// increase the temperature
temp *= gamma;
+ ann_fact = 0.99999999;
}
temp *= ann_fact;
return elapsed_time < end_time;
Modified: hugo/trunk/src/work/akos/simann_demo.cc
==============================================================================
--- hugo/trunk/src/work/akos/simann_demo.cc (original)
+++ hugo/trunk/src/work/akos/simann_demo.cc Wed Jan 26 10:00:40 2005
@@ -10,15 +10,17 @@
};
int main() {
+ /*
SimAnn<MyEntity> simann;
SimpleController ctrl;
simann.setController(ctrl);
MyEntity ent;
simann.setEntity(ent);
simann.run();
+ */
SimAnn<MyEntity> simann2;
- AdvancedController ctrl2(20.0);
+ AdvancedController ctrl2(10.0);
simann2.setController(ctrl2);
MyEntity ent2;
simann2.setEntity(ent2);
More information about the Lemon-commits
mailing list