From f3cac0b3c91bcfd76fed7a73340c5a374ddcb41e Mon Sep 17 00:00:00 2001 From: Nicolas Schodet Date: Fri, 10 May 2013 10:12:18 +0200 Subject: digital/io-hub/src/apbirthday: differentiate between gifts --- digital/io-hub/src/apbirthday/strat.cc | 21 ++++++++++++++++----- digital/io-hub/src/apbirthday/strat.hh | 7 ++++++- 2 files changed, 22 insertions(+), 6 deletions(-) (limited to 'digital/io-hub') 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. -- cgit v1.2.3