Dominion Strategy Forum

Dominion => Simulation => Topic started by: Geronimoo on August 03, 2012, 03:37:58 am

Title: [COMPLETE] Geronimoo's challenges - First Game
Post by: Geronimoo on August 03, 2012, 03:37:58 am
Challenge - Aim for the highest win rate against the built in Smithy bot. Use the board of the "First Game" kingdom as described in the rules book and my latest article (http://dominionstrategy.com/2012/07/30/building-the-first-game-engine/):

Cellar, Market, Militia, Mine, Moat, Remodel, Smithy, Village, Woodcutter, Workshop

One entry with the bot (as a personal message) only per person, deadline friday 8/31.

The winner will get an extra paragraph in the article and be included in the downloadable xml (http://users.telenet.be/jeroenaga/bots/Village%20Smithy%20engines.xml) (so explain how you did it).
Title: Re: Geronimoo's challenges - First Game
Post by: Qvist on August 03, 2012, 04:55:03 am
I like this challange. Great idea. Let's see what I can do.
Title: Re: Geronimoo's challenges - First Game
Post by: michaeljb on August 07, 2012, 11:46:43 pm
I was doing so well working on this, and then the Dark Ages previews started...
Title: Re: Geronimoo's challenges - First Game
Post by: Geronimoo on August 16, 2012, 05:02:06 am
Due to the release of Dark Ages and Funsockets I'll move the deadline 2 weeks, so you have some more time to work on this. I only received one entry so far, but it's a very strong one.
Title: Re: Geronimoo's challenges - First Game
Post by: DStu on August 16, 2012, 05:13:56 am
Due to the release of Dark Ages and Funsockets I'll move the deadline 2 weeks, so you have some more time to work on this. I only received one entry so far, but it's a very strong one.

I only have a little variation of your bot, which is also about as strong, so if I don't find anything better, I won't submit anything. Which does not mean I was not interested.
Title: Re: Geronimoo's challenges - First Game
Post by: DG on August 16, 2012, 07:08:25 am
I've been messing about in the Goko Beta so far, I might now find some time to look at this.
Title: Re: Geronimoo's challenges - First Game
Post by: Geronimoo on August 30, 2012, 04:40:20 am
Just a little reminder: only 1 day left.
Title: Re: Geronimoo's challenges - First Game
Post by: TLV on August 30, 2012, 02:34:52 pm
I just sent my entry. Limited remodel control makes it really hard!

I noticed that my bot still dominated when playing against 2 smithies in 3p, but was too slow to beat 3 for 4p. I wonder if a Smithy-beating strategy is even possible for 4p on this board.
Title: Re: Geronimoo's challenges - First Game
Post by: michaeljb on August 30, 2012, 05:29:52 pm
I just sent my entry. Limited remodel control makes it really hard!

I noticed that my bot still dominated when playing against 2 smithies in 3p, but was too slow to beat 3 for 4p. I wonder if a Smithy-beating strategy is even possible for 4p on this board.

(http://cdn.memegenerator.net/instances/400x/24149872.jpg)

It is indeed possible!

Hadn't tried mine in multiplayer until I read your post (welcome to the forum by the way!  :) ), but a few quick sims indicates my version gets over 30% against 3 Smithy bots (which get around 20% each).
Title: Re: Geronimoo's challenges - First Game
Post by: Geronimoo on September 04, 2012, 11:22:29 am
Results!!

In third place we find master engine builder DG with 73%-24% win rate vs Smithy. His fairly simple bot opens Remodel/Village or Mine/Cellar. Remodel the estates into a smithy/village drawing deck, supplemented by moats, and then buy a market, golds, provinces. Remodel aggressively turns gold into provinces so he used 3 golds as a starting point. Without a mine add a militia after the drawing chain is established.

In second place there's a newcomer: TLV with 76%-22% vs Smithy. His bot is very similar to DG's, but he doesn't use Mine and added some PPR rules for increased performance. Well done!

But in first place, head and shoulders over the rest of the competition, we find michaeljb!! His very elaborate bot manages to crush the poor Smithy by 89%-9%!!!! That's huge. His bot is huge as well, so I'll let him explain how he did it.

You can find the three bots in the attachment which can be loaded into the simulator
Title: Re: [COMPLETE] Geronimoo's challenges - First Game
Post by: michaeljb on September 04, 2012, 11:45:53 am
I'll post the description when I'm home from work/class tonight. I think the key thing to know is that it's a very good thing this happened before my fall classes started  ;D
Title: Re: [COMPLETE] Geronimoo's challenges - First Game
Post by: TLV on September 04, 2012, 04:37:00 pm
Very impressive, michaeljb! I wanted to incorporate workshop and mine, but every time I tried the win rate dropped to the low 60s. I can guess what most of the buy conditions are for from the XML (manipulating workshop to gain smithy over village when you'll only have 3 coins to buy with that turn? Neat! Although I notice that the case where you only have a Gold in hand is missing the countAvailableMoney clause that the others have).
Title: Re: [COMPLETE] Geronimoo's challenges - First Game
Post by: michaeljb on September 04, 2012, 05:24:52 pm
(have a bit of time before class right now, so I can comment on this real quick)

manipulating workshop to gain smithy over village when you'll only have 3 coins to buy with that turn? Neat!

Thanks! Worked hard to get this part to work. Basically the core idea of that was, if you are in a situation where you are simply alternating Village/Smithy, you have a Workshop in hand and you'll have $3 in the buy phase, as a human player you're smart enough to Workshop for Smithy and buy Village every time. But if Village is next up in your alternating sequence, the simulator doesn't really look ahead to the buy phase to see it will get Village anyway, so it ends up getting 2 Villages.

The result was this awkward looking mess of a bunch of consecutive Smithy rules that are very similar to each other, and only actually used when playing Workshop or Remodeling an Estate. One of the reasons my bot runs so slowly.

Although I notice that the case where you only have a Gold in hand is missing the countAvailableMoney clause that the others have.

And evidently I didn't even get them all right! I believe that is a mistake, not intentional. Nice catch :)

One thing that surprised me about the process of working on this was that at a certain point, it became much quicker to just edit the xml directly, rather than using the GUI of the simulator. Easier to quickly test against small changes to answer silly questions like "should I start buying Duchies when I'm down by 19, 20, or 21?" (made sillier by the fact that variations between each particular value--once you're 'close enough' anyway-- is probably statistical noise rather than 20 actually being a noticeably better answer than 19)
Title: Re: [COMPLETE] Geronimoo's challenges - First Game
Post by: michaeljb on September 04, 2012, 09:38:17 pm
tl;dr: use Mine to improve Treasures rather than buying Treasures, use Remodel and Workshop to pick up engine pieces, wait until you have a few Smithies to get a Militia, pick up Villages early and often, sprinkle in some Markets, and grab up to 3 Cellars.

Quote from: Geronimoo
I expect an expert human player will be able to get at least an 80% win rate against the big money strategy.
This quote from the article was my motivation, at least for the first part of the process. When I reached the 80% goal, I had actually jumped from 79% to about 82% if I recall correctly, and felt I still had room for improvement. My next goal was 85%, then 87%, then 89%...and I could only just reach that. I really wanted to get up to 90%, but ran out of ideas for how to improve the bot. I took comfort in the fact that Smithy's win rate was less than 10%--not losing 90% of the time is close enough to winning 90% of the time, right? ;D

Anyway, basically I just spent a whole lot of time on this in a pretty repetitve process: run the simulation, check the sample logs for behavior that can be improved (especially in the games where the bot lost), try something to improve it, repeat. I was surprised that eventually, just directly editing the xml became quicker than editing the bot through the GUI.

Anyway, enough about how I made the bot, onto what the bot actually does.


The Opening

5/2
Open Mine/Cellar. Getting a Remodel is the highest priority, then a single Village, then a Workshop.

4/3
Open Remodel/Workshop. Buy one Market, then a Mine.

Building the Engine

The main idea of the deck is a Village/Smithy engine, but quite a few terminal actions that aren't Smithy are also used (Mine, Remodel, Workshop, and Militia). To make this work, whenever there are two more terminals in the deck than Villages, prioritize Village.
Use Mine to improve money; the only Treasure that is actually bought is a single Gold(actually not quite true, there are a couple rules down at the end), but only after at least one Market is bought, and only if there are no Golds in the deck. (so if Mine improves a Copper into Silver and that Silver into Gold, no Gold will be bought)
A Militia is picked up after the third Smithy. I think the key here was just that the sooner the deck can draw itself, the better. At this point, the deck is being drawn consistently enough that Militia will be played just about every turn.

The final bot in Geronimoo's article included a special rule for the case of having exaclty $7 and 2 buys: buy a Village here, then you'll have enough left for another engine part. Since the goal is a big draw engine, this is a better move than Market/Cellar. I included this rule, and also added a similar rule for $6 and 2 buys. The $6 rule is a bit more complicated: basically if there is at least one Smithy in the deck, and there is one more terminal in the deck than Villages, then use $6 and 2 buys to buy 2 Villages, rather than a Gold or a Market.

Buy 2 Smithies.
Buy up to 5 Markets.

If there is one more terminal in the deck than Villages, buy a Village.

Buy up to 6 Smithies.

Buy Market.

Buy up to 9 Villages. (avoiding the pile out reduced 3-pile endings and was a small boost)

Buy a Cellar.
Buy a second one if you have at least one Smithy. (if you have bad draws early on, don't want to get bogged down with too many Cellars. The simulator doesn't play Cellar so great, so it's more likely to overplay it and end up with a small, useless hand than a human player would be.)
Buy a third one if there are at least 4 Victory cards in the deck.

Once Remodel has turned those pesky Estates into wonderful engine pieces, it will start trashing Treasures; it will turn Golds into Provinces, and Silvers into Duchies or Markets. This can cause your deck to have a bit of an income problem, so Silver will be bought if there are fewer than 7 Treasures in the deck, and Copper will be bought with fewer than 5 Treasures in the deck.


Greening

As Geronimoo pointed out, my bot wins 89% of the time against Smithy+BM. I tried and tried to hit 90% but just couldn't make it; I suspect if it's possible, it will be done by improving this section.

With all this fancy-pants engine building happening, Smithy+BM getting good draws can begin to build up quite a lead. If the bot is down by at least 20 points, Duchy becomes top priority. (buying Provinces before closing the gap some will just bring the game closer to the end in a victory for the Smithy+BM player)

The PPR is present in its most basic form: with 2 Provinces left in the supply and tied with or losing to the opponent, buy Duchy over Province. It was actually pretty amusing when I remembered to include this; I had spent quite a bit of time working on other, less helpful parts when it suddenly came to me. It added an immediate boost--can't remember how great it was at the time, but I think it was around 3%, might have been more.

The bot buys its first Province once it has at least 5 Smithies, and at least $14 to spend and two buys--so it won't green until it can buy a Province and something useful for the engine--or of course a second Province. Once a Province is in the deck, there are no other restrictions on Provinces.

After the way behind rule and PPR, here is a pretty standard Duchy rule: if there is at least one Province in the deck and 5 or fewer in the supply, buy Province.

Duchy had an unusual buy rule, so why not Estate too? When there are more than 2 Provinces in the supply, and the deck has reached its maximum goal of six Smithies, and there is at least one Cellar in the deck, buy an Estate.

Buy Estate if there are 2 or fewer Provinces in the supply.
Title: Re: [COMPLETE] Geronimoo's challenges - First Game
Post by: michaeljb on September 05, 2012, 10:46:41 am
Oh yeah: also there are a few Cellar rules near the bottom, I noticed the bot was doing stuff like Remodeling Copper into Cellar when it could have instead played Militia or Workshop, and ended up with something better. This is also why (almost?) all of the rules have conditions checking whether it's in the Action phase or not.
Title: Re: [COMPLETE] Geronimoo's challenges - First Game
Post by: Geronimoo on September 11, 2012, 07:16:40 am
I updated the article to include this challenge.

http://dominionstrategy.com/2012/07/30/building-the-first-game-engine/
Title: Re: [COMPLETE] Geronimoo's challenges - First Game
Post by: loppo on September 11, 2012, 09:25:36 am
is there a chance, we could get the graph Average Victory points gained/turn for the michaeljb bot too? Would love to see the changes to other bots.
Title: Re: [COMPLETE] Geronimoo's challenges - First Game
Post by: Geronimoo on September 11, 2012, 09:41:41 am
The graphs are almost the same. michaeljb's bot builds the engine first and then gets a few mega turns like the best bot I made. The only discernable difference is that michaeljb's engine seems more resilient to greening.
Title: Re: [COMPLETE] Geronimoo's challenges - First Game
Post by: Polk5440 on February 01, 2013, 06:28:25 pm
Today I downloaded the xml and loaded it into the simulator. There were the 4 Village/Smithy engines, but not the winning entry by michaeljb. Any chance the winning bot can still be posted, Geronimoo?
Title: Re: [COMPLETE] Geronimoo's challenges - First Game
Post by: michaeljb on February 02, 2013, 12:54:25 am
Code: [Select]
<player name="First Game engine"
 author="michaeljb"
 description="This is a bot built for the First Game suggested set of 10. It utilizes 8 of the 10 available kingdom cards, and was built against HiveMindEmulator's Smithy bot for Geronimoo's First Game challenge.">
 <type name="Province"/>
 <type name="Optimized"/>
 <type name="UserCreated"/>
 <type name="Engine"/>
 <type name="Competitive"/>
 <type name="Bot"/>
 <type name="TwoPlayer"/>
 <type name="Attacking"/>
 <type name="Combo"/>
   <buy name="Duchy">
      <condition>
         <left type="countCardsInSupply" attribute="Province"/>
         <operator type="greaterThan" />
         <right type="constant" attribute="2.0"/>
      </condition>
      <condition>
         <left type="countVP"/>
         <operator type="smallerOrEqualThan" />
         <right type="countMAXOpponentVP"/>
         <extra_operation type="minus" attribute="20.0" />
      </condition>
      <condition>
         <left type="isActionPhase"/>
         <operator type="equalTo" />
         <right type="constant" attribute="0.0"/>
      </condition>
      <condition>
         <left type="countCardsInDeck" attribute="Province"/>
         <operator type="greaterThan" />
         <right type="constant" attribute="0.0"/>
      </condition>
   </buy>
   <buy name="Duchy">
      <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"/>
      </condition>
      <condition>
         <left type="isActionPhase"/>
         <operator type="equalTo" />
         <right type="constant" attribute="0.0"/>
      </condition>
   </buy>
   <buy name="Province">
      <condition>
         <left type="countCardsInDeck" attribute="Province"/>
         <operator type="greaterThan" />
         <right type="constant" attribute="0.0"/>
      </condition>
   </buy>
   <buy name="Province">
      <condition>
         <left type="countCardsInDeck" attribute="Smithy"/>
         <operator type="greaterThan" />
         <right type="constant" attribute="4.0"/>
      </condition>
      <condition>
         <left type="countAvailableMoney"/>
         <operator type="greaterThan" />
         <right type="constant" attribute="13.0"/>
      </condition>
      <condition>
         <left type="countBuysLeft"/>
         <operator type="greaterThan" />
         <right type="constant" attribute="1.0"/>
      </condition>
   </buy>
   <buy name="Duchy">
      <condition>
         <left type="countCardsInDeck" attribute="Province"/>
         <operator type="greaterThan" />
         <right type="constant" attribute="0.0"/>
      </condition>
      <condition>
         <left type="countCardsInSupply" attribute="Province"/>
         <operator type="smallerOrEqualThan" />
         <right type="constant" attribute="5.0"/>
      </condition>
   </buy>
   <buy name="Estate">
      <condition>
         <left type="countCardsInDeck" attribute="Province"/>
         <operator type="greaterThan" />
         <right type="constant" attribute="2.0"/>
      </condition>
      <condition>
         <left type="countCardsInDeck" attribute="Cellar"/>
         <operator type="greaterThan" />
         <right type="constant" attribute="0.0"/>
      </condition>
      <condition>
         <left type="countCardsInDeck" attribute="Smithy"/>
         <operator type="greaterThan" />
         <right type="constant" attribute="5.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="Mine">
      <condition>
         <left type="countCardsInDeck" attribute="Mine"/>
         <operator type="equalTo" />
         <right type="constant" attribute="0.0"/>
      </condition>
      <condition>
         <left type="countCardsInDeck" attribute="Market"/>
         <operator type="greaterThan" />
         <right type="constant" attribute="0.0"/>
      </condition>
   </buy>
   <buy name="Mine">
      <condition>
         <left type="countTurns"/>
         <operator type="smallerOrEqualThan" />
         <right type="constant" attribute="2.0"/>
      </condition>
   </buy>
   <buy name="Remodel">
      <condition>
         <left type="countCardsInDeck" attribute="Remodel"/>
         <operator type="equalTo" />
         <right type="constant" attribute="0.0"/>
      </condition>
   </buy>
   <buy name="Village">
      <condition>
         <left type="countCardTypeInDeck" attribute="Terminal"/>
         <operator type="greaterThan" />
         <right type="countCardsInDeck" attribute="Village"/>
         <extra_operation type="plus" attribute="1.0" />
      </condition>
   </buy>
   <buy name="Workshop">
      <condition>
         <left type="countCardsInDeck" attribute="Workshop"/>
         <operator type="equalTo" />
         <right type="constant" attribute="0.0"/>
      </condition>
      <condition>
         <left type="countCardsInDeck" attribute="Smithy"/>
         <operator type="smallerThan" />
         <right type="constant" attribute="4.0"/>
      </condition>
   </buy>
   <buy name="Militia">
      <condition>
         <left type="countCardsInDeck" attribute="Militia"/>
         <operator type="equalTo" />
         <right type="constant" attribute="0.0"/>
      </condition>
      <condition>
         <left type="countCardsInDeck" attribute="Smithy"/>
         <operator type="greaterThan" />
         <right type="constant" attribute="2.0"/>
      </condition>
   </buy>
   <buy name="Market">
      <condition>
         <left type="countCardsInDeck" attribute="Market"/>
         <operator type="equalTo" />
         <right type="constant" attribute="0.0"/>
      </condition>
   </buy>
   <buy name="Gold">
      <condition>
         <left type="countCardsInDeck" attribute="Gold"/>
         <operator type="smallerThan" />
         <right type="constant" attribute="1.0"/>
      </condition>
   </buy>
   <buy name="Village">
      <condition>
         <left type="countAvailableMoney"/>
         <operator type="equalTo" />
         <right type="constant" attribute="7.0"/>
      </condition>
      <condition>
         <left type="countBuysLeft"/>
         <operator type="greaterThan" />
         <right type="constant" attribute="1.0"/>
      </condition>
      <condition>
         <left type="isActionPhase"/>
         <operator type="equalTo" />
         <right type="constant" attribute="0.0"/>
      </condition>
   </buy>
   <buy name="Village">
      <condition>
         <left type="isActionPhase"/>
         <operator type="equalTo" />
         <right type="constant" attribute="0.0"/>
      </condition>
      <condition>
         <left type="countAvailableMoney"/>
         <operator type="equalTo" />
         <right type="constant" attribute="6.0"/>
      </condition>
      <condition>
         <left type="countBuysLeft"/>
         <operator type="greaterThan" />
         <right type="constant" attribute="1.0"/>
      </condition>
      <condition>
         <left type="countCardTypeInDeck" attribute="Terminal"/>
         <operator type="greaterThan" />
         <right type="countCardsInDeck" attribute="Village"/>
      </condition>
      <condition>
         <left type="countCardsInSupply" attribute="Village"/>
         <operator type="greaterThan" />
         <right type="constant" attribute="1.0"/>
      </condition>
      <condition>
         <left type="countCardsInDeck" attribute="Smithy"/>
         <operator type="greaterThan" />
         <right type="constant" attribute="0.0"/>
      </condition>
   </buy>
   <buy name="Market">
      <condition>
         <left type="countCardsInDeck" attribute="Market"/>
         <operator type="smallerThan" />
         <right type="constant" attribute="5.0"/>
      </condition>
      <condition>
         <left type="isActionPhase"/>
         <operator type="equalTo" />
         <right type="constant" attribute="0.0"/>
      </condition>
      <condition>
         <left type="countCardsInDeck" attribute="Smithy"/>
         <operator type="greaterThan" />
         <right type="constant" attribute="1.0"/>
      </condition>
   </buy>
   <buy name="Market">
      <condition>
         <left type="countCardsInDeck" attribute="Market"/>
         <operator type="smallerThan" />
         <right type="constant" attribute="5.0"/>
      </condition>
      <condition>
         <left type="isActionPhase"/>
         <operator type="equalTo" />
         <right type="constant" attribute="1.0"/>
      </condition>
      <condition>
         <left type="countCardsInDeck" attribute="Smithy"/>
         <operator type="greaterThan" />
         <right type="constant" attribute="3.0"/>
      </condition>
      <condition>
         <left type="countCardsInHand" attribute="Mine"/>
         <operator type="equalTo" />
         <right type="constant" attribute="0.0"/>
      </condition>
   </buy>
   <buy name="Smithy">
      <condition>
         <left type="isActionPhase"/>
         <operator type="equalTo" />
         <right type="constant" attribute="1.0"/>
      </condition>
      <condition>
         <left type="countCardsInDeck" attribute="Village"/>
         <operator type="equalTo" />
         <right type="countCardTypeInDeck" attribute="Terminal"/>
         <extra_operation type="minus" attribute="1.0" />
      </condition>
      <condition>
         <left type="countCardsInDeck" attribute="Smithy"/>
         <operator type="smallerThan" />
         <right type="constant" attribute="6.0"/>
      </condition>
      <condition>
         <left type="countCardsInHand" attribute="Copper"/>
         <operator type="equalTo" />
         <right type="constant" attribute="3.0"/>
      </condition>
      <condition>
         <left type="countCardsInHand" attribute="Silver"/>
         <operator type="equalTo" />
         <right type="constant" attribute="0.0"/>
      </condition>
      <condition>
         <left type="countCardsInHand" attribute="Gold"/>
         <operator type="equalTo" />
         <right type="constant" attribute="0.0"/>
      </condition>
      <condition>
         <left type="countAvailableMoney"/>
         <operator type="equalTo" />
         <right type="constant" attribute="0.0"/>
      </condition>
   </buy>
   <buy name="Smithy">
      <condition>
         <left type="isActionPhase"/>
         <operator type="equalTo" />
         <right type="constant" attribute="1.0"/>
      </condition>
      <condition>
         <left type="countCardsInDeck" attribute="Village"/>
         <operator type="equalTo" />
         <right type="countCardTypeInDeck" attribute="Terminal"/>
         <extra_operation type="minus" attribute="1.0" />
      </condition>
      <condition>
         <left type="countCardsInDeck" attribute="Smithy"/>
         <operator type="smallerThan" />
         <right type="constant" attribute="6.0"/>
      </condition>
      <condition>
         <left type="countCardsInHand" attribute="Copper"/>
         <operator type="equalTo" />
         <right type="constant" attribute="2.0"/>
      </condition>
      <condition>
         <left type="countCardsInHand" attribute="Silver"/>
         <operator type="equalTo" />
         <right type="constant" attribute="0.0"/>
      </condition>
      <condition>
         <left type="countCardsInHand" attribute="Gold"/>
         <operator type="equalTo" />
         <right type="constant" attribute="0.0"/>
      </condition>
      <condition>
         <left type="countAvailableMoney"/>
         <operator type="equalTo" />
         <right type="constant" attribute="1.0"/>
      </condition>
   </buy>
   <buy name="Smithy">
      <condition>
         <left type="isActionPhase"/>
         <operator type="equalTo" />
         <right type="constant" attribute="1.0"/>
      </condition>
      <condition>
         <left type="countCardsInDeck" attribute="Village"/>
         <operator type="equalTo" />
         <right type="countCardTypeInDeck" attribute="Terminal"/>
         <extra_operation type="minus" attribute="1.0" />
      </condition>
      <condition>
         <left type="countCardsInDeck" attribute="Smithy"/>
         <operator type="smallerThan" />
         <right type="constant" attribute="6.0"/>
      </condition>
      <condition>
         <left type="countCardsInHand" attribute="Copper"/>
         <operator type="equalTo" />
         <right type="constant" attribute="1.0"/>
      </condition>
      <condition>
         <left type="countCardsInHand" attribute="Silver"/>
         <operator type="equalTo" />
         <right type="constant" attribute="1.0"/>
      </condition>
      <condition>
         <left type="countCardsInHand" attribute="Gold"/>
         <operator type="equalTo" />
         <right type="constant" attribute="0.0"/>
      </condition>
      <condition>
         <left type="countAvailableMoney"/>
         <operator type="equalTo" />
         <right type="constant" attribute="0.0"/>
      </condition>
   </buy>
   <buy name="Smithy">
      <condition>
         <left type="isActionPhase"/>
         <operator type="equalTo" />
         <right type="constant" attribute="1.0"/>
      </condition>
      <condition>
         <left type="countCardsInDeck" attribute="Village"/>
         <operator type="equalTo" />
         <right type="countCardTypeInDeck" attribute="Terminal"/>
         <extra_operation type="minus" attribute="1.0" />
      </condition>
      <condition>
         <left type="countCardsInDeck" attribute="Smithy"/>
         <operator type="smallerThan" />
         <right type="constant" attribute="6.0"/>
      </condition>
      <condition>
         <left type="countCardsInHand" attribute="Copper"/>
         <operator type="equalTo" />
         <right type="constant" attribute="1.0"/>
      </condition>
      <condition>
         <left type="countCardsInHand" attribute="Silver"/>
         <operator type="equalTo" />
         <right type="constant" attribute="0.0"/>
      </condition>
      <condition>
         <left type="countCardsInHand" attribute="Gold"/>
         <operator type="equalTo" />
         <right type="constant" attribute="0.0"/>
      </condition>
      <condition>
         <left type="countAvailableMoney"/>
         <operator type="equalTo" />
         <right type="constant" attribute="2.0"/>
      </condition>
   </buy>
   <buy name="Smithy">
      <condition>
         <left type="isActionPhase"/>
         <operator type="equalTo" />
         <right type="constant" attribute="1.0"/>
      </condition>
      <condition>
         <left type="countCardsInDeck" attribute="Village"/>
         <operator type="equalTo" />
         <right type="countCardTypeInDeck" attribute="Terminal"/>
         <extra_operation type="minus" attribute="1.0" />
      </condition>
      <condition>
         <left type="countCardsInDeck" attribute="Smithy"/>
         <operator type="smallerThan" />
         <right type="constant" attribute="6.0"/>
      </condition>
      <condition>
         <left type="countCardsInHand" attribute="Copper"/>
         <operator type="equalTo" />
         <right type="constant" attribute="0.0"/>
      </condition>
      <condition>
         <left type="countCardsInHand" attribute="Silver"/>
         <operator type="equalTo" />
         <right type="constant" attribute="1.0"/>
      </condition>
      <condition>
         <left type="countCardsInHand" attribute="Gold"/>
         <operator type="equalTo" />
         <right type="constant" attribute="0.0"/>
      </condition>
      <condition>
         <left type="countAvailableMoney"/>
         <operator type="equalTo" />
         <right type="constant" attribute="1.0"/>
      </condition>
   </buy>
   <buy name="Smithy">
      <condition>
         <left type="isActionPhase"/>
         <operator type="equalTo" />
         <right type="constant" attribute="1.0"/>
      </condition>
      <condition>
         <left type="countCardsInDeck" attribute="Village"/>
         <operator type="equalTo" />
         <right type="countCardTypeInDeck" attribute="Terminal"/>
         <extra_operation type="minus" attribute="1.0" />
      </condition>
      <condition>
         <left type="countCardsInDeck" attribute="Smithy"/>
         <operator type="smallerThan" />
         <right type="constant" attribute="6.0"/>
      </condition>
      <condition>
         <left type="countCardsInHand" attribute="Copper"/>
         <operator type="equalTo" />
         <right type="constant" attribute="0.0"/>
      </condition>
      <condition>
         <left type="countCardsInHand" attribute="Silver"/>
         <operator type="equalTo" />
         <right type="constant" attribute="0.0"/>
      </condition>
      <condition>
         <left type="countCardsInHand" attribute="Gold"/>
         <operator type="equalTo" />
         <right type="constant" attribute="1.0"/>
      </condition>
   </buy>
   <buy name="Smithy">
      <condition>
         <left type="isActionPhase"/>
         <operator type="equalTo" />
         <right type="constant" attribute="1.0"/>
      </condition>
      <condition>
         <left type="countCardsInDeck" attribute="Village"/>
         <operator type="equalTo" />
         <right type="countCardTypeInDeck" attribute="Terminal"/>
         <extra_operation type="minus" attribute="1.0" />
      </condition>
      <condition>
         <left type="countCardsInDeck" attribute="Smithy"/>
         <operator type="smallerThan" />
         <right type="constant" attribute="6.0"/>
      </condition>
      <condition>
         <left type="countCardsInHand" attribute="Copper"/>
         <operator type="equalTo" />
         <right type="constant" attribute="0.0"/>
      </condition>
      <condition>
         <left type="countCardsInHand" attribute="Silver"/>
         <operator type="equalTo" />
         <right type="constant" attribute="0.0"/>
      </condition>
      <condition>
         <left type="countCardsInHand" attribute="Gold"/>
         <operator type="equalTo" />
         <right type="constant" attribute="0.0"/>
      </condition>
      <condition>
         <left type="countAvailableMoney"/>
         <operator type="equalTo" />
         <right type="constant" attribute="3.0"/>
      </condition>
   </buy>
   <buy name="Village">
      <condition>
         <left type="countCardsInDeck" attribute="Village"/>
         <operator type="smallerThan" />
         <right type="countCardTypeInDeck" attribute="Terminal"/>
      </condition>
   </buy>
   <buy name="Smithy">
      <condition>
         <left type="countCardsInDeck" attribute="Smithy"/>
         <operator type="smallerThan" />
         <right type="constant" attribute="6.0"/>
      </condition>
   </buy>
   <buy name="Market">
      <condition>
         <left type="isActionPhase"/>
         <operator type="equalTo" />
         <right type="constant" attribute="0.0"/>
      </condition>
   </buy>
   <buy name="Village">
      <condition>
         <left type="countCardsInDeck" attribute="Village"/>
         <operator type="smallerThan" />
         <right type="constant" attribute="9.0"/>
      </condition>
   </buy>
   <buy name="Cellar">
      <condition>
         <left type="countCardsInDeck" attribute="Cellar"/>
         <operator type="smallerThan" />
         <right type="constant" attribute="1.0"/>
      </condition>
      <condition>
         <left type="isActionPhase"/>
         <operator type="equalTo" />
         <right type="constant" attribute="0.0"/>
      </condition>
   </buy>
   <buy name="Cellar">
      <condition>
         <left type="countCardsInDeck" attribute="Cellar"/>
         <operator type="smallerThan" />
         <right type="constant" attribute="2.0"/>
      </condition>
      <condition>
         <left type="isActionPhase"/>
         <operator type="equalTo" />
         <right type="constant" attribute="0.0"/>
      </condition>
      <condition>
         <left type="countCardsInDeck" attribute="Smithy"/>
         <operator type="greaterThan" />
         <right type="constant" attribute="0.0"/>
      </condition>
   </buy>
   <buy name="Cellar">
      <condition>
         <left type="countCardsInDeck" attribute="Cellar"/>
         <operator type="smallerThan" />
         <right type="constant" attribute="1.0"/>
      </condition>
      <condition>
         <left type="isActionPhase"/>
         <operator type="equalTo" />
         <right type="constant" attribute="1.0"/>
      </condition>
      <condition>
         <left type="countCardsInHand" attribute="Militia"/>
         <operator type="equalTo" />
         <right type="constant" attribute="0.0"/>
      </condition>
      <condition>
         <left type="countCardsInHand" attribute="Workshop"/>
         <operator type="equalTo" />
         <right type="constant" attribute="0.0"/>
      </condition>
      <condition>
         <left type="countCardsInHand" attribute="Mine"/>
         <operator type="equalTo" />
         <right type="constant" attribute="0.0"/>
      </condition>
   </buy>
   <buy name="Cellar">
      <condition>
         <left type="countCardsInDeck" attribute="Cellar"/>
         <operator type="smallerThan" />
         <right type="constant" attribute="2.0"/>
      </condition>
      <condition>
         <left type="isActionPhase"/>
         <operator type="equalTo" />
         <right type="constant" attribute="1.0"/>
      </condition>
      <condition>
         <left type="countCardsInHand" attribute="Militia"/>
         <operator type="equalTo" />
         <right type="constant" attribute="0.0"/>
      </condition>
      <condition>
         <left type="countCardsInDeck" attribute="Smithy"/>
         <operator type="greaterThan" />
         <right type="constant" attribute="0.0"/>
      </condition>
      <condition>
         <left type="countCardsInHand" attribute="Workshop"/>
         <operator type="equalTo" />
         <right type="constant" attribute="0.0"/>
      </condition>
      <condition>
         <left type="countCardsInHand" attribute="Mine"/>
         <operator type="equalTo" />
         <right type="constant" attribute="0.0"/>
      </condition>
   </buy>
   <buy name="Gold">
      <condition>
         <left type="isActionPhase"/>
         <operator type="equalTo" />
         <right type="constant" attribute="1.0"/>
      </condition>
   </buy>
   <buy name="Silver">
      <condition>
         <left type="isActionPhase"/>
         <operator type="equalTo" />
         <right type="constant" attribute="1.0"/>
      </condition>
   </buy>
   <buy name="Cellar">
      <condition>
         <left type="countCardsInDeck" attribute="Cellar"/>
         <operator type="smallerThan" />
         <right type="constant" attribute="3.0"/>
      </condition>
      <condition>
         <left type="countCardTypeInDeck" attribute="Victory"/>
         <operator type="greaterThan" />
         <right type="constant" attribute="3.0"/>
      </condition>
   </buy>
   <buy name="Silver">
      <condition>
         <left type="countCardTypeInDeck" attribute="Treasure"/>
         <operator type="smallerThan" />
         <right type="constant" attribute="7.0"/>
      </condition>
   </buy>
   <buy name="Copper">
      <condition>
         <left type="countCardTypeInDeck" attribute="Treasure"/>
         <operator type="smallerThan" />
         <right type="constant" attribute="5.0"/>
      </condition>
   </buy>
</player>
Title: Re: [COMPLETE] Geronimoo's challenges - First Game
Post by: Polk5440 on February 02, 2013, 09:27:17 am
Sweet! Thanks, michaeljb. Nice job!
Title: Re: [COMPLETE] Geronimoo's challenges - First Game
Post by: SirPeebles on February 02, 2013, 10:36:53 am
Poor Woodcutter  :'(
Title: Re: [COMPLETE] Geronimoo's challenges - First Game
Post by: grobblewobble on June 27, 2013, 05:38:35 am
Michaeljb, thanks a lot for your amazing strategy. I love this engine, it is both explosive and surprising.

I think I found two very slight improvements for the 3/4 starting hands. First off, I think you should get a second mine once your engine gets going. With a few turns to go it can just let you end the game one turn earlier sometimes.
Secondly, I think you should eventually remodel the workshop. Into a market, or into that second mine. ;-)

The dynamics with three players get really interesting. If two players try to build the engine they will both lose because there are not enough villages, but if only one player builds the engine he will crush the other two.
Title: Re: [COMPLETE] Geronimoo's challenges - First Game
Post by: Polk5440 on June 27, 2013, 08:11:06 am
The dynamics with three players get really interesting. If two players try to build the engine they will both lose because there are not enough villages, but if only one player builds the engine he will crush the other two.

This is why I think 3 player games are underrated. There seems to be a lot more interaction and response to what the other players are doing. A lot of times you have to judge the performance of a "half engine" and the worth of depriving others of engine components.
Title: Re: [COMPLETE] Geronimoo's challenges - First Game
Post by: michaeljb on June 27, 2013, 01:29:06 pm
I think you should eventually remodel the workshop. Into a market, or into that second mine. ;-)

It's been a while since I've looked, but I'm pretty sure that it does eventually remodel the Workshop to a Market. I never considered a second Mine; intuitively it seems to me like one is enough, but I never actually tried it.

Did you run any sims with those changes? How much did it affect the percentage?
Title: Re: [COMPLETE] Geronimoo's challenges - First Game
Post by: grobblewobble on June 27, 2013, 02:37:19 pm
I didn't run simulations, just played games manually against money bots with your strategy. In some games I felt that a second mine would be good, but this was more intuition than anything. Maybe I'm wrong.

I also tried replacing the woodcutter with a gardens and defeated a gardening bot at first try. :) This is really a great engine. I did remodel my gold a little more aggressively than against a money bot.

Code: [Select]
------------ Game Setup ------------
Supply cards: Cellar, Village, Woodcutter, Workshop, Gardens, Militia, Remodel, Smithy, Market, Mine, Copper, Silver, Gold, Estate, Duchy, Province, Curse
Rating system: unrated
grobblewobble - starting cards: Estate, Estate, Estate, Copper, Copper, Copper, Copper, Copper, Copper, Copper
Conqueror Bot - starting cards: Estate, Estate, Estate, Copper, Copper, Copper, Copper, Copper, Copper, Copper
grobblewobble - shuffles deck
Conqueror Bot - shuffles deck
grobblewobble - draws Estate, Copper, Copper, Estate, Copper
Conqueror Bot - draws Copper, Copper, Estate, Estate, Copper
 
---------- grobblewobble: turn 1 ----------
grobblewobble - plays 3 Copper
grobblewobble - buys Workshop
grobblewobble - gains Workshop
grobblewobble - draws Copper, Estate, Copper, Copper, Copper
 
---------- Conqueror Bot: turn 1 ----------
Conqueror Bot - plays 3 Copper
Conqueror Bot - buys Workshop
Conqueror Bot - gains Workshop
Conqueror Bot - draws Copper, Copper, Copper, Copper, Estate
 
---------- grobblewobble: turn 2 ----------
grobblewobble - plays 4 Copper
grobblewobble - buys Remodel
grobblewobble - gains Remodel
grobblewobble - shuffles deck
grobblewobble - draws Copper, Workshop, Copper, Estate, Estate
 
---------- Conqueror Bot: turn 2 ----------
Conqueror Bot - plays 4 Copper
Conqueror Bot - buys Workshop
Conqueror Bot - gains Workshop
Conqueror Bot - shuffles deck
Conqueror Bot - draws Copper, Copper, Workshop, Copper, Estate
 
---------- grobblewobble: turn 3 ----------
grobblewobble - plays Workshop
grobblewobble - gains Village
grobblewobble - plays 2 Copper
grobblewobble - buys Cellar
grobblewobble - gains Cellar
grobblewobble - draws Copper, Copper, Copper, Remodel, Copper
 
---------- Conqueror Bot: turn 3 ----------
Conqueror Bot - plays Workshop
Conqueror Bot - gains Workshop
Conqueror Bot - plays 3 Copper
Conqueror Bot - buys Workshop
Conqueror Bot - gains Workshop
Conqueror Bot - draws Estate, Workshop, Copper, Copper, Copper
 
---------- grobblewobble: turn 4 ----------
grobblewobble - plays Remodel
grobblewobble - trashes Copper
grobblewobble - gains Cellar
grobblewobble - plays 3 Copper
grobblewobble - buys Village
grobblewobble - gains Village
grobblewobble - draws Estate, Copper
grobblewobble - shuffles deck
grobblewobble - draws Estate, Copper, Village
 
---------- Conqueror Bot: turn 4 ----------
Conqueror Bot - plays Workshop
Conqueror Bot - gains Gardens
Conqueror Bot - plays 3 Copper
Conqueror Bot - buys Workshop
Conqueror Bot - gains Workshop
Conqueror Bot - draws Estate, Copper
Conqueror Bot - shuffles deck
Conqueror Bot - draws Copper, Workshop, Workshop
 
---------- grobblewobble: turn 5 ----------
grobblewobble - plays Village
grobblewobble - draws Cellar
grobblewobble - plays Cellar
grobblewobble - discards Copper
grobblewobble - discards Estate
grobblewobble - discards Estate
grobblewobble - draws Copper, Workshop, Copper
grobblewobble - plays Workshop
grobblewobble - gains Smithy
grobblewobble - plays 3 Copper
grobblewobble - buys Village
grobblewobble - gains Village
grobblewobble - draws Copper, Cellar, Remodel, Estate, Village
 
---------- Conqueror Bot: turn 5 ----------
Conqueror Bot - plays Workshop
Conqueror Bot - gains Gardens
Conqueror Bot - plays 2 Copper
Conqueror Bot - buys Cellar
Conqueror Bot - gains Cellar
Conqueror Bot - draws Copper, Copper, Workshop, Copper, Estate
 
---------- grobblewobble: turn 6 ----------
grobblewobble - plays Village
grobblewobble - draws Copper
grobblewobble - plays Cellar
grobblewobble - discards Estate
grobblewobble - discards Copper
grobblewobble - discards Copper
grobblewobble - shuffles deck
grobblewobble - draws Village, Workshop, Copper
grobblewobble - plays Village
grobblewobble - draws Estate
grobblewobble - plays Remodel
grobblewobble - trashes Estate
grobblewobble - gains Smithy
grobblewobble - plays Workshop
grobblewobble - gains Village
grobblewobble - draws Estate, Village, Smithy, Cellar, Copper
 
---------- Conqueror Bot: turn 6 ----------
Conqueror Bot - plays Workshop
Conqueror Bot - gains Gardens
Conqueror Bot - plays 3 Copper
Conqueror Bot - buys Workshop
Conqueror Bot - gains Workshop
Conqueror Bot - draws Workshop, Workshop, Copper, Gardens, Copper
 
---------- grobblewobble: turn 7 ----------
grobblewobble - plays Village
grobblewobble - draws Copper
grobblewobble - plays Smithy
grobblewobble - draws Copper, Copper, Copper
grobblewobble - plays Cellar
grobblewobble - discards Estate
grobblewobble - draws Estate
grobblewobble - plays 5 Copper
grobblewobble - buys Market
grobblewobble - gains Market
grobblewobble - shuffles deck
grobblewobble - draws Village, Copper, Copper, Copper, Copper
 
---------- Conqueror Bot: turn 7 ----------
Conqueror Bot - plays Workshop
Conqueror Bot - gains Gardens
Conqueror Bot - plays 2 Copper
Conqueror Bot - buys Cellar
Conqueror Bot - gains Cellar
Conqueror Bot - draws Estate
Conqueror Bot - shuffles deck
Conqueror Bot - draws Gardens, Estate, Gardens, Cellar
 
---------- grobblewobble: turn 8 ----------
grobblewobble - plays Village
grobblewobble - draws Estate
grobblewobble - plays 4 Copper
grobblewobble - buys Smithy
grobblewobble - gains Smithy
grobblewobble - draws Smithy, Copper, Workshop, Remodel, Copper
 
---------- Conqueror Bot: turn 8 ----------
Conqueror Bot - plays Cellar
Conqueror Bot - discards Gardens
Conqueror Bot - discards Gardens
Conqueror Bot - discards Estate
Conqueror Bot - discards Estate
Conqueror Bot - draws Workshop, Gardens, Copper, Gardens
Conqueror Bot - plays Workshop
Conqueror Bot - gains Gardens
Conqueror Bot - plays 1 Copper
Conqueror Bot - buys Copper
Conqueror Bot - gains Copper
Conqueror Bot - draws Copper, Workshop, Workshop, Workshop, Workshop
 
---------- grobblewobble: turn 9 ----------
grobblewobble - plays Remodel
grobblewobble - trashes Workshop
grobblewobble - gains Mine
grobblewobble - plays 2 Copper
grobblewobble - draws Village, Cellar, Village, Cellar, Estate
 
---------- Conqueror Bot: turn 9 ----------
Conqueror Bot - plays Workshop
Conqueror Bot - gains Gardens
Conqueror Bot - plays 1 Copper
Conqueror Bot - buys Copper
Conqueror Bot - gains Copper
Conqueror Bot - draws Copper, Copper, Copper, Estate, Workshop
 
---------- grobblewobble: turn 10 ----------
grobblewobble - plays Village
grobblewobble - draws Village
grobblewobble - plays Village
grobblewobble - draws Smithy
grobblewobble - plays Village
grobblewobble - draws Market
grobblewobble - plays Smithy
grobblewobble - shuffles deck
grobblewobble - draws Village, Smithy, Smithy
grobblewobble - plays Village
grobblewobble - draws Copper
grobblewobble - plays Smithy
grobblewobble - draws Copper, Copper, Copper
grobblewobble - plays Market
grobblewobble - draws Copper
grobblewobble - plays Smithy
grobblewobble - draws Remodel, Estate, Copper
grobblewobble - plays Cellar
grobblewobble - discards Estate
grobblewobble - discards Estate
grobblewobble - discards Cellar
grobblewobble - draws Mine
grobblewobble - shuffles deck
grobblewobble - draws Cellar, Estate
grobblewobble - plays Mine
grobblewobble - trashes Copper
grobblewobble - gains Silver
grobblewobble - plays Remodel
grobblewobble - trashes Estate
grobblewobble - gains Smithy
grobblewobble - plays 5 Copper, 1 Silver
grobblewobble - buys Gardens
grobblewobble - gains Gardens
grobblewobble - buys Gardens
grobblewobble - gains Gardens
grobblewobble - draws Estate
grobblewobble - shuffles deck
grobblewobble - draws Market, Smithy, Smithy, Copper
 
---------- Conqueror Bot: turn 10 ----------
Conqueror Bot - plays Workshop
Conqueror Bot - gains Workshop
Conqueror Bot - plays 3 Copper
Conqueror Bot - buys Workshop
Conqueror Bot - gains Workshop
Conqueror Bot - draws Cellar, Copper, Copper
Conqueror Bot - shuffles deck
Conqueror Bot - draws Workshop, Copper
 
---------- grobblewobble: turn 11 ----------
grobblewobble - plays Market
grobblewobble - draws Village
grobblewobble - plays Village
grobblewobble - draws Copper
grobblewobble - plays Smithy
grobblewobble - draws Village, Village, Copper
grobblewobble - plays Village
grobblewobble - draws Gardens
grobblewobble - plays Village
grobblewobble - draws Copper
grobblewobble - plays Smithy
grobblewobble - draws Remodel, Cellar, Cellar
grobblewobble - plays Cellar
grobblewobble - discards Gardens
grobblewobble - discards Cellar
grobblewobble - discards Estate
grobblewobble - draws Smithy, Gardens, Village
grobblewobble - plays Smithy
grobblewobble - draws Smithy, Copper, Mine
grobblewobble - plays Village
grobblewobble - draws Silver
grobblewobble - plays Smithy
grobblewobble - shuffles deck
grobblewobble - draws Cellar, Gardens, Estate
grobblewobble - plays Mine
grobblewobble - trashes Silver
grobblewobble - gains Gold
grobblewobble - plays 5 Copper, 1 Gold
grobblewobble - buys Province
grobblewobble - gains Province
grobblewobble - shuffles deck
grobblewobble - draws Copper, Mine, Copper, Market, Copper
 
---------- Conqueror Bot: turn 11 ----------
Conqueror Bot - plays Cellar
Conqueror Bot - discards Copper
Conqueror Bot - discards Copper
Conqueror Bot - discards Copper
Conqueror Bot - draws Estate, Estate, Gardens
Conqueror Bot - plays Workshop
Conqueror Bot - gains Workshop
Conqueror Bot - buys Copper
Conqueror Bot - gains Copper
Conqueror Bot - draws Copper, Copper, Gardens, Workshop, Gardens
 
---------- grobblewobble: turn 12 ----------
grobblewobble - plays Market
grobblewobble - draws Village
grobblewobble - plays Village
grobblewobble - draws Smithy
grobblewobble - plays Smithy
grobblewobble - draws Smithy, Smithy, Gardens
grobblewobble - plays Smithy
grobblewobble - draws Cellar, Village, Gold
grobblewobble - plays 3 Copper, 1 Gold
grobblewobble - buys Market
grobblewobble - gains Market
grobblewobble - draws Cellar, Village, Province, Copper, Village
 
---------- Conqueror Bot: turn 12 ----------
Conqueror Bot - plays Workshop
Conqueror Bot - gains Silver
Conqueror Bot - plays 2 Copper
Conqueror Bot - buys Cellar
Conqueror Bot - gains Cellar
Conqueror Bot - draws Copper, Cellar, Gardens, Copper, Copper
 
---------- grobblewobble: turn 13 ----------
grobblewobble - plays Village
grobblewobble - draws Remodel
grobblewobble - plays Village
grobblewobble - draws Smithy
grobblewobble - plays Smithy
grobblewobble - draws Copper, Estate, Gardens
grobblewobble - plays Cellar
grobblewobble - discards Province
grobblewobble - discards Copper
grobblewobble - discards Remodel
grobblewobble - discards Copper
grobblewobble - discards Estate
grobblewobble - discards Gardens
grobblewobble - shuffles deck
grobblewobble - draws Market, Village, Remodel, Gold, Village, Province
grobblewobble - plays Village
grobblewobble - draws Copper
grobblewobble - plays Village
grobblewobble - draws Smithy
grobblewobble - plays Smithy
grobblewobble - draws Cellar, Estate, Market
grobblewobble - plays Market
grobblewobble - draws Smithy
grobblewobble - plays Market
grobblewobble - draws Gardens
grobblewobble - plays Smithy
grobblewobble - draws Copper, Gardens, Copper
grobblewobble - plays Cellar
grobblewobble - discards Estate
grobblewobble - discards Gardens
grobblewobble - discards Gardens
grobblewobble - discards Province
grobblewobble - draws Smithy, Copper, Copper, Mine
grobblewobble - plays Mine
grobblewobble - trashes Copper
grobblewobble - gains Silver
grobblewobble - plays Remodel
grobblewobble - trashes Gold
grobblewobble - gains Province
grobblewobble - plays 4 Copper, 1 Silver
grobblewobble - buys Province
grobblewobble - gains Province
grobblewobble - shuffles deck
grobblewobble - draws Province, Mine, Copper, Cellar, Copper
 
---------- Conqueror Bot: turn 13 ----------
Conqueror Bot - plays Cellar
Conqueror Bot - discards Gardens
Conqueror Bot - discards Copper
Conqueror Bot - discards Copper
Conqueror Bot - discards Copper
Conqueror Bot - draws Estate, Gardens, Gardens, Workshop
Conqueror Bot - plays Workshop
Conqueror Bot - gains Silver
Conqueror Bot - buys Copper
Conqueror Bot - gains Copper
Conqueror Bot - draws Workshop, Workshop, Workshop, Copper, Workshop
 
---------- grobblewobble: turn 14 ----------
grobblewobble - plays Cellar
grobblewobble - discards Copper
grobblewobble - discards Copper
grobblewobble - discards Mine
grobblewobble - discards Province
grobblewobble - draws Village, Smithy, Smithy, Estate
grobblewobble - plays Village
grobblewobble - draws Copper
grobblewobble - plays Smithy
grobblewobble - draws Province, Smithy, Market
grobblewobble - plays Market
grobblewobble - draws Remodel
grobblewobble - plays Remodel
grobblewobble - trashes Estate
grobblewobble - gains Village
grobblewobble - plays 1 Copper
grobblewobble - draws Village, Silver, Gardens, Copper, Smithy
 
---------- Conqueror Bot: turn 14 ----------
Conqueror Bot - plays Workshop
Conqueror Bot - gains Cellar
Conqueror Bot - plays 1 Copper
Conqueror Bot - buys Copper
Conqueror Bot - gains Copper
Conqueror Bot - draws Workshop
Conqueror Bot - shuffles deck
Conqueror Bot - draws Copper, Cellar, Cellar, Estate
 
---------- grobblewobble: turn 15 ----------
grobblewobble - plays Village
grobblewobble - draws Village
grobblewobble - plays Village
grobblewobble - draws Market
grobblewobble - plays Smithy
grobblewobble - draws Province, Village, Gardens
grobblewobble - plays Village
grobblewobble - draws Cellar
grobblewobble - plays Market
grobblewobble - shuffles deck
grobblewobble - draws Province
grobblewobble - plays Cellar
grobblewobble - discards Province
grobblewobble - discards Gardens
grobblewobble - discards Province
grobblewobble - discards Gardens
grobblewobble - draws Province, Smithy, Mine, Smithy
grobblewobble - plays Smithy
grobblewobble - draws Copper, Cellar, Market
grobblewobble - plays Market
grobblewobble - draws Village
grobblewobble - plays Village
grobblewobble - draws Copper
grobblewobble - plays Smithy
grobblewobble - draws Smithy, Remodel, Copper
grobblewobble - plays Mine
grobblewobble - trashes Silver
grobblewobble - gains Gold
grobblewobble - plays Smithy
grobblewobble - draws Village
grobblewobble - shuffles deck
grobblewobble - draws Gardens, Gardens
grobblewobble - plays 4 Copper, 1 Gold
grobblewobble - buys Province
grobblewobble - gains Province
grobblewobble - draws Province, Province
grobblewobble - shuffles deck
grobblewobble - draws Province, Gold, Cellar
 
---------- Conqueror Bot: turn 15 ----------
Conqueror Bot - plays Cellar
Conqueror Bot - discards Cellar
Conqueror Bot - discards Estate
Conqueror Bot - discards Copper
Conqueror Bot - draws Cellar, Copper, Copper
Conqueror Bot - plays Cellar
Conqueror Bot - discards Copper
Conqueror Bot - discards Copper
Conqueror Bot - draws Cellar, Gardens
Conqueror Bot - plays Cellar
Conqueror Bot - discards Gardens
Conqueror Bot - draws Copper
Conqueror Bot - plays Workshop
Conqueror Bot - gains Cellar
Conqueror Bot - plays 1 Copper
Conqueror Bot - buys Copper
Conqueror Bot - gains Copper
Conqueror Bot - draws Workshop, Copper, Gardens, Workshop, Workshop
 
---------- grobblewobble: turn 16 ----------
grobblewobble - plays Cellar
grobblewobble - discards Province
grobblewobble - discards Province
grobblewobble - discards Province
grobblewobble - discards Gold
grobblewobble - draws Market, Copper, Province, Mine
grobblewobble - plays Market
grobblewobble - draws Smithy
grobblewobble - plays Mine
grobblewobble - trashes Copper
grobblewobble - gains Silver
grobblewobble - draws Smithy, Cellar, Village, Village, Copper
 
---------- Conqueror Bot: turn 16 ----------
Conqueror Bot - plays Workshop
Conqueror Bot - gains Cellar
Conqueror Bot - plays 1 Copper
Conqueror Bot - buys Copper
Conqueror Bot - gains Copper
Conqueror Bot - draws Copper, Copper, Estate, Workshop, Copper
 
---------- grobblewobble: turn 17 ----------
grobblewobble - plays Village
grobblewobble - draws Copper
grobblewobble - plays Smithy
grobblewobble - draws Copper, Remodel, Gardens
grobblewobble - plays Village
grobblewobble - draws Village
grobblewobble - plays Village
grobblewobble - draws Smithy
grobblewobble - plays Smithy
grobblewobble - draws Gardens, Village, Smithy
grobblewobble - plays Village
grobblewobble - draws Market
grobblewobble - plays Smithy
grobblewobble - draws Village
grobblewobble - shuffles deck
grobblewobble - draws Gold, Smithy
grobblewobble - plays Village
grobblewobble - draws Cellar
grobblewobble - plays Smithy
grobblewobble - draws Market, Province, Province
grobblewobble - plays Market
grobblewobble - draws Silver
grobblewobble - plays Market
grobblewobble - draws Mine
grobblewobble - plays Cellar
grobblewobble - discards Cellar
grobblewobble - draws Province
grobblewobble - plays Mine
grobblewobble - trashes Silver
grobblewobble - gains Gold
grobblewobble - plays Remodel
grobblewobble - trashes Gold
grobblewobble - gains Province
grobblewobble - plays 3 Copper, 1 Gold
grobblewobble - buys Province
grobblewobble - gains Province
grobblewobble - draws Province
grobblewobble - shuffles deck
grobblewobble - draws Village, Mine, Province, Remodel
 
---------- Conqueror Bot: turn 17 ----------
Conqueror Bot - plays Workshop
Conqueror Bot - gains Cellar
Conqueror Bot - plays 3 Copper
Conqueror Bot - buys Estate
Conqueror Bot - gains Estate
Conqueror Bot - draws Gardens, Silver, Workshop, Gardens, Gardens
 
---------- grobblewobble: turn 18 ----------
grobblewobble - plays Village
grobblewobble - draws Province
grobblewobble - plays Remodel
grobblewobble - trashes Mine
grobblewobble - gains Duchy
grobblewobble - draws Copper, Smithy, Province, Province, Gold
 
---------- Conqueror Bot: turn 18 ----------
Conqueror Bot - plays Workshop
Conqueror Bot - gains Estate
Conqueror Bot - plays 1 Silver
Conqueror Bot - buys Estate
Conqueror Bot - gains Estate
Conqueror Bot - draws Copper, Copper, Estate, Workshop, Workshop
 
---------- grobblewobble: turn 19 ----------
grobblewobble - plays Smithy
grobblewobble - draws Smithy, Market, Copper
grobblewobble - plays 2 Copper, 1 Gold
grobblewobble - buys Duchy
grobblewobble - gains Duchy
grobblewobble - draws Cellar, Gardens, Cellar, Village, Copper
 
---------- Conqueror Bot: turn 19 ----------
Conqueror Bot - plays Workshop
Conqueror Bot - gains Estate
Conqueror Bot - plays 2 Copper
Conqueror Bot - buys Estate
Conqueror Bot - gains Estate
Conqueror Bot - draws Workshop, Copper, Silver, Copper, Gardens
 
---------- grobblewobble: turn 20 ----------
grobblewobble - plays Village
grobblewobble - draws Smithy
grobblewobble - plays Smithy
grobblewobble - draws Village, Village, Gardens
grobblewobble - plays Village
grobblewobble - draws Market
grobblewobble - plays Village
grobblewobble - draws Village
grobblewobble - plays Village
grobblewobble - draws Smithy
grobblewobble - plays Smithy
grobblewobble - draws Province
grobblewobble - shuffles deck
grobblewobble - draws Province, Duchy
grobblewobble - plays Market
grobblewobble - draws Smithy
grobblewobble - plays Smithy
grobblewobble - draws Duchy, Remodel, Province
grobblewobble - plays Cellar
grobblewobble - discards Gardens
grobblewobble - discards Gardens
grobblewobble - discards Province
grobblewobble - discards Province
grobblewobble - discards Province
grobblewobble - discards Duchy
grobblewobble - discards Duchy
grobblewobble - draws Market, Gold, Village, Province, Province, Copper, Copper
grobblewobble - plays Village
grobblewobble - draws Smithy
grobblewobble - plays Smithy
grobblewobble - draws Province
grobblewobble - shuffles deck
grobblewobble - draws Duchy, Gardens
grobblewobble - plays Market
grobblewobble - draws Province
grobblewobble - plays Cellar
grobblewobble - discards Province
grobblewobble - discards Province
grobblewobble - discards Province
grobblewobble - discards Province
grobblewobble - discards Duchy
grobblewobble - discards Gardens
grobblewobble - draws Duchy, Province, Province, Gardens
grobblewobble - shuffles deck
grobblewobble - draws Province, Duchy
grobblewobble - plays 3 Copper, 1 Gold
grobblewobble - buys Province
grobblewobble - gains Province
grobblewobble - draws Province, Gardens, Province, Province
grobblewobble - shuffles deck
grobblewobble - draws Cellar
 
---------- Conqueror Bot: turn 20 ----------
Conqueror Bot - plays Workshop
Conqueror Bot - gains Estate
Conqueror Bot - plays 2 Copper, 1 Silver
Conqueror Bot - buys Estate
Conqueror Bot - gains Estate
Conqueror Bot - shuffles deck
Conqueror Bot - draws Cellar, Workshop, Workshop, Copper, Cellar
 
---------- grobblewobble: turn 21 ----------
grobblewobble - plays Cellar
grobblewobble - discards Province
grobblewobble - discards Province
grobblewobble - discards Gardens
grobblewobble - discards Province
grobblewobble - draws Smithy, Village, Market, Smithy
grobblewobble - plays Village
grobblewobble - draws Smithy
grobblewobble - plays Smithy
grobblewobble - draws Province, Duchy, Village
grobblewobble - plays Village
grobblewobble - draws Remodel
grobblewobble - plays Smithy
grobblewobble - draws Province, Copper, Market
grobblewobble - plays Market
grobblewobble - draws Copper
grobblewobble - plays Market
grobblewobble - draws Smithy
grobblewobble - plays Smithy
grobblewobble - draws Gardens, Village, Village
grobblewobble - plays 2 Copper
grobblewobble - buys Estate
grobblewobble - gains Estate
grobblewobble - draws Village, Gold, Copper, Province, Province
 
------------ Game Over ------------
grobblewobble - cards: 5 Village, 4 Smithy, 2 Cellar, 2 Market, 1 Remodel, 3 Copper, 1 Gold, 7 Province, 2 Gardens, 2 Duchy, 1 Estate
grobblewobble - total victory points: 55
grobblewobble - turns: 21
 
Conqueror Bot - cards: 9 Workshop, 7 Cellar, 14 Copper, 2 Silver, 10 Estate, 6 Gardens
Conqueror Bot - total victory points: 34
Conqueror Bot - turns: 20
 
1st place: grobblewobble
2nd place: Conqueror Bot