| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- 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) select_workload() {
- 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.split_workload()
- solver.set_workload(workloads)
- }
- // Determine how workload should be split among the agents
- func (solver *Solver) split_workload() []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) set_workload(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))
- }
|