Hope to have this in soon. I'm currently 2 weeks behind my dev schedule.
The fix I made for bowling distribution is a quickfix, more than a permanent one. A non-bowler can end up being selected if you end up with 5 specialists, of whom 4 bowl the first 16 and then you are left with 4 overs but only one guy who can bowl at one end at a time. In the end, it'll come down to a bit of luck. If non-bowlers are being picked ahead of all-rounders, then that's another story, and I'd like to know if that's happening.
I've been brainstorming ways to handle bowling orders but won't get to it for a bit. There are two plans I have right now, each pretty hard:
1. Resource-based. In this system, at the end of every over the simulator will calculate the number of "specialist" bowling resources available. To be a "specialist" bowler in the team, you will have to have one of the top 4 bowling ratings in the side. This way, the simulator will try to stuff in non-specialist overs whenever the bowling team is on top, or in the middle overs so that specialists can finish the innings off. Possibly, a guy's specialist rating will also be modified by his rhythm/economy. So if the top specialist bowler in the side has been smacked for 30 runs in 2 overs, perhaps the system will adjust his rating to be the 4th or 5th rating during the simulation. This way, part timers can be used to fill in overs if a specialist is sucking.
2. Bowling-order based. At the start of the innings, the captain will calculate a bowling order, using a similar specialist algorithm. For example, if the team has 5 specialist bowlers within a decent range of each other (for example, 5 bowlers in the 70-80 range), the captain may choose a bowling order as follows: A,B,A,B,A,B,C,D,C,D,C,E,C,E,D,E,D,E,B,A. The algorithm will hopefully be intelligent enough to set this initial order based on things such as pace bowlers at the beginning and end and spinners/medium pacers during the middle. In the event that someone is getting smacked, the algorithm will try and swap the bowler getting smacked with another spot (or perhaps moving him down the chain somewhere). If there's no location for him, it'll re-order the list to include a non-specialist somewhere in there.
Both these systems are pretty difficult to implement, so I'd like some feedback about what you guys think would be better, so that I can dedicate my energy more effectively.