From 6671984db3dfb0984990b24a9ee15b4ff5d428a8 Mon Sep 17 00:00:00 2001 From: andrew-torda <55841222+andrew-torda@users.noreply.github.com> Date: Sun, 22 Aug 2021 11:01:19 +0200 Subject: [PATCH] main is just a call to the real main routine which is set up to make testing easy. --- main.go | 137 +++----------------------------------------------------- 1 file changed, 5 insertions(+), 132 deletions(-) diff --git a/main.go b/main.go index 680f73e..60637ae 100644 --- a/main.go +++ b/main.go @@ -3,151 +3,24 @@ // Ackley_mc is for playing with Monte Carlo or simulated annealing on the // ackley function in N dimensions. // -// ackley_mc [-n nthread] [-v] ini fnl seed n_step x_ini -// so, -// go run . 200 100 1637 300 1,2,3 -// will start at 200, cool down to 100 over 300 steps and use 1637 as the -// randome number seed. It will be a 3 dimensional function starting from the -// coordinates 1,2,3 +// ackley_mc input_file +// where input_file has a list of keywords and values. package main import ( - "os" "fmt" - "flag" - "strconv" - "strings" - - "ackley_mc/ackley" + "os" + "ackley_mc/ackwork" ) -const ndimDflt = 2 const ( exitSuccess = iota exitFailure ) -type mcPrm struct { - iniTmp, fnlTmp float32 - xIni []float32 - nStep uint32 - nRun uint32 - verbose bool -} - -var seed int64 - -// usage -func usage() { - u := ` -[options] seed initial_temp final_temp num_steps initial_x -and the initial_x is a comma separated list of values like "7,7,7"` - fmt.Fprintln(flag.CommandLine.Output(), "usage of %s", os.Args[0], u) - flag.PrintDefaults() -} - -// cmdln sorts out the command line -func cmdLn() (mcPrm, error) { - var mcPrm mcPrm = mcPrm {nRun: 1, verbose: true} - - var utmp uint - flag.UintVar(&utmp, "r", 1, "number of runs") - flag.BoolVar(&mcPrm.verbose, "v", true, "verbose") - flag.Usage = usage - flag.Parse() - mcPrm.nRun = uint32 (utmp) - var err error - tooFewArgs := fmt.Errorf ("Too few command line arguments") - getf := func (s string) float32 { - if err != nil { - return 0.0 } - if s == "" { - err = tooFewArgs - } - r := 0. - r, err = strconv.ParseFloat(s, 32) - return float32(r) - } - getu := func (s string) uint32 { - if err != nil { - return 0} - if s == "" { - err = tooFewArgs - return 0 - } - var u uint64 - u, err = strconv.ParseUint(s, 10, 32) - return uint32(u) - } - - getx := func (s string) []float32 { - if err != nil { - return nil - } - if s == "" { - err = tooFewArgs - return nil - } - y := strings.Split(s, ",") - if len(y) < 1 { - err = fmt.Errorf("broke trying to get initial x values") - return nil - } - x := make ([]float32, len(y)) - for i, s := range y { - r := 0. - if r, err = strconv.ParseFloat(s, 32); err != nil { - return nil - } - x[i] = float32(r) - } - return x - } - if flag.NArg() != 4 && false{ - flag.Usage() - return mcPrm, fmt.Errorf("Wrong number of command line args") - } - mcPrm.iniTmp = getf(flag.Arg(0)) - mcPrm.fnlTmp = getf(flag.Arg(1)) - seed = int64 (getu(flag.Arg(2))) - mcPrm.nStep = getu(flag.Arg(3)) - mcPrm.xIni = getx (flag.Arg(4)) - if err != nil { - return mcPrm, err - } - - if mcPrm.verbose { - fmt.Println ("initial temp:", mcPrm.iniTmp, - "\nfinal temp:", mcPrm.fnlTmp, - "\nseed:", seed, - "\nn steps:", mcPrm.nStep, - "\nn runs:", mcPrm.nRun, - "\ninitial x:", mcPrm.xIni) - - } - return mcPrm, nil -} - - - -// myMain -func myMain () error { - var mcPrm mcPrm - var err error - if mcPrm, err = cmdLn(); err != nil { - return err - } - - x := [1]float32{0.001} - fmt.Println("ackley ", ackley.Ackley(x[:])) - fmt.Println("mcPrm", mcPrm) - doRun (mcPrm) - doRun (mcPrm) - return nil -} func main() { - if err := myMain (); err != nil { + if err := ackwork.MyMain (); err != nil { fmt.Println (os.Stderr, err) os.Exit (exitFailure) } -- GitLab