#6 Improved estimation algorithm
This commit is contained in:
		| @@ -125,24 +125,25 @@ func (solver *Solver) tracker() { | |||||||
| 			rate_diff = rate_stop - rate_start | 			rate_diff = rate_stop - rate_start | ||||||
|  |  | ||||||
| 			// 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 && rate_start > 1 { | 			if rate_diff == 0 && int(percentage) > 1 { | ||||||
| 				percentage = 100 | 				percentage = 100 | ||||||
| 				solver.counter = solver.iter | 				solver.counter = solver.iter | ||||||
| 			} | 			} | ||||||
|  |  | ||||||
| 			timer_elapsed := time.Since(timer_start) | 			timer_elapsed := time.Since(timer_start) | ||||||
| 			rate := int64(rate_diff) / int64(timer_elapsed.Seconds()) | 			rate := int64(rate_diff) / int64(timer_elapsed.Seconds()) | ||||||
|  | 			solver.rates = append(solver.rates, rate) | ||||||
|  | 			rate_avg := solver.calc_avg() | ||||||
|  |  | ||||||
| 			// Estimate when this is finished: | 			// Estimate when this is finished | ||||||
| 			// TODO: Make this Bayesian |  | ||||||
| 			if rate_diff == 0 { | 			if rate_diff == 0 { | ||||||
| 				est_fin = "N/A" | 				est_fin = "N/A" | ||||||
| 			} else { | 			} else { | ||||||
| 				est_fin = solver.secondsToHuman((int(solver.iter) - int(solver.counter)) / int(rate)) | 				est_fin = solver.secondsToHuman((int(solver.iter) - int(solver.counter)) / int(rate_avg)) | ||||||
| 			} | 			} | ||||||
|  |  | ||||||
| 			// Printing the meat | 			// Printing the meat | ||||||
| 			log.Println("Processing: " + strconv.Itoa(int(percentage)) + "% (" + strconv.Itoa(int(solver.counter)) + "/" + strconv.Itoa(int(solver.iter)) + "); Rate (avg): " + 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) | ||||||
|  |  | ||||||
| 			// Wrap up the loop or break | 			// Wrap up the loop or break | ||||||
| 			if int(percentage) > track { | 			if int(percentage) > track { | ||||||
| @@ -153,10 +154,14 @@ func (solver *Solver) tracker() { | |||||||
| 			rate_start = rate_stop | 			rate_start = rate_stop | ||||||
| 			timer_start = time.Now() | 			timer_start = time.Now() | ||||||
|  |  | ||||||
| 			if rate_diff == 0 && rate_start > 100 { | 			if percentage == 100 { | ||||||
| 				break | 				break | ||||||
| 			} | 			} | ||||||
|  |  | ||||||
|  | 		} else { | ||||||
|  | 			log.Println(percentage) | ||||||
|  | 			log.Println(solver.counter) | ||||||
|  | 			log.Println(rate_diff) | ||||||
| 		} | 		} | ||||||
| 		time.Sleep(1 * time.Second) | 		time.Sleep(1 * time.Second) | ||||||
|  |  | ||||||
| @@ -219,3 +224,16 @@ func (solver *Solver) validate_combination(row1 int, row2 int, row3 int, row4 in | |||||||
|  |  | ||||||
| 	return retval | 	return retval | ||||||
| } | } | ||||||
|  |  | ||||||
|  | func (solver *Solver) calc_avg() int { | ||||||
|  | 	var avg_sum int64 | ||||||
|  | 	var avg int | ||||||
|  |  | ||||||
|  | 	for _, value := range solver.rates { | ||||||
|  | 		avg_sum += value | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	avg = int(avg_sum) / len(solver.rates) | ||||||
|  |  | ||||||
|  | 	return avg | ||||||
|  | } | ||||||
|   | |||||||
| @@ -23,4 +23,5 @@ type Solver struct { | |||||||
| 	iter      int64 | 	iter      int64 | ||||||
| 	counter   int64 | 	counter   int64 | ||||||
| 	solutions []string | 	solutions []string | ||||||
|  | 	rates     []int64 | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user