// Copyright 2022 wanderer // SPDX-License-Identifier: GPL-3.0-or-later package stats import ( "encoding/json" "io/ioutil" "log" "git.dotya.ml/wanderer/math-optim/util" ) // BenchRound holds the iteration couter value and Results of size 'maxFES'. type BenchRound struct { Iteration int Results []float64 } type FuncStats struct { BenchName string Solution []BenchRound } type Stats struct { Algo string Dimens int BenchFuncStats []FuncStats Iterations int Generations int } func GetFuncStats(funcName string, solution []BenchRound) FuncStats { f := FuncStats{ BenchName: funcName, Solution: solution, } return f } func GetStats(algo string, dimens int, benchFuncStats []FuncStats, iterations, generations int) Stats { s := Stats{ Algo: algo, Dimens: dimens, BenchFuncStats: benchFuncStats, Iterations: iterations, Generations: generations, } return s } func SaveStats(stats []Stats, fName string) { prefix := "out/stats/" ext := ".json" // create required folders, bail early in case of an error. if err := util.CreatePath(prefix); err != nil { log.Fatalln("went to create stats dir, there was an issue: ", err) } if j, err := json.MarshalIndent(stats, "", " "); err != nil { log.Fatal(err) } else { log.Println("saving json stats to:", prefix+fName+ext) if err = ioutil.WriteFile(prefix+fName+ext, j, 0o600); err != nil { log.Println("error saving stats to file:", err) } } }