Farama-Foundation / MicroRTS

A simple and highly efficient RTS-game-inspired environment for reinforcement learning
GNU General Public License v3.0
283 stars 103 forks source link

Importing Multiple UTTs #94

Closed WitchdoctorBob closed 1 year ago

WitchdoctorBob commented 1 year ago

I am doing some research on optimizing AI engagements using units with asymmetric advantages. For example, Zerg are weaker, less expensive, but faster compared against Protoss who are more expensive but more powerful. How difficult would it be to allow the import of two different UTTs, for each player, with different attribute distributions (through the terminal interface and/or GUI)?

santiontanon commented 1 year ago

Hi! Having different UTTs is a bit tricky, since the UTT is required by the GameState itself to simulate the game forward. But there is an easy solution for this. You can create a new UTT that has two sets of units defined, one for each player. For example, "BASE1" and "BASE2" for the bases of player 1 and player 2 respectively. Then "BASE1" produces "WORKER1", and "BASE2" produces "WORKER2", etc. And, of course, there is not even any need for the UTT to have the same units that the original UTT in microRTS defines, you can create an arbitrary number of unit types for each in your custom UTT. I hope that lets you do what you want to do!

WitchdoctorBob commented 1 year ago

Thanks for the response! That was the direction I started to go. However, I am having trouble tracing through the code to force each player to reference only one part of the UTT. (I'm pretty new to Java.)

WitchdoctorBob commented 1 year ago

I was actually get it mostly running. Thank you for the initial help above.

santiontanon commented 1 year ago

That's awesome! If you run into any troubles, let us know :)