package solver import ( "log" "os" "strconv" "time" ) // Perform some checks // and // Modify solver.row1s so it limits the workload to what is only desired. func (solver *Solver) selectWorkload() { if solver.split > len(solver.row1s) { log.Println("ERROR: Unable to divide the workload in " + strconv.Itoa(solver.split) + " parts, when only " + strconv.Itoa(len(solver.row1s)) + " are available.\n\n") os.Exit(1) } defer solver.timeTrack(time.Now(), "Workload set") log.Println("Setting workload") log.Println("We are agent " + strconv.Itoa(solver.part) + " of " + strconv.Itoa(solver.split)) workloads := solver.splitWorkload() solver.setWorkload(workloads) } // Determine how workload should be split among the agents func (solver *Solver) splitWorkload() []int { agents := make([]int, solver.split) var tracker int var tasks int = len(solver.row1s) for tasks != 0 { agents[tracker] += 1 tasks -= 1 tracker += 1 if tracker == solver.split { tracker = 0 } } return agents } // Set the workload by setting solver.row1s func (solver *Solver) setWorkload(agents []int) { var start int = 0 var finish int = 0 for key, value := range agents { if key == solver.part-1 { finish = start + value break } else { start += value } } // Set the shortened set of instructions solver.row1s = solver.row1s[start:finish] // Recalculate how much we need to grind through solver.iter = int64(len(solver.row1s)) * int64(len(solver.row2s)) * int64(len(solver.row3s)) * int64(len(solver.row4s)) * int64(len(solver.row5s)) * int64(len(solver.row6s)) * int64(len(solver.row7s)) * int64(len(solver.row8s)) * int64(len(solver.row9s)) }