I think you should probably have something that takes into account who you're facing, e.g. by keeping track of supply piles or something. For instance, here's a mirror bot that wins against yours 52% of the time, simply by winning the Great Hall split.
{
name: 'VictoryDance-GH'
requires: ['Masquerade','Pawn','Nobles','Duke','Bridge','Harem','Great Hall','Scout','Ironworks','Upgrade']
author: 'Ephesos'
gainPriority: (state, my) ->
[
"Ironworks" if my.countInDeck("Ironworks") < 3
"Duchy"
"Duke"
"Province"
"Gold"
"Great Hall" if my.countInHand("Ironworks") > 0
"Great Hall" if my.countInDeck("Great Hall") <=4 and state.supply[c["Great Hall"]] == 1
"Silver"
]
}
That's the issue, though, with an optimal strategy: the existence of a counter strategy. Winning the Great Hall split isn't as important against a Bridge engine, or really anything that won't be won by a 2 point swing. But by optimizing the point distribution of your possible cases, you can beat someone even with a lower average score.