Okay, time to explain what I'm doing here. First off, I optimized sort of the straight rush strategy, playing this pretty much like you'd play ironworks/gardens, trying to three pile really quickly and more or less totally ignoring everything that costs 5 or more. I ended up with this bot:
<player name="I/SR WW"
author="WW"
description="No description available">
<type name="UserCreated"/>
<type name="TwoPlayer"/>
<type name="Province"/>
<type name="Bot"/>
<buy name="Estate">
<condition>
<left type="countCardsInSupply" attribute="Estate"/>
<operator type="equalTo" />
<right type="constant" attribute="1.0"/>
</condition>
<condition>
<left type="gainsNeededToEndGame"/>
<operator type="equalTo" />
<right type="constant" attribute="1.0"/>
</condition>
<condition>
<left type="countVP"/>
<operator type="greaterOrEqualThan" />
<right type="countMAXOpponentVP"/>
</condition>
</buy>
<buy name="Ironworks">
<condition>
<left type="countCardsInSupply" attribute="Ironworks"/>
<operator type="equalTo" />
<right type="constant" attribute="1.0"/>
</condition>
<condition>
<left type="gainsNeededToEndGame"/>
<operator type="equalTo" />
<right type="constant" attribute="1.0"/>
</condition>
<condition>
<left type="countVP"/>
<operator type="greaterThan" />
<right type="countMAXOpponentVP"/>
</condition>
</buy>
<buy name="Province"/>
<buy name="Ironworks">
<condition>
<left type="countCardsInHand" attribute="Ironworks"/>
<operator type="greaterThan" />
<right type="constant" attribute="0.0"/>
</condition>
<condition>
<left type="isActionPhase"/>
<operator type="equalTo" />
<right type="constant" attribute="1.0"/>
</condition>
<condition>
<left type="countCardsInSupply" attribute="Silk_Road"/>
<operator type="greaterThan" />
<right type="constant" attribute="0.0"/>
</condition>
</buy>
<buy name="Ironworks">
<condition>
<left type="countCardsInHand" attribute="Ironworks"/>
<operator type="greaterThan" />
<right type="constant" attribute="0.0"/>
</condition>
<condition>
<left type="isActionPhase"/>
<operator type="equalTo" />
<right type="constant" attribute="1.0"/>
</condition>
<condition>
<left type="countCardsInSupply" attribute="Estate"/>
<operator type="greaterThan" />
<right type="constant" attribute="0.0"/>
</condition>
</buy>
<buy name="Ironworks">
<condition>
<left type="countCardsInHand" attribute="Ironworks"/>
<operator type="greaterThan" />
<right type="constant" attribute="0.0"/>
</condition>
<condition>
<left type="isActionPhase"/>
<operator type="equalTo" />
<right type="constant" attribute="1.0"/>
</condition>
<condition>
<left type="countVP"/>
<operator type="greaterThan" />
<right type="countMAXOpponentVP"/>
</condition>
</buy>
<buy name="Ironworks">
<condition>
<left type="countCardsInSupply" attribute="Ironworks"/>
<operator type="greaterThan" />
<right type="constant" attribute="7.0"/>
</condition>
</buy>
<buy name="Silk_Road">
<condition>
<left type="countCardsInDeck" attribute="Ironworks"/>
<operator type="greaterThan" />
<right type="constant" attribute="1.0"/>
</condition>
<condition>
<left type="isActionPhase"/>
<operator type="equalTo" />
<right type="constant" attribute="1.0"/>
</condition>
<condition>
<left type="countAvailableMoney"/>
<operator type="greaterThan" />
<right type="constant" attribute="2.0"/>
</condition>
</buy>
<buy name="Ironworks">
<condition>
<left type="countCardsInSupply" attribute="Ironworks"/>
<operator type="greaterThan" />
<right type="constant" attribute="6.0"/>
</condition>
</buy>
<buy name="Ironworks">
<condition>
<left type="countCardsInSupply" attribute="Ironworks"/>
<operator type="equalTo" />
<right type="constant" attribute="6.0"/>
</condition>
<condition>
<left type="countCardsInDeck" attribute="Ironworks"/>
<operator type="equalTo" />
<right type="constant" attribute="4.0"/>
</condition>
</buy>
<buy name="Ironworks">
<condition>
<left type="countCardsInSupply" attribute="Ironworks"/>
<operator type="equalTo" />
<right type="constant" attribute="5.0"/>
</condition>
<condition>
<left type="countCardsInDeck" attribute="Ironworks"/>
<operator type="equalTo" />
<right type="constant" attribute="5.0"/>
</condition>
<condition>
<left type="countCardsInSupply" attribute="Silk_Road"/>
<operator type="equalTo" />
<right type="constant" attribute="8.0"/>
</condition>
</buy>
<buy name="Silk_Road">
<condition>
<left type="countCardsInDeck" attribute="Ironworks"/>
<operator type="greaterThan" />
<right type="constant" attribute="1.0"/>
</condition>
</buy>
<buy name="Duchy"/>
<buy name="Silver">
<condition>
<left type="countCardsInSupply" attribute="Silk_Road"/>
<operator type="equalTo" />
<right type="constant" attribute="0.0"/>
</condition>
<condition>
<left type="isActionPhase"/>
<operator type="equalTo" />
<right type="constant" attribute="1.0"/>
</condition>
<condition>
<left type="countAvailableMoney"/>
<operator type="equalTo" />
<right type="constant" attribute="7.0"/>
</condition>
</buy>
<buy name="Estate">
<condition>
<left type="gainsNeededToEndGame"/>
<operator type="smallerThan" />
<right type="constant" attribute="8.0"/>
</condition>
<condition>
<left type="countCardsInSupply" attribute="Province"/>
<operator type="equalTo" />
<right type="constant" attribute="8.0"/>
</condition>
</buy>
<buy name="Estate">
<condition>
<left type="countCardsInSupply" attribute="Silk_Road"/>
<operator type="smallerThan" />
<right type="constant" attribute="4.0"/>
</condition>
</buy>
<buy name="Estate">
<condition>
<left type="gainsNeededToEndGame"/>
<operator type="smallerThan" />
<right type="constant" attribute="7.0"/>
</condition>
</buy>
<buy name="Ironworks">
<condition>
<left type="countCardsInSupply" attribute="Silk_Road"/>
<operator type="greaterThan" />
<right type="constant" attribute="0.0"/>
</condition>
</buy>
<buy name="Ironworks">
<condition>
<left type="countCardsInSupply" attribute="Estate"/>
<operator type="greaterThan" />
<right type="constant" attribute="0.0"/>
</condition>
</buy>
<buy name="Ironworks">
<condition>
<left type="countVP"/>
<operator type="greaterThan" />
<right type="countMAXOpponentVP"/>
</condition>
</buy>
<buy name="Silk_Road"/>
<buy name="Silver"/>
<buy name="Estate">
<condition>
<left type="countCardsInSupply" attribute="Silk_Road"/>
<operator type="smallerThan" />
<right type="constant" attribute="6.0"/>
</condition>
</buy>
<buy name="Copper"/>
</player>
....which is pretty strong in its own right. Then I had the idea that going a little harder for duchies, especially if behind on the rush, made sense, which led to this:
<player name="I/SR/Duchy WW"
author="WW"
description="No description available">
<type name="UserCreated"/>
<type name="TwoPlayer"/>
<type name="Province"/>
<type name="Bot"/>
<buy name="Estate">
<condition>
<left type="countCardsInSupply" attribute="Estate"/>
<operator type="equalTo" />
<right type="constant" attribute="1.0"/>
</condition>
<condition>
<left type="gainsNeededToEndGame"/>
<operator type="equalTo" />
<right type="constant" attribute="1.0"/>
</condition>
<condition>
<left type="countVP"/>
<operator type="greaterOrEqualThan" />
<right type="countMAXOpponentVP"/>
</condition>
</buy>
<buy name="Ironworks">
<condition>
<left type="countCardsInSupply" attribute="Ironworks"/>
<operator type="equalTo" />
<right type="constant" attribute="1.0"/>
</condition>
<condition>
<left type="gainsNeededToEndGame"/>
<operator type="equalTo" />
<right type="constant" attribute="1.0"/>
</condition>
<condition>
<left type="countVP"/>
<operator type="greaterThan" />
<right type="countMAXOpponentVP"/>
</condition>
</buy>
<buy name="Province"/>
<buy name="Ironworks">
<condition>
<left type="countCardsInHand" attribute="Ironworks"/>
<operator type="greaterThan" />
<right type="constant" attribute="0.0"/>
</condition>
<condition>
<left type="isActionPhase"/>
<operator type="equalTo" />
<right type="constant" attribute="1.0"/>
</condition>
<condition>
<left type="countCardsInSupply" attribute="Silk_Road"/>
<operator type="greaterThan" />
<right type="constant" attribute="0.0"/>
</condition>
</buy>
<buy name="Ironworks">
<condition>
<left type="countCardsInHand" attribute="Ironworks"/>
<operator type="greaterThan" />
<right type="constant" attribute="0.0"/>
</condition>
<condition>
<left type="isActionPhase"/>
<operator type="equalTo" />
<right type="constant" attribute="1.0"/>
</condition>
<condition>
<left type="countCardsInSupply" attribute="Estate"/>
<operator type="greaterThan" />
<right type="constant" attribute="0.0"/>
</condition>
</buy>
<buy name="Ironworks">
<condition>
<left type="countCardsInHand" attribute="Ironworks"/>
<operator type="greaterThan" />
<right type="constant" attribute="0.0"/>
</condition>
<condition>
<left type="isActionPhase"/>
<operator type="equalTo" />
<right type="constant" attribute="1.0"/>
</condition>
<condition>
<left type="countVP"/>
<operator type="greaterThan" />
<right type="countMAXOpponentVP"/>
</condition>
</buy>
<buy name="Ironworks">
<condition>
<left type="countCardsInSupply" attribute="Ironworks"/>
<operator type="greaterThan" />
<right type="constant" attribute="7.0"/>
</condition>
</buy>
<buy name="Silk_Road">
<condition>
<left type="countCardsInDeck" attribute="Ironworks"/>
<operator type="greaterThan" />
<right type="constant" attribute="1.0"/>
</condition>
<condition>
<left type="isActionPhase"/>
<operator type="equalTo" />
<right type="constant" attribute="1.0"/>
</condition>
<condition>
<left type="countAvailableMoney"/>
<operator type="greaterThan" />
<right type="constant" attribute="2.0"/>
</condition>
</buy>
<buy name="Ironworks">
<condition>
<left type="countCardsInSupply" attribute="Ironworks"/>
<operator type="equalTo" />
<right type="constant" attribute="7.0"/>
</condition>
<condition>
<left type="countCardsInDeck" attribute="Ironworks"/>
<operator type="equalTo" />
<right type="constant" attribute="3.0"/>
</condition>
</buy>
<buy name="Ironworks">
<condition>
<left type="countCardsInSupply" attribute="Ironworks"/>
<operator type="equalTo" />
<right type="constant" attribute="6.0"/>
</condition>
<condition>
<left type="countCardsInDeck" attribute="Ironworks"/>
<operator type="equalTo" />
<right type="constant" attribute="4.0"/>
</condition>
<condition>
<left type="countCardsInSupply" attribute="Silk_Road"/>
<operator type="equalTo" />
<right type="constant" attribute="8.0"/>
</condition>
</buy>
<buy name="Silk_Road">
<condition>
<left type="countCardsInDeck" attribute="Ironworks"/>
<operator type="greaterThan" />
<right type="constant" attribute="1.0"/>
</condition>
</buy>
<buy name="Duchy"/>
<buy name="Silver">
<condition>
<left type="countCardsInSupply" attribute="Silk_Road"/>
<operator type="equalTo" />
<right type="constant" attribute="0.0"/>
</condition>
<condition>
<left type="isActionPhase"/>
<operator type="equalTo" />
<right type="constant" attribute="1.0"/>
</condition>
<condition>
<left type="countAvailableMoney"/>
<operator type="equalTo" />
<right type="constant" attribute="7.0"/>
</condition>
</buy>
<buy name="Silver">
<condition>
<left type="countCardsInSupply" attribute="Silk_Road"/>
<operator type="equalTo" />
<right type="constant" attribute="0.0"/>
</condition>
<condition>
<left type="isActionPhase"/>
<operator type="equalTo" />
<right type="constant" attribute="1.0"/>
</condition>
<condition>
<left type="countAvailableMoney"/>
<operator type="equalTo" />
<right type="constant" attribute="4.0"/>
</condition>
</buy>
<buy name="Estate">
<condition>
<left type="gainsNeededToEndGame"/>
<operator type="smallerThan" />
<right type="constant" attribute="4.0"/>
</condition>
</buy>
<buy name="Estate">
<condition>
<left type="gainsNeededToEndGame"/>
<operator type="smallerThan" />
<right type="constant" attribute="7.0"/>
</condition>
<condition>
<left type="countVP"/>
<operator type="greaterThan" />
<right type="countMAXOpponentVP"/>
<extra_operation type="minus" attribute="2.0" />
</condition>
</buy>
<buy name="Ironworks">
<condition>
<left type="countCardsInSupply" attribute="Silk_Road"/>
<operator type="greaterThan" />
<right type="constant" attribute="0.0"/>
</condition>
</buy>
<buy name="Ironworks">
<condition>
<left type="countVP"/>
<operator type="greaterThan" />
<right type="countMAXOpponentVP"/>
</condition>
</buy>
<buy name="Silk_Road"/>
<buy name="Estate">
<condition>
<left type="countCardTypeInDeck" attribute="Victory"/>
<operator type="equalTo" />
<right type="constant" attribute="11.0"/>
</condition>
</buy>
<buy name="Estate">
<condition>
<left type="countCardTypeInDeck" attribute="Victory"/>
<operator type="equalTo" />
<right type="constant" attribute="15.0"/>
</condition>
</buy>
<buy name="Estate">
<condition>
<left type="countCardTypeInDeck" attribute="Victory"/>
<operator type="equalTo" />
<right type="constant" attribute="19.0"/>
</condition>
</buy>
<buy name="Estate">
<condition>
<left type="countCardsInDeck" attribute="Duchy"/>
<operator type="greaterThan" />
<right type="constant" attribute="1.0"/>
</condition>
</buy>
<buy name="Silver"/>
<buy name="Estate">
<condition>
<left type="countCardsInSupply" attribute="Silk_Road"/>
<operator type="smallerThan" />
<right type="constant" attribute="6.0"/>
</condition>
</buy>
<buy name="Copper"/>
</player>
And then I started moving that duchy buy earlier and earlier because I figure I'm probably getting the silk roads eventually anyway off of ironworks, and it's harder to pull in the duchies later, in general, than it is the silk roads, because your money density goes down.
But okay, that's the process, what about the bot itself? The first few conditions are just to get the thing to end in a win instantly if possible. Then always buy a province, pretty normal stuff. Well, ok, here's where it gets interesting. There are lots of conditions fairly high to grab ironworks with ironworks if it's still the action phase and you have more ironworks in hand, because hey, those extra ironworks are nice and often important for three-piling, and otherwise the extra ironworks in your hand end up being useless. Okay, then there's the question of when to start grabbing silk roads over ironworks. I want at least a couple ironworks in my deck, and then a little more than that if my opponent isn't going to be racing me. How do I know if that's the case or not? There are a lot of conditions I threw in mostly based on the number of ironworks in my deck and the overall stack in general. If they add to ten (you can't do this in the sim, so I put in every plausible combination manually, part of why this looks so long), my opponent isn't racing me. If they don't, they probably are. Well, I should have had some similar conditions for silk road as well, probably more, but for whatever reason that's not what I went with.
What else? Well, the other important thing was to stop rushing the piles out, particularly the ironworks, and somewhat to a lesser extent the estates, if I'm behind. If that's the case, I need to slam on the brakes and build an economy to go after duchies. And definitely don't pile the game out if that leads to a loss. Well, I'm not sure how the sim handles that on gains by itself, because unless you have a very sophisticated (well, somewhat obnoxious really for a program, though it's not so hard for a human to see) set of rules there, it's going to make me misplay some stuff. Oh yeah, and ironworks a silver if that's going to grab you a duchy or province and the silk roads are out. Because grabbing an estate is a huge gamble as to whether you draw a treasure, and the silver is a guaranteed $1 (and a better deck later on); it would be better of course if . Um, I think that's about it, actually.
I tested my decks against:
Each other
Mint/FG
Tactician/Vault
Bridge/City
Hunting Party/Baron
The Golden Deck
NV/Bridge
Ironworks/Gardens
And a few other things that turned out to be pretty terrible.