Moreover, if you prune the decision tree of all branches bar one then all decision algorithms will give the same (correct) answer!
It’s totally OK to add a notion of pruning in, but you can’t really say that your decision algorithm of “CDT with pruning” makes sense unless you can specify which branches ought to be pruned, and which ones should not. Also, outright pruning will often not work; you may only be able to rule out a branch as highly improbable rather than altogether impossible.
In other words, “pruning” as you put it is simply the same thing as “recognizing logical connections” in the sense that So8res used in the above post.
My primary design criterion was to get the maximum number of points possible vs as many opponents as possible, so I’m particularly pleased that CheeseBot gets the highest average score in the first round by quite a large margin.
I wanted to make by bot “unexploitable” in the sense that no bot could ever bring me below the C/C equilibrium of 300 points without hurting its own score in the process. In this regard my bot still wasn’t perfect, but as far as I can see no other bot was able to exploit me in this sense.
If the goal was to maximise IPD performance I would have won outright, but as was noted in the original thread the game we are playing is not a two-player non-zero sum IPD, but rather a much more complicated zero-sum game with many players.
For example, TatForTit defected on the 3rd last turn when playing against me, causing me to lose 5 points at the cost of 2 points. In the IPD this would be a stupid move, but in the tournament setting this is a pretty good deal.
However, this still doesn’t explain everything; if my bot worked correctly, it would’ve defected on the 4th last turn if it anticipated being defected against on the 3rd last turn. I’m not sure why this failed, so I’ll have to look into the CheeseBot vs TatForTitBot matchup in greater detail to work out what was going on there.