optimizing a linear optimization function with linear constarints and binary variables
Use scipy.optimize.minimize of the negative objective function.
Use the link to play and modify as you wish but here is application in the nutshell.
Lets say you have your data
&gt; array([[ 0.00749589,  0.01255155,  0.02396251,  0.04750988, 0.09495377]
&gt;        [ 0.01255155,  0.02510441,  0.04794055,  0.09502834,  0.18996269],
&gt;        [ 0.02396251,  0.04794055,  0.09631614,  0.19092151,  0.38165151],
&gt;        [ 0.04750988,  0.09502834,  0.19092151,  0.38341252,  0.7664427 ],
&gt;        [ 0.09495377,  0.18996269,  0.38165151,  0.7664427,   1.53713523]])

You should define your constraints dictionary in the following way (for example):
&gt; cons = ({'type': 'eq', 'fun': lambda x:  x[0] - 2 * x[1] + 2},  
&gt; {'type': 'ineq', 'fun': lambda x: -x[0] - 2 * x[1] + 6},       
&gt; {'type': 'ineq', 'fun': lambda x: -x[0] + 2 * x[1] + 2})

(accesing array/columns with indexing (x[0]) thats exactly your bats, bowls etc columns).
Next just pass your negative objective function and you maximized it.