A practical algorithm for volume estimation based on billiard trajectories and simulated annealing