#7 (Should) fix end-state issue.

This commit is contained in:
Sacha Ligthert 2025-01-25 17:32:11 +01:00
parent 26b78420a2
commit acf6ad1bb9

View File

@ -98,36 +98,43 @@ func (solver *Solver) tracker() {
defer solver.timeTrack(time.Now(), "Validated solutions") defer solver.timeTrack(time.Now(), "Validated solutions")
log.Println("Validating solutions") log.Println("Validating solutions")
// Tracking percenting an progress // Determine if the main-loop is done
var done bool
// Tracking progress in percentages
var percentage float32 var percentage float32
// Tracking progress in validated solutions
var track int var track int
// Tracking the rate // Tracking the rate, starting point
var rate_start int var rate_start int64
var rate_stop int // Tracking the rate, difference between previous iterations
var rate_diff int var rate_diff int64
// Tracking duration // Tracking duration
var timer_start = time.Now() var timer_start = time.Now()
// Prevent division-by-zero error when establishing `rate` // Prevent division-by-zero error when establishing `rate_diff`
time.Sleep(time.Second) time.Sleep(time.Second)
// Estimation how long it will take // Estimation how long it will take
var est_fin string var est_fin string
for solver.iter != solver.counter { // for solver.iter != solver.counter { // Start for-loop
for !done {
// Determine how far we are. // Determine how far we are.
percentage = (float32(solver.counter) / (float32(solver.iter) / 100)) percentage = (float32(solver.counter) / (float32(solver.iter) / 100))
if track <= int(percentage) {
// Reset the loop // Reset the loop
rate_stop = int(solver.counter) rate_diff = solver.counter - rate_start
rate_diff = rate_stop - rate_start
if track <= int(percentage) || rate_diff == 0 { // Start if-statement
// Make sure something happened, making rate_start the only reliable variable // Make sure something happened, making rate_start the only reliable variable
if rate_diff == 0 && int(percentage) > 1 { if rate_diff == 0 {
percentage = 100 percentage = 100
solver.counter = solver.iter solver.counter = solver.iter
done = true
} }
timer_elapsed := time.Since(timer_start) timer_elapsed := time.Since(timer_start)
@ -142,30 +149,31 @@ func (solver *Solver) tracker() {
est_fin = solver.secondsToHuman((int(solver.iter) - int(solver.counter)) / int(rate_avg)) est_fin = solver.secondsToHuman((int(solver.iter) - int(solver.counter)) / int(rate_avg))
} }
// Printing the meat // Printing the progress
log.Println("Processing: " + strconv.Itoa(int(percentage)) + "% (" + strconv.Itoa(int(solver.counter)) + "/" + strconv.Itoa(int(solver.iter)) + "); Rate: " + strconv.Itoa(int(rate)) + "/sec for " + timer_elapsed.String() + "; Time left (est.): " + est_fin) log.Println("Processing: " + strconv.Itoa(int(percentage)) + "% (" + strconv.Itoa(int(solver.counter)) + "/" + strconv.Itoa(int(solver.iter)) + "); Rate: " + strconv.Itoa(int(rate)) + "/sec for " + timer_elapsed.String() + "; Time left (est.): " + est_fin)
// After we are done printing, exit this for-loop
if percentage == 100 {
break
}
// Wrap up the loop or break // Wrap up the loop or break
if int(percentage) > track { if int(percentage) > track {
track = int(percentage) track = int(percentage)
} else { } else {
track = track + 1 track = track + 1
} }
rate_start = rate_stop
timer_start = time.Now() timer_start = time.Now()
if percentage == 100 {
break
} }
} else { // Resert the rate counter
log.Println(percentage) rate_start = solver.counter
log.Println(solver.counter) // Sleep for a second
log.Println(rate_diff)
}
time.Sleep(1 * time.Second) time.Sleep(1 * time.Second)
} } // End for-loop
} }