Frequently Asked Questions

What operating systems does FinalBot support?

FinalBot is not dependent on any particular operating system. Instead, we rely on the Common Language Infrastructure (CLI), which has tools and platforms available on most modern operating systems, such as Windows (.NET) and Linux, UNIX, and Mac (Mono). Please see our Links page for places to download the platform and tools for your operating system.

What programming languages can I use?

You can use any programming language that can compile a CLI assembly. Your compiled assembly must also reference the required assemblies and expose the required types. For example, for the Hold 'Em competition, you need to be able to reference FinalBot.HoldEm.Common to derive a class from BotBase, which must be publicly exposed so that the competition engine can automate it. There are many languages that support this, such as C#, Visual Basic, C++, F#, and Java (using J#). There is no restriction as to what language you can use, although it can't require anything beyond a vanilla .NET Framework 4.0 install to run or any special security privileges beyond the Execution privilege itself.

What are the security limitations for bots?

Each bot is run in its own AppDomain with only the "Execution" privilege. The .NET test client app provided with each competition's SDK will load and run your bot in a fashion consistent with the production competition environment, so if your app throws security exceptions in testing then it'll definitely throw the same exceptions during tournaments. Note that at this time the Mono test client loads bots with the same security privileges as the main application, so be careful not to use bots you don't trust. In addition to the limited execution privileges, each competition has the following resource security rules:

  1. Its own execution quota, which defines how many total seconds of execution your bot is allowed per matchup. This limit is primarily intended to cut off bots that run too long, such as if they get stuck in an infinite loop.
  2. Its own memory allocation limit, which defines how much total memory your bot can allocate over the course of a competition. This is intended to head off bots that try to allocate so much memory that they impact the performance of other bots or the competition engine.
  3. Its own "off-turn tolerance" which defines how much CPU your bot can use when it's not your turn. Your bot should never be designed to execute when it's not your turn, but each competition will allow for a certain amount of tolerance to account for unavoidable CPU usage by the underlying AppDomain infrastructure.

Bots that violate the resource security rules will be immediately eliminated and have their AppDomains unloaded. Bots that throw unhandled exceptions, such as SecurityExceptions, will be dealt with by each competition individually.

Can I reference external assemblies?

You can reference any assembly that's available under a vanilla .NET Framework 4.0 install. However, the security sandbox applies, so be careful about the functionality you invoke. At this time you may not dynamically reference 3rd party assemblies since they cannot be loaded at runtime. However, you may statically reference other code, provided it can run within the security sandbox.

Can I submit supporting files or assemblies along with my bot assembly?

Not at this time. We are interested in scenarios where competitors would want to have multiple files (such as using 3rd party support assemblies or data files for neural network initialization, etc) so if this is something you'd really like, please let us know in the General forum.