From 5923ab98e83326db4383f18d7f4077e84d8d6001 Mon Sep 17 00:00:00 2001
From: Matthew Hausknecht <matthew.hausknecht@gmail.com>
Date: Tue, 22 Mar 2016 12:44:04 -0500
Subject: [PATCH] Removed unum from connectToServer function.

---
 bin/Trainer.py                             |   7 +++----
 doc/manual.pdf                             | Bin 291224 -> 291204 bytes
 doc/manual.tex                             |   4 ++--
 example/communication_agent.cpp            |  11 +++++------
 example/communication_agent.py             |   2 +-
 example/example_high_level_random_agent.py |   2 +-
 example/hfo_example_agent.cpp              |   5 ++---
 example/hfo_example_agent.py               |   2 +-
 example/high_level_random_agent.cpp        |   3 +--
 example/low_level_random_agent.cpp         |   3 +--
 example/mid_level_dribble_agent.cpp        |   3 +--
 example/mid_level_kick_agent.cpp           |   3 +--
 example/mid_level_move_agent.cpp           |   3 +--
 example/passing_agents.sh                  |   4 ++--
 hfo/hfo.py                                 |   9 +++------
 hfo/hfo_c_wrapper.h                        |   3 +--
 src/HFO.cpp                                |   6 ++++--
 src/HFO.hpp                                |   5 +++--
 src/agent.cpp                              |   4 ++++
 src/agent.h                                |   1 +
 20 files changed, 38 insertions(+), 42 deletions(-)

diff --git a/bin/Trainer.py b/bin/Trainer.py
index 13d4117..5e59b54 100755
--- a/bin/Trainer.py
+++ b/bin/Trainer.py
@@ -72,11 +72,10 @@ class Trainer(object):
                               'teams', 'base')
     config_dir = os.path.join(binary_dir, 'config/formations-dt')
     print("Waiting for player-controlled agent %s-%d: config_dir=%s, "\
-          "uniform_number=%d, server_port=%d, server_addr=%s, team_name=%s, "\
-          "play_goalie=%r"
+          "server_port=%d, server_addr=%s, team_name=%s, play_goalie=%r"
           % (self._offenseTeamName if play_offense else self._defenseTeamName,
-             agent_num, config_dir, agent_ext_num, self._serverPort, "localhost",
-             team_name, agent_ext_num==1))
+             agent_num, config_dir, self._serverPort, "localhost", team_name,
+             agent_ext_num==1))
     if wait_until_join:
       self.waitOnPlayer(agent_ext_num, play_offense)
     return None
diff --git a/doc/manual.pdf b/doc/manual.pdf
index b835c881e9e24a508d168368fa4eab1bc48e5228..b0406b3f8e0e49cb0e4e4a99c3f41ca098d5c02e 100644
GIT binary patch
delta 4723
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
B?H>RD

delta 4745
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
X1BjI3n3r2|1Rx1FISM5uMNdWw&OYE%

diff --git a/doc/manual.tex b/doc/manual.tex
index 28f6320..d2deb0a 100644
--- a/doc/manual.tex
+++ b/doc/manual.tex
@@ -106,7 +106,7 @@ to connect the offensive player:\\
 
 \noindent \verb+Waiting for player-controlled agent base_left-0: +\\
 \noindent \verb+  config_dir=HFO/bin/teams/base/config/formations-dt,+\\
-\noindent \verb+  uniform_number=11, server_port=6000, server_addr=localhost,+\\
+\noindent \verb+  server_port=6000, server_addr=localhost,+\\
 \noindent \verb+  team_name=base_left, play_goalie=False+\\
 
 By default, the server starts on port 6000, but may be changed as follows:\\
@@ -179,7 +179,7 @@ necessary to specify a \verb+record_dir+ in the \verb+connectToServer+
 function:\\
 \\
 \noindent \verb+std::string record_dir = "log/";+\\
-\noindent \verb+hfo.connectToServer(features, config_dir, unum, port, server_addr,+\\
+\noindent \verb+hfo.connectToServer(features, config_dir, port, server_addr,+\\
 \noindent \verb+                    team_name, goalie, record_dir);+\\
 
 \section{Randomness}
diff --git a/example/communication_agent.cpp b/example/communication_agent.cpp
index 84c27aa..f41fddc 100644
--- a/example/communication_agent.cpp
+++ b/example/communication_agent.cpp
@@ -14,7 +14,6 @@ using namespace hfo;
 // Server Connection Options. See printouts from bin/HFO.
 feature_set_t features = HIGH_LEVEL_FEATURE_SET;
 string config_dir = "bin/teams/base/config/formations-dt";
-int unum = 11;
 int port = 6000;
 string server_addr = "localhost";
 string team_name = "base_left";
@@ -22,16 +21,16 @@ bool goalie = false;
 
 #define PI 3.14159265
 int main(int argc, char** argv) {
-  if (argc > 2) {
-    unum = atoi(argv[1]);
-    port = atoi(argv[2]);
+  if (argc > 1) {
+    port = atoi(argv[1]);
   }
   // Create the HFO environment
   HFOEnvironment hfo;
   // Connect to the server and request feature set. See manual for
   // more information on feature sets.
-  hfo.connectToServer(features, config_dir, unum, port, server_addr,
-                           team_name, goalie);
+  hfo.connectToServer(features, config_dir, port, server_addr,
+                      team_name, goalie);
+  int unum = hfo.getUnum();
   for (int episode=0; episode<10; episode++) {
     int agent_on_ball = 7;
     status_t status = IN_GAME;
diff --git a/example/communication_agent.py b/example/communication_agent.py
index d5df038..ce94116 100755
--- a/example/communication_agent.py
+++ b/example/communication_agent.py
@@ -13,7 +13,7 @@ if __name__ == '__main__':
   # Connect to the server with the specified
   # feature set. See feature sets in hfo.py/hfo.hpp.
   hfo.connectToServer(HIGH_LEVEL_FEATURE_SET,
-                      'bin/teams/base/config/formations-dt', 11, 6000,
+                      'bin/teams/base/config/formations-dt', 6000,
                       'localhost', 'base_left', False)
   for episode in xrange(10):
     status = IN_GAME
diff --git a/example/example_high_level_random_agent.py b/example/example_high_level_random_agent.py
index 9de6048..911d043 100755
--- a/example/example_high_level_random_agent.py
+++ b/example/example_high_level_random_agent.py
@@ -13,7 +13,7 @@ def main():
   # Connect to the server with the specified
   # feature set. See feature sets in hfo.py/hfo.hpp.
   hfo.connectToServer(HIGH_LEVEL_FEATURE_SET,
-                      'bin/teams/base/config/formations-dt', 11, 6000,
+                      'bin/teams/base/config/formations-dt', 6000,
                       'localhost', 'base_left', False)
   for episode in xrange(10):
     status = IN_GAME
diff --git a/example/hfo_example_agent.cpp b/example/hfo_example_agent.cpp
index 922a38c..d32271c 100644
--- a/example/hfo_example_agent.cpp
+++ b/example/hfo_example_agent.cpp
@@ -12,18 +12,17 @@ using namespace hfo;
 // Server Connection Options. See printouts from bin/HFO.
 feature_set_t features = LOW_LEVEL_FEATURE_SET;
 string config_dir = "bin/teams/base/config/formations-dt";
-int unum = 11;
 int port = 6000;
 string server_addr = "localhost";
 string team_name = "base_left";
-bool goalie = false;
+bool goalie = true;
 
 int main() {
   // Create the HFO environment
   HFOEnvironment hfo;
   // Connect to the server and request low-level feature set. See
   // manual for more information on feature sets.
-  hfo.connectToServer(features, config_dir, unum, port, server_addr,
+  hfo.connectToServer(features, config_dir, port, server_addr,
                       team_name, goalie);
   // Play 5 episodes
   for (int episode=0; episode<5; episode++) {
diff --git a/example/hfo_example_agent.py b/example/hfo_example_agent.py
index 32a109f..6270f5d 100755
--- a/example/hfo_example_agent.py
+++ b/example/hfo_example_agent.py
@@ -12,7 +12,7 @@ if __name__ == '__main__':
   # Connect to the server with the specified
   # feature set. See feature sets in hfo.py/hfo.hpp.
   hfo.connectToServer(LOW_LEVEL_FEATURE_SET,
-                      'bin/teams/base/config/formations-dt', 11, 6000,
+                      'bin/teams/base/config/formations-dt', 6000,
                       'localhost', 'base_left', False)
   for episode in xrange(10):
     status = IN_GAME
diff --git a/example/high_level_random_agent.cpp b/example/high_level_random_agent.cpp
index 44c7820..e482b1f 100644
--- a/example/high_level_random_agent.cpp
+++ b/example/high_level_random_agent.cpp
@@ -12,7 +12,6 @@ using namespace hfo;
 // Server Connection Options. See printouts from bin/HFO.
 feature_set_t features = HIGH_LEVEL_FEATURE_SET;
 string config_dir = "bin/teams/base/config/formations-dt";
-int unum = 11;
 int port = 6000;
 string server_addr = "localhost";
 string team_name = "base_left";
@@ -29,7 +28,7 @@ int main(int argc, char** argv) {
   HFOEnvironment hfo;
   // Connect to the server and request high-level feature set. See
   // manual for more information on feature sets.
-  hfo.connectToServer(features, config_dir, unum, port, server_addr,
+  hfo.connectToServer(features, config_dir, port, server_addr,
                            team_name, goalie);
   for (int episode=0; episode<10; episode++) {
     status_t status = IN_GAME;
diff --git a/example/low_level_random_agent.cpp b/example/low_level_random_agent.cpp
index 517f00e..2dddd38 100644
--- a/example/low_level_random_agent.cpp
+++ b/example/low_level_random_agent.cpp
@@ -12,7 +12,6 @@ using namespace hfo;
 // Server Connection Options. See printouts from bin/HFO.
 feature_set_t features = LOW_LEVEL_FEATURE_SET;
 string config_dir = "bin/teams/base/config/formations-dt";
-int unum = 11;
 int port = 6000;
 string server_addr = "localhost";
 string team_name = "base_left";
@@ -52,7 +51,7 @@ int main(int argc, char** argv) {
   HFOEnvironment hfo;
   // Connect to the server and request low-level feature set. See
   // manual for more information on feature sets.
-  hfo.connectToServer(features, config_dir, unum, port, server_addr,
+  hfo.connectToServer(features, config_dir, port, server_addr,
                            team_name, goalie);
   for (int episode=0; episode<10; episode++) {
     status_t status = IN_GAME;
diff --git a/example/mid_level_dribble_agent.cpp b/example/mid_level_dribble_agent.cpp
index 0c7aa30..743da74 100644
--- a/example/mid_level_dribble_agent.cpp
+++ b/example/mid_level_dribble_agent.cpp
@@ -16,7 +16,6 @@ using namespace hfo;
 // Server Connection Options. See printouts from bin/HFO.
 feature_set_t features = HIGH_LEVEL_FEATURE_SET;
 string config_dir = "bin/teams/base/config/formations-dt";
-int unum = 11;
 int port = 6000;
 string server_addr = "localhost";
 string team_name = "base_left";
@@ -27,7 +26,7 @@ int main(int argc, char** argv) {
   HFOEnvironment hfo;
   // Connect to the server and request low-level feature set. See
   // manual for more information on feature sets.
-  hfo.connectToServer(features, config_dir, unum, port, server_addr,
+  hfo.connectToServer(features, config_dir, port, server_addr,
                            team_name, goalie);
   for (int episode=0; episode<10; episode++) {
     status_t status = IN_GAME;
diff --git a/example/mid_level_kick_agent.cpp b/example/mid_level_kick_agent.cpp
index 454f69a..da0dea8 100644
--- a/example/mid_level_kick_agent.cpp
+++ b/example/mid_level_kick_agent.cpp
@@ -14,7 +14,6 @@ using namespace hfo;
 // Server Connection Options. See printouts from bin/HFO.
 feature_set_t features = HIGH_LEVEL_FEATURE_SET;
 string config_dir = "bin/teams/base/config/formations-dt";
-int unum = 11;
 int port = 6000;
 string server_addr = "localhost";
 string team_name = "base_left";
@@ -25,7 +24,7 @@ int main(int argc, char** argv) {
   HFOEnvironment hfo;
   // Connect to the server and request low-level feature set. See
   // manual for more information on feature sets.
-  hfo.connectToServer(features, config_dir, unum, port, server_addr,
+  hfo.connectToServer(features, config_dir, port, server_addr,
                            team_name, goalie);
   for (int episode=0; episode < 10; episode++) {
     status_t status = IN_GAME;
diff --git a/example/mid_level_move_agent.cpp b/example/mid_level_move_agent.cpp
index b22abec..8f51e53 100644
--- a/example/mid_level_move_agent.cpp
+++ b/example/mid_level_move_agent.cpp
@@ -13,7 +13,6 @@ using namespace hfo;
 // Server Connection Options. See printouts from bin/HFO.
 feature_set_t features = HIGH_LEVEL_FEATURE_SET;
 string config_dir = "bin/teams/base/config/formations-dt";
-int unum = 11;
 int port = 6000;
 string server_addr = "localhost";
 string team_name = "base_left";
@@ -24,7 +23,7 @@ int main(int argc, char** argv) {
   HFOEnvironment hfo;
   // Connect to the server and request feature set. See manual for
   // more information on feature sets.
-  hfo.connectToServer(features, config_dir, unum, port, server_addr,
+  hfo.connectToServer(features, config_dir, port, server_addr,
                            team_name, goalie);
   float target_x = .82;
   float target_y = .9;
diff --git a/example/passing_agents.sh b/example/passing_agents.sh
index e818000..ee04f93 100755
--- a/example/passing_agents.sh
+++ b/example/passing_agents.sh
@@ -2,9 +2,9 @@
 
 ./bin/HFO --offense-agents=2 --no-sync &
 sleep 5
-./example/communication_agent 7 6000 &
+./example/communication_agent 6000 &
 sleep 5
-./example/communication_agent 11 6000 &
+./example/communication_agent 6000 &
 
 # The magic line
 #   $$ holds the PID for this script
diff --git a/hfo/hfo.py b/hfo/hfo.py
index aeedf70..4021761 100644
--- a/hfo/hfo.py
+++ b/hfo/hfo.py
@@ -52,7 +52,7 @@ hfo_lib.HFO_new.restype = c_void_p
 hfo_lib.HFO_del.argtypes = [c_void_p]
 hfo_lib.HFO_del.restype = None
 hfo_lib.connectToServer.argtypes = [c_void_p, c_int, c_char_p, c_int,
-                                    c_int, c_char_p, c_char_p, c_bool, c_char_p]
+                                    c_char_p, c_char_p, c_bool, c_char_p]
 hfo_lib.connectToServer.restype = None
 hfo_lib.getStateSize.argtypes = [c_void_p]
 hfo_lib.getStateSize.restype = c_int
@@ -85,7 +85,6 @@ class HFOEnvironment(object):
   def connectToServer(self,
                       feature_set=LOW_LEVEL_FEATURE_SET,
                       config_dir='bin/teams/base/config/formations-dt',
-                      uniform_number=11,
                       server_port=6000,
                       server_addr='localhost',
                       team_name='base_left',
@@ -97,16 +96,14 @@ class HFOEnvironment(object):
 
       feature_set: High or low level state features
       config_dir: Config directory. Typically HFO/bin/teams/base/config/
-      uniform_number: player's uniform number.
       server_port: port to connect to server on
       server_addr: address of server
       team_name: Name of team to join.
       play_goalie: is this player the goalie
       record_dir: record agent's states/actions/rewards to this directory
     """
-    hfo_lib.connectToServer(self.obj, feature_set, config_dir, uniform_number,
-                            server_port, server_addr, team_name, play_goalie,
-                            record_dir)
+    hfo_lib.connectToServer(self.obj, feature_set, config_dir, server_port,
+                            server_addr, team_name, play_goalie, record_dir)
 
   def getStateSize(self):
     """ Returns the number of state features """
diff --git a/hfo/hfo_c_wrapper.h b/hfo/hfo_c_wrapper.h
index 8d4c774..422d7c8 100644
--- a/hfo/hfo_c_wrapper.h
+++ b/hfo/hfo_c_wrapper.h
@@ -12,13 +12,12 @@ extern "C" {
   void connectToServer(hfo::HFOEnvironment *hfo,
                        hfo::feature_set_t feature_set,
                        char* config_dir,
-                       int uniform_number,
                        int server_port,
                        char* server_addr,
                        char* team_name,
                        bool play_goalie,
                        char* record_dir) {
-    return hfo->connectToServer(feature_set, config_dir, uniform_number,
+    return hfo->connectToServer(feature_set, config_dir,
                                 server_port, server_addr, team_name,
                                 play_goalie, record_dir);
   }
diff --git a/src/HFO.cpp b/src/HFO.cpp
index 33dc244..04565cb 100644
--- a/src/HFO.cpp
+++ b/src/HFO.cpp
@@ -31,7 +31,6 @@ HFOEnvironment::~HFOEnvironment() {
 
 void HFOEnvironment::connectToServer(feature_set_t feature_set,
                                      std::string config_dir,
-                                     int uniform_number,
                                      int server_port,
                                      std::string server_addr,
                                      std::string team_name,
@@ -40,7 +39,6 @@ void HFOEnvironment::connectToServer(feature_set_t feature_set,
   agent->setFeatureSet(feature_set);
   rcsc::PlayerConfig& config = agent->mutable_config();
   config.setConfigDir(config_dir);
-  config.setPlayerNumber(uniform_number);
   config.setPort(server_port);
   config.setHost(server_addr);
   config.setTeamName(team_name);
@@ -102,6 +100,10 @@ std::string HFOEnvironment::hear() {
   return agent->getHearMsg();
 }
 
+int HFOEnvironment::getUnum() {
+  return agent->getUnum();
+}
+
 Player HFOEnvironment::playerOnBall() {
   return agent->getPlayerOnBall();
 }
diff --git a/src/HFO.hpp b/src/HFO.hpp
index 0b923f4..eff4f3c 100644
--- a/src/HFO.hpp
+++ b/src/HFO.hpp
@@ -21,7 +21,6 @@ class HFOEnvironment {
    *
    * feature_set: High or low level state features
    * config_dir: Config directory. Typically HFO/bin/teams/base/config/
-   * uniform_number: player's uniform number.
    * server_port: port to connect to server on
    * server_addr: address of server
    * team_name: Name of team to join.
@@ -30,7 +29,6 @@ class HFOEnvironment {
    */
   void connectToServer(feature_set_t feature_set=HIGH_LEVEL_FEATURE_SET,
                        std::string config_dir="bin/teams/base/config/formations-dt",
-                       int uniform_number=11,
                        int server_port=6000,
                        std::string server_addr="localhost",
                        std::string team_name="base_left",
@@ -48,6 +46,9 @@ class HFOEnvironment {
   virtual void say(const std::string& message);
   virtual std::string hear();
 
+  // Returns the uniform number of the player
+  virtual int getUnum();
+
   // Get the current player holding the ball
   virtual Player playerOnBall();
 
diff --git a/src/agent.cpp b/src/agent.cpp
index 36bce79..d5608ad 100644
--- a/src/agent.cpp
+++ b/src/agent.cpp
@@ -154,6 +154,10 @@ Agent::~Agent() {
   }
 }
 
+int Agent::getUnum() {
+  return world().self().unum();
+}
+
 bool Agent::initImpl(CmdLineParser & cmd_parser) {
     bool result = PlayerAgent::initImpl(cmd_parser);
 
diff --git a/src/agent.h b/src/agent.h
index 3e7baca..ca7c6a3 100644
--- a/src/agent.h
+++ b/src/agent.h
@@ -60,6 +60,7 @@ protected:
   inline hfo::status_t getGameStatus() { return game_status; }
   inline const hfo::Player& getPlayerOnBall() { return player_on_ball; }
   inline const std::string& getHearMsg() { return hear_msg; }
+  int getUnum(); // Returns the uniform number of the player
 
   inline void setFeatureSet(hfo::feature_set_t fset) { feature_set = fset; }
   inline std::vector<float>* mutable_params() { return &params; }
-- 
2.24.1