Soak Overflow - Summer Challenge 2025 - Puzzle discussion

Coding Games and Programming Challenges to Code Better

Send your feedback or ask for help here!

Hello, I’m trying to continue my work and reach the Legend league after the contest. I think I’m close, 60th Gold. I’m using GA, I did my best to check if the simulation and the search work properly and it seems so. I’m able to simulate around 6000 state per turn. I believe that the problem is hidden in my evaluation function:

for each player:
    score = current_game_score
    negativeWetness, negativeDistToClosestOpponents, aliveAgents, bombs = 0
    for each agent:
        negativeWetness -= agent.wetness
        negativeDistToClosestOpponents -= disToClosestEnemyAgent(agent)
        aliveAgents += 1
        bombs += agent.bombs

   player.evaluation = 
       (20.f * score) +
       (10.f * negativeWetness) +
       (5.f * negativeDistToClosestOpponents)
       (100.f * aliveAgents) +
       (50.f * bombsCount)

   if player.gameWinner:
       player.evaluation += 10000
   else if player.lost:
       player.evaluation -= 10000

return players[myIdx].evaluation - players[1 - myIdx].evaluation

Reading the Post Mortems I think similar approaches (for the evaluation) were used by @aangairbender and @peerdb

I’ve tried a ton of things change the weights, eliminating terms, adding terms, … But my bot keeps playing worse and worse than mine final submission for the contest (which evaluated only with score + negWetness). Could someone give me an advice what I’m doing wrong?

Summer Challenge 2025 - Post Mortem

How do you handle if an agent dies (wetness goes over 100), do you remove it from the agents list?
Giving bombs a value of 50, wont it almost never throw them then?
Why give negative value to close opponents? I can understand giving negative value if they can shoot you but not vice versa, but this seems like it would be very defensive.
This is just me, but I do use the controlzones (score) in my evaluation, but I multiply it by like 0.3 or so because doing damage to opponents was way more important than temporary area control

How do you handle if an agent dies

I keep the wetness of all agents, so the destroyed ones will contribute their wetness (above 100) also.

Giving bombs a value of 50, wont it almost never throw them then?

I also thought so, but if I do not give them big weight, the count of bombs won’t contribute much, bombs count is in the range [2, “15”] the score is something like [0, “1500”] so I multiply the bombs count so it does not get “lost” after added to the score value. Am I wrong?

Why give negative value to close opponents?

After reading the feedback of the participants I understood that most of them are “punishing” the evaluation if an agent is too far from the closest opponent and I thought that subtracting the distances (to the closest agent) for all agents makes sense.

I give bombs like 20 or 25 value so having a guaranteed hit on an opponent will be better than keeping the bomb in my inventory.

I genuinely wouldn’t give that much value to the score. Winning the battle by keeping your agents alive and attacking the enemy smartly is much more important than the map control.

2 Likes