2025-01-27 00:13:00 +01:00
package solver
import (
"log"
"os"
"strconv"
"time"
)
// Perform some checks
// and
// Modify solver.row1s so it limits the workload to what is only desired.
2025-01-27 21:47:35 +01:00
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" )
2025-01-27 00:13:00 +01:00
os . Exit ( 1 )
}
defer solver . timeTrack ( time . Now ( ) , "Workload set" )
log . Println ( "Setting workload" )
2025-01-27 21:47:35 +01:00
log . Println ( "We are agent " + strconv . Itoa ( solver . Part ) + " of " + strconv . Itoa ( solver . Split ) )
2025-01-27 19:40:24 +01:00
workloads := solver . splitWorkload ( )
solver . setWorkload ( workloads )
2025-01-27 00:13:00 +01:00
}
// Determine how workload should be split among the agents
2025-01-27 19:40:24 +01:00
func ( solver * Solver ) splitWorkload ( ) [ ] int {
2025-01-27 21:47:35 +01:00
agents := make ( [ ] int , solver . Split )
2025-01-27 00:13:00 +01:00
var tracker int
var tasks int = len ( solver . row1s )
for tasks != 0 {
agents [ tracker ] += 1
tasks -= 1
tracker += 1
2025-01-27 21:47:35 +01:00
if tracker == solver . Split {
2025-01-27 00:13:00 +01:00
tracker = 0
}
}
return agents
}
// Set the workload by setting solver.row1s
2025-01-27 19:40:24 +01:00
func ( solver * Solver ) setWorkload ( agents [ ] int ) {
2025-01-27 00:13:00 +01:00
var start int = 0
var finish int = 0
for key , value := range agents {
2025-01-27 21:47:35 +01:00
if key == solver . Part - 1 {
2025-01-27 00:13:00 +01:00
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
2025-01-27 21:47:35 +01:00
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 ) )
2025-01-27 00:13:00 +01:00
}