Certainly there are nuances, and the ultimate player would incorporate many variables. But by FAR the most important consideration when buying money vs green has got be "How many more times do I expect to see this card?"
The gold vs province decision here affects the first green card you buy. It's based on future spending and it comes down to "How many more times will I draw this card I'm buying?". I'd hazard a guess that the previous condition, total treasure in deck > 18, is a slightly inaccurate tally of 6 turns buying silver/gold.
Precisely. Total treasure in deck > 18 means either 6 silvers or 3 silvers and 2 golds. Therefore to get a province on turn 6 by this criterion, you'd have to not only buy gold on turn 3 or 4, but also buy gold on turn 5, and THEN draw $8 for a province on turn 6. That would almost never happen. On the flip side, it's almost trivial that you will have bought at least $12 in money by turn 7 on a 4/3 split. So it turns out that "More than $18" is almost identical to "Wait until turn 7".
The interesting thing to look at is the VP per turn graphs for BMU vs BMU(turns)
They are very different so probably the cause of the improvement?
See, this is a really good idea. If you look at the VP graphs for these strategies, you see that the two strategies are, as discussed above, basically identical until after the turn 9 reshuffle. Any noticeable differences can only be due to behavior starting at turns 10-11-12. At this point, the threshold strategy VP graph slopes upward hard on turns 10-11-12, while the turns strategy is obviously about consistent on turns 10-11-12. I think it is dubious that you could get significant information on turns 10 or 11 that would strongly affect your decision on turn 12, UNLESS you see the province stack start to empty.
So maybe the turns bot needs to be fixed to green harder when the province pile depletes. Here's a bot that consistently beats the optimized threshold bot by a small margin and is far easier to understand. It was winning even before I added PPR. It should probably play 5/2 starts differently than it does.
<player name="Big Money Turns (with Endgame and PPR)"
author="Cheese"
description="A Big Money strategy that uses the turn number to dictate buys. It also adjusts for when a game is nearly over.">
<type name="Province"/>
<type name="TwoPlayer"/>
<type name="BigMoney"/>
<type name="SingleCard"/>
<type name="Optimized"/>
<type name="UserCreated"/>
<type name="Bot"/>
<buy name="Province">
<condition>
<left type="countTurns"/>
<operator type="greaterThan" />
<right type="constant" attribute="6.0"/>
</condition>
<condition>
<left type="countCardsInSupply" attribute="Province"/>
<operator type="greaterThan" />
<right type="constant" attribute="2.0"/>
</condition>
</buy>
<buy name="Province">
<condition>
<left type="countCardsInSupply" attribute="Province"/>
<operator type="equalTo" />
<right type="constant" attribute="1.0"/>
</condition>
<condition>
<left type="countVP"/>
<operator type="greaterOrEqualThan" />
<right type="countMAXOpponentVP"/>
<extra_operation type="minus" attribute="6.0" />
</condition>
</buy>
<buy name="Province">
<condition>
<left type="countCardsInSupply" attribute="Province"/>
<operator type="equalTo" />
<right type="constant" attribute="2.0"/>
</condition>
<condition>
<left type="countVP"/>
<operator type="greaterOrEqualThan" />
<right type="countMAXOpponentVP"/>
</condition>
</buy>
<buy name="Province">
<condition>
<left type="countCardsInSupply" attribute="Province"/>
<operator type="equalTo" />
<right type="constant" attribute="2.0"/>
</condition>
<condition>
<left type="countVP"/>
<operator type="smallerOrEqualThan" />
<right type="countMAXOpponentVP"/>
<extra_operation type="minus" attribute="3.0" />
</condition>
</buy>
<buy name="Duchy">
<condition>
<left type="countCardsInSupply" attribute="Province"/>
<operator type="smallerOrEqualThan" />
<right type="constant" attribute="3.0"/>
</condition>
</buy>
<buy name="Duchy">
<condition>
<left type="countTurns"/>
<operator type="greaterThan" />
<right type="constant" attribute="12.0"/>
</condition>
</buy>
<buy name="Estate">
<condition>
<left type="countCardsInSupply" attribute="Province"/>
<operator type="smallerOrEqualThan" />
<right type="constant" attribute="2.0"/>
</condition>
</buy>
<buy name="Estate">
<condition>
<left type="countTurns"/>
<operator type="greaterThan" />
<right type="constant" attribute="12.0"/>
</condition>
</buy>
<buy name="Gold"/>
<buy name="Duchy">
<condition>
<left type="countTurns"/>
<operator type="greaterThan" />
<right type="constant" attribute="9.0"/>
</condition>
</buy>
<buy name="Silver"/>
</player>
Turns is probably the best basic indicator of "How many times do I expect to see this card?" But, the other two main factors would be the economies of your deck AND that of your opponent. It would be interesting to something working on all three, or at least an economy-based bot that considered both your economy and your opponent's...