I read in the paper that is linked to on the home page that ARGoS has been tested with swarms of as many as 10,000 robots.
Yes, this is correct.
I am interested in running a simulation with 1000 foot-bots (or more if possible) but even as few as 50 robots causes the simulator to lag. Is there a way to configure ARGoS's settings somehow that could enable me to simulate a larger swarm?
Yes, you need to configure ARGoS well.
- You need to use many threads. How many depends on your architecture. Experiment with the value a little bit. There are two ways to schedule threads. The default scheduler works well when the robots are identical and execute identical controllers. There is another scheduler that works best when the robots are different and/or run controllers with different computational costs.
- To improve parallelism, you need to use multiple physics engines, like it's done in the paper. The more you use, the faster ARGoS is. How to divide the arena into multiple physics engines depends on the structure of your arena. The sizes of the physics engines do not need to be identical.
- Another thing that improves performance is optimizing the size of the grids used to check ray intersections and simulate communication. The ideal size is usually given by the size of the bounding box of the most common object in the simulation.
- The visualization is the only problem, because it cannot be parallelized. In my simulations I either avoid using it when I do data collection (like it's done in the paper), or I use the fast-forward button and increase the number on its right, which controls how many frames are skipped for each rendered frame.
- Ultimately, the limiting factor for performance is the robot controller. If that is not optimized, ARGoS won't run fast. I can try and help you through the process of optimizing it.
There is currently no explicit example to do run experiment of this kind, mainly because I had no time to do it. However, I can add a benchmark-like example in which all of these things are explicitly configured, in the style of the other examples. Something like a diffusion_1000 example. Would that suit you?
I made ARGoS.