// flipRecons permorms the flip algorithm on list of nodes an events. func flipRecons(r *events.Recons, nodes, evs []int) float64 { best := r.Cost() for doAgain := true; doAgain; { doAgain = false shuffle(nodes) for _, n := range nodes { prev := r.Rec[n].Flag shuffle(evs) for _, e := range evs { if e == prev { continue } r.Rec[n].Flag = e if r.DownPass(n) < best { break } } if r.Cost() < best { best = r.Cost() doAgain = true break } r.Rec[n].Flag = prev r.DownPass(n) } } return r.Cost() }