The team called Debrecen Deep Forest FC++

The team Debrecen Deep Forest FC++ is further developed from the team Debrecen Great Forest FC++. We focus on the implementation of the playOn function.

We do not make major changes, but make fine-tuning adjustments in the code of Debrecen Great Forest FC++:

The source code of the improvements are the following:

static void playOn(Client * thisclient)
        { char buf[1024]; int time = thisclient->bl.get_time(); int
        squad_number = thisclient->bl.get_squad_number() -1; int lr =
        thisclient->bl.get_lr(); // egész pályás felállásba kapcsol
        (középkezdéskor még fél pályás volt, most átmegy "támadásba")
        thisclient->coach.set_formation(Formations::F_4_3_3_F); // mint a
        FerSML-ben a (celx, cely) ennek felel meg most intuíciusan a
        t(arget)x, t(arget)x int tx =
        thisclient->coach.get_formation().get_formation_x(squad_number,
        lr); int ty =
        thisclient->coach.get_formation().get_formation_y(squad_number); //
        ha látja a lasztit if (thisclient->bl.get_see_ball()) { int to =
        thisclient->bl.pass_to_nearest(2); int pd =
        (to!=-1)?thisclient->bl.get_own_player(to).getDist():0; // és olyan
        közel, hogy meg tudja rúgni if (squad_number == 0 &&
        thisclient->bl.get_ball_dist() < 1.2) { std::snprintf(buf, 64,
        "(catch %f)\0", thisclient->bl.get_ball_ang());
        thisclient->sndCmd(buf); // std::cout << " kapus bravur "
        << std::endl; } else if (thisclient->bl.get_ball_dist() <
        .8) { //std::cout <<
        thisclient->bl.get_squad_number()<< " < .8 " <<
        std::endl; // akkor // esetleg ide passzol majd int pass_to; // az
        ellen kapuját SeenFlag & sf_opp =
        (lr=='l')?thisclient->bl.get_flag(Flag::GR):thisclient->bl.get_flag(Flag::GL);
        // a sajátját SeenFlag & sf_own =
        (lr=='l')?thisclient->bl.get_flag(Flag::GL):thisclient->bl.get_flag(Flag::GR);
        // látta mostanság if (time - sf_opp.get_time_stamp() < 2 // és
        elég közel van (30m) && sf_opp.getDist() < 30.0) { // felé
        rúgja ha látja kick(thisclient, 100, sf_opp.getAng()); std::cout
        << thisclient->bl.get_squad_number()<< " kapura lo "
        << std::endl; // ha nincs elég közel, akkor próbál passzolni }
        else if ((pass_to = thisclient->bl.pass_to_farthest_fwd()) != -1
        && (time - sf_own.get_time_stamp() > 3)) { kick(thisclient,
        thisclient->bl.tavhozEro(thisclient->bl.get_own_player(pass_to).getDist()),
        thisclient->bl.get_own_player(pass_to).getAng() ); // ha nem tud
        passzolni és közel a saját kapu, akkor (feltéve, hogy bal oldali a
        saját kapu) } else if (time - sf_own.get_time_stamp() < 1 // és
        elég közel van (25m) && sf_own.getDist() < 16.0) { // ha
        azt nem látja, akkor becsúszik kick(thisclient, 100, 180 +
        sf_own.getAng()); std::cout <<
        thisclient->bl.get_squad_number()<< " becsuszik " <<
        std::endl; } else { if (++thisclient->bl.nof_possessing_quantums
        < 7) { thisclient->sndCmd("(turn 30)\0"); std::cout <<
        thisclient->bl.get_squad_number()<< " turn for finding
        targets " << std::endl; } else { kick(thisclient, 10, 20);
        std::cout << thisclient->bl.get_squad_number()<< " kis
        kick " << std::endl; } } } else if
        (std::abs(thisclient->bl.get_ball_ang()) > 20.0) {
        std::snprintf(buf, 64, "(turn %f)\0",
        thisclient->bl.get_ball_ang()); thisclient->sndCmd(buf); //
        std::cout << thisclient->bl.get_squad_number()<< "turn"
        << thisclient->bl.get_ball_ang() << std::endl; } else
        if (squad_number != 0 && thisclient->bl.get_ball_dist()
        < 40.0 && to == -1) { // legyen agresszívabb a
        labdaszerzés: 40-ről is sprintel bedobni, ha nincs közelebbi társ
        dash_to_ball_100(thisclient, thisclient->bl.get_ball_dist());
        //std::cout << thisclient->bl.get_squad_number()<< "
        egyedul megyek labdara 100" << std::endl; } else if
        (squad_number > 4 && thisclient->bl.get_ball_dist() <
        30 && thisclient->bl.get_ball_dist() < pd && to
        != -1) { // legyen agresszívabb a labdaszerzés: 40-ről is sprintel
        bedobni, ha nincs közelebbi társ dash_to_ball_100(thisclient,
        thisclient->bl.get_ball_dist()); //std::cout <<
        thisclient->bl.get_squad_number()<< " megyunk a labdara 100"
        << std::endl; } else if (squad_number != 0 &&
        thisclient->bl.get_ball_dist() < 16.0 &&
        (thisclient->bl.nof_seen_teammates()) < 1) { // 40-ról is jön
        bedobni, ha esetleg lát is társakat (mert az előző ág nem teljesült)
        dash_to_ball_100(thisclient, thisclient->bl.get_ball_dist());
        //std::cout << thisclient->bl.get_squad_number()<< "
        megyUNK a labdara " << std::endl; } else if
        (thisclient->bl.get_ball_dist() < 9.0) {
        dash_to_ball_100(thisclient, thisclient->bl.get_ball_dist());
        //std::cout << thisclient->bl.get_squad_number()<< "
        megyUNK a labdara, aki csak latja " << std::endl; } else if
        (thisclient->bl.get_ball_dist() < 30.0) { std::snprintf(buf, 64,
        "(pos %d %d 50)\0", tx, ty); thisclient->sndCmd(buf); //std::cout
        << thisclient->bl.get_squad_number()<< " helyezkedik
        "<< "(" << tx << ", " << ty << ")"
        << std::endl; } else { std::snprintf(buf, 64, "(pos %d %d
        30)\0", tx, ty); thisclient->sndCmd(buf); //std::cout <<
        thisclient->bl.get_squad_number()<< " helyezkedik "<<
        "(" << tx << ", " << ty << ")" <<
        std::endl; } } else { // ha nem látja a labdát // visszamegy
        "védekezésbe"
        thisclient->coach.set_formation(Formations::F_4_3_3_H);
        thisclient->sndCmd("(turn 40)\0"); //std::cout <<
        thisclient->bl.get_squad_number()<< "meccs van? ..." <<
        std::endl; } }

The evaluation of the team Debrecen Deep Forest FC++

Unfortunately the above improvements do not reach the anticipated level, but the Debrecen Deep Forest FC++ can typically defeat the Debrecen Great Forest FC++ as it is shown by the next match results:

          201208191102-DForestFC++_13-vs-GForestFC++_2.rcg
          201208191116-GForestFC++_1-vs-DForestFC++_5.rcg
          201208191128-DForestFC++_4-vs-GForestFC++_3.rcg
          201208191200-DForestFC++_4-vs-GForestFC++_6.rcg
          201208191212-GForestFC++_2-vs-DForestFC++_3.rcg
          201208191223-DForestFC++_9-vs-GForestFC++_1.rcg
          201208191235-DForestFC++_6-vs-GForestFC++_2.rcg
          201208191247-GForestFC++_2-vs-DForestFC++_4.rcg
          201208191301-DForestFC++_10-vs-GForestFC++_8.rcg
          201208191318-DForestFC++_5-vs-GForestFC++_3.rcg 

  • But then a test match was played so well that we have recorded it to a video 201208191102-DForestFC++_13-vs-GForestFC++_2.rcg 13:2 that can be found at http://youtu.be/FOb8IQ0AF5w,

    .

  • GForestFC++ - DForestFC++ 1:5

  • DForestFC++ - GForestFC++ 4:3

  • DForestFC++ - GForestFC++ 4:6

  • GForestFC++ - DForestFC++ 2:3

  • DForestFC++ - GForestFC++ 9:1

  • DForestFC++ - GForestFC++ 6:2

  • GForestFC++ - DForestFC++ 2:4

  • DForestFC++ - GForestFC++ 10:8

  • DForestFC++ - GForestFC++ 5:3

The Debrecen Deep Forest FC++ also produces unintelligible errors. For example, the players pass backward in some given situations, due to the fact that the estimated position of the seen player is so wrong that it impairs the work of the function pass_to_farthest_fwd.

Debrecen Deep Forest - HELIOS_base, 0:

Debrecen Deep Forest - HELIOS2011, 0:

Downloading the Debrecen Deep Forest FC++

rcssserver-15.1.0.light5.df.tar.bz2.

Example 5.3. Do not pass backward

Improve the code so that the passing backward should occurs as rarely as possible. But for now do not use the advantages of the simplification.

 bool fwd(char
            lr, float fromx) const { if (lr == 'l') { if (fromx <
            this->x) return true; else return false; } else { if (fromx
            > this->x) return true; else return false; } }
            

Example 5.4. A good starting

At kick off the positions of all players are well known. Therefore it is not too hard to program a good kick-off, do it now yourself.


Extending the simplification of the RCSS server

The Debrecen Deep Forest FC++ runs with defaults

It may be noted that the Debrecen Deep Forest FC++ uses the pos command, but neither the client agent nor the server use the light response data. To be more precise, the client agent does not use and the server does not send the light response data, the latter case can be seen in the next screen snippet:

 $ src/rcssserver
            rcssserver-15.1.0.light4.df Copyright (C) 1995, 1996, 1997, 1998,
            1999 Electrotechnical Laboratory. 2000 - 2012 RoboCup Soccer
            Simulator Maintenance Group. Simulator Random Seed: 1345375129
            CSVSaver: Ready STDOutSaver: Ready Using simulator's random seed
            as Hetero Player Seed: 1345375129 wind factor: rand: 0.000000,
            vector: (0.000000, 0.000000) Hit CTRL-C to exit Light response:
            false Light response with angle: false Light response with angles:
            false