--
You received this message because you are subscribed to the Google Groups "robocode" group.
To unsubscribe from this group and stop receiving emails from it, send an email to robocode+u...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/robocode/9523d0e6-7a3f-41ee-bc5c-5bde98cbfd97n%40googlegroups.com.
Do I see it well that it took 3000 rounds to learn to lock the gun on the enemy ?
How much of that is done by you in feature selection ?
What's coming next ?
--
You received this message because you are subscribed to the Google Groups "robocode" group.
To unsubscribe from this group and stop receiving emails from it, send an email to robocode+u...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/robocode/b4bc3fb7-d97b-4d30-9ba5-c9930f1146a6n%40googlegroups.com.
Re feature selection, I would be interested to see if you could also learn the "Has bearing on opponent" and "Square root of degree deviation from gun to opponent" functions.
I think that it would be even more interesting when you let it aim at moving target. For example, If it could extrapolate where the enemy would be at the time when the bullet arrives.
Regarding collaboration, I would be willing to collaborate on making remote robot API as a canonical part of Robocode.Because network latency is a significant issue here, there needs to be an API which is not chatty. It needs to have one call per turn only.
1) Somewhat similar to OpenAI gym conceptually.reset() -> observationsstep(actions) -> observations, rewards
2) Also figure out how to make it possible for such robots to enter competition.- Adding a new competition category, with different robot turn timeouts.- Solve how to host such remote robots.
I think that we would like to enable a wide technological landscape for remote robot authors (like Python).
Therefore we could not expect that the robot would be hosted by the community, which is running the competition on compute they donated.
I'm considering inverted server/client roles. We would let the robocode engine be the client of the robot's server.
So I imagine that the Java "robot" would only configure the Robocode engine with a URL of the robot's API.
The API the robot would have to implement would look like:reset(observations) -> actionsturn(observations, rewards) -> actionsroundEnd(rewards)What do you think ?
Would it be possible/interesting to create such 1) API and contribute it to OpenAI gym as a new environment ?
How difficult it would be to run RL with the inverted 2) API shape ?
In my first attempt to integrate Robocode with my RL server, I tried to implement a REST API for the RL server. In this setup, the robot made REST/PUT requests to send game state to the RL server and retrieve actions to execute. It was possible to do this in a single REST/PUT command; but it was too slow (REST overhead).
By design, the Robocode robot does not send a reward value to the RL server. This allows the RL server to specify its own reward function. The reward function is a fundamental (and interesting) aspect of RL agent design, and I wanted to provide full flexibility to the RL agent designer.
I'm not so sure. Perhaps I'm missing something specific to Robocode, but it seems like the community might be able to host their own remote Robot implementations (i.e., servers as I've described above).
In my first attempt to integrate Robocode with my RL server, I tried to implement a REST API for the RL server. In this setup, the robot made REST/PUT requests to send game state to the RL server and retrieve actions to execute. It was possible to do this in a single REST/PUT command; but it was too slow (REST overhead).Interesting, I would not think that REST would make enough difference.
We already have internal/custom binary protocol for that:actions == ExecCommandsobservations == ExecResultsI implemented it years ago when I wanted to run a .NET robot and I did some in-process IPC.Is that good enough or we should prefer something more formal ?
By design, the Robocode robot does not send a reward value to the RL server. This allows the RL server to specify its own reward function. The reward function is a fundamental (and interesting) aspect of RL agent design, and I wanted to provide full flexibility to the RL agent designer.Definitely your RL needs to re-model the rewards. I'm just talking about Robocode's natural score. It evolves with each turn.Maybe that's philosophically part of RL `observations` ?
I'm not so sure. Perhaps I'm missing something specific to Robocode, but it seems like the community might be able to host their own remote Robot implementations (i.e., servers as I've described above).Unless every author with the remote robot is willing to provide docker image, sharing my-robot-how-to-host-it on diverse platforms would not fly.That's why I'm suggesting that any robot author who wants to have his robot in the competition would have his server open and available to incoming battles all the time. On authors own servers.