math-optim/run.go
leo 3237fd16c6
All checks were successful
continuous-integration/drone/push Build is passing
actually don't run jDE with run_test.go
* an incomplete fix was attempted in 071cb75 but that did not prevent
  jDE from running with tests (as it does by default)
* bring func-local vars to pkg level to be able to manipulate them
  programatically (such as from tests)
* prevent jDE from running by setting -jde=false
* reword log message in test
2023-02-04 20:54:49 +01:00

81 lines
1.8 KiB
Go

// Copyright 2023 wanderer <a_mirre at utb dot cz>
// SPDX-License-Identifier: GPL-3.0-or-later
package main
import (
"flag"
"log"
"sync"
"git.dotya.ml/wanderer/math-optim/algo"
"git.dotya.ml/wanderer/math-optim/report"
)
var version = "development"
var (
doPrint = flag.Bool("printreport", true, "print report.tex to console")
generate = flag.Bool("generate", true, "run algos and generate plot pics/statistical tables (anew)")
rS = flag.Bool("randomsearch", false, "run Random Search algorithm")
sHC = flag.Bool("shc", false, "run Stochastic Hill Climbing algorithm")
n100 = flag.Bool("N100", false, "run the \"100 Neighbours\" variant of SHC")
// TODO(me): add flag for plot output format: -plotout=(svg,eps,pdf).
// run jDE by default.
jDE = flag.Bool("jde", true, "run Differential Evolution algorithm with parameter self adaptation")
)
func run() {
log.Println("starting math-optim version", "'"+version+"'")
flag.Parse()
if *generate {
if !*jDE && !*sHC && !*rS {
log.Println("at least one algo needs to be specified, exiting...")
return
}
var wg sync.WaitGroup
var m sync.Mutex
switch {
case *jDE:
wg.Add(1)
go algo.DojDE(&wg, &m)
case *rS:
wg.Add(1)
go algo.DoRandomSearch(&wg, &m)
case *sHC:
wg.Add(1)
if *n100 {
go algo.DoStochasticHillClimbing100Neigh(&wg, &m)
} else {
go algo.DoStochasticHillClimbing(&wg, &m)
}
}
wg.Wait()
// pL, benchCount := algo.PrepComparisonOfMeans(&wg)
// report.SaveComparisonOfMeans(*pL, benchCount)
report.SaveTexAllPics()
report.SaveTexAllTables()
}
report.SaveAndPrint(*doPrint)
log.Println("looks like we're done")
log.Println("run an equivalent of `pdflatex -clean -shell-escape -interaction=nonstopmode ./report.tex` to get a pdf")
}