When I got the basic bot built (my 'first draft' if you will), I was at about 20 turns average I think. It took some work getting it down to under 18! For a while I had taken Militia out, and that sped it up without hurting the win rate too much. Another big jump was when I thought to add in the Curse buy rule--that one surprised me quite a bit.
Initially I only had one Festival rule--the 'vanilla' rule with no conditions that's still in there. The Festival rule that's on top offered another boost--before, I was grabbing my Witch too soon I think. After that it was mostly looking at sample logs a lot, then tweaking the Festival/Council Room/Throne Room rules. The rules for Festival and TR right before Council Room (which includes the check for Coppers and Estates being cleared out) were a little whacky, but definitely had a noticeable effect. Making sure Throne Rooms didn't empty also proved to be very important--I also added, as a failsafe, checks to make sure Markets and Woodcutters wouldn't empty (though in practice that was almost never going to happen, but it felt better to have the rules to be certain).
By then I was down to about 17.8 or so turn average, and decided to throw Militia back in, and found I was still pretty close, around 18.2-18.3. It also added about .6% to my win percentage. I don't think I added any other of the big rules here, but it was a lot more tweaking the details.
I thought I had it, but a quick sim was sometimes showing an average of more than 18 turns. So I ran the ultimate sim 5 or 6 times, and each time the average number of turns was just under 17.99.
As Geronimoo mentioned, Throne Room isn't played quite right; normally, CR is played before Militia, but a Throned Militia is played before CR. More frustrating, in the early game Chapel would get Throned. So sometimes a hand of Festival, Throne Room, Chapel, Copper x2, would play Festival, Throne the Chapel, then only trash 1 Copper so it could still buy a Woodcutter. I think in one log (don't still have it) it even Throned Chapel over Festival, but ended up trashing 0 Coppers.
I have to say I really had a lot of fun with this! Much thanks to Geronimoo for putting up this puzzle and of course writing the awesome simulator. I also have to say I found it pretty funny that my "Ultimate Gardener" wins less than 1% of games against Workshop/Gardens
.