summaryrefslogtreecommitdiffhomepage
path: root/digital
diff options
context:
space:
mode:
Diffstat (limited to 'digital')
-rw-r--r--digital/io-hub/src/apbirthday/strat.cc21
-rw-r--r--digital/io-hub/src/apbirthday/strat.hh7
2 files changed, 22 insertions, 6 deletions
diff --git a/digital/io-hub/src/apbirthday/strat.cc b/digital/io-hub/src/apbirthday/strat.cc
index 2f409cab..5eef1776 100644
--- a/digital/io-hub/src/apbirthday/strat.cc
+++ b/digital/io-hub/src/apbirthday/strat.cc
@@ -47,6 +47,8 @@ Strat::Strat ()
{
for (int i = 0; i < WAIT; i++)
chrono_last_decision_[i] = -1;
+ for (int i = 0; i < Gifts::nb; i++)
+ chrono_last_decision_gift_min_[i] = -1;
last_decision_ = WAIT;
}
@@ -293,7 +295,7 @@ Strat::score_gifts_sub (Position &pos, int gift_min, int gift_max,
if (pos_score_[p] == -1)
return best_score;
int score = score_offset_ - pos_score_[p] + nb * 1000
- - chrono_malus (GIFTS);
+ - chrono_malus (GIFTS, gift_min);
#ifdef TARGET_host
robot->hardware.simu_report.draw_number
((vect_t) { robot->gifts.x[gift_min], pg_gifts_distance }, score);
@@ -316,6 +318,7 @@ Strat::score_gifts_sub (Position &pos, int gift_min, int gift_max,
}
gifts_decision_.end_pos.x = robot->gifts.x[max] - bot_gift_arm_x;
gifts_decision_.end_pos.y = pg_gifts_distance + BOT_SIZE_SIDE;
+ last_gift_min_ = gift_min;
return score;
}
else
@@ -344,8 +347,12 @@ Strat::decision (Position &pos)
#endif
// Avoid to take the same decision.
if (last_decision_ != WAIT)
- chrono_last_decision_[last_decision_] =
- robot->chrono.remaining_time_ms ();
+ {
+ int now = robot->chrono.remaining_time_ms ();
+ chrono_last_decision_[last_decision_] = now;
+ if (last_decision_ == GIFTS)
+ chrono_last_decision_gift_min_[last_gift_min_] = now;
+ }
// Plate?
tscore = score_plate (tpos);
if (tscore > best_score)
@@ -392,9 +399,13 @@ Strat::decision (Position &pos)
}
int
-Strat::chrono_malus (Decision decision)
+Strat::chrono_malus (Decision decision, int gift_min)
{
- int last = chrono_last_decision_[decision];
+ int last;
+ if (decision != GIFTS)
+ last = chrono_last_decision_[decision];
+ else
+ last = chrono_last_decision_gift_min_[gift_min];
if (last == -1)
return 0;
int now = robot->chrono.remaining_time_ms ();
diff --git a/digital/io-hub/src/apbirthday/strat.hh b/digital/io-hub/src/apbirthday/strat.hh
index d56b0ef0..3601f227 100644
--- a/digital/io-hub/src/apbirthday/strat.hh
+++ b/digital/io-hub/src/apbirthday/strat.hh
@@ -26,6 +26,7 @@
#include "defs.hh"
#include "playground_2013.hh"
#include "asserv.hh"
+#include "gifts.hh"
/// High level strategy decision making.
class Strat
@@ -108,7 +109,7 @@ class Strat
/// Compute score for gifts.
int score_gifts (Position &pos);
/// Give malus for decision which was done lastly.
- int chrono_malus (Decision decision);
+ int chrono_malus (Decision decision, int gift_min = 0);
/// Compute score for candles between first and last.
int candles_score (int first, int last);
private:
@@ -131,8 +132,12 @@ class Strat
int pos_score_[POS_NB];
/// Last taken decision.
Decision last_decision_;
+ /// Last decision gift_min.
+ int last_gift_min_;
/// Chrono when a decision was last taken.
int chrono_last_decision_[WAIT];
+ /// Chrono when a decision was last taken about a gift_min.
+ int chrono_last_decision_gift_min_[Gifts::nb];
/// Number of candles tries.
int candles_tries_;
/// Last plate decision.