예제 #1
0
파일: main.go 프로젝트: gidden/cloudlus
func genDakotaFile(tmplName string, addr string) {
	scen := &scen.Scenario{}
	err := scen.Load(*scenfile)
	check(err)
	scen.Addr = addr

	tmpl, err := template.ParseFiles(tmplName)
	check(err)

	n := 100 + 1*len(scen.LowerBounds())
	if *npop != 0 {
		n = *npop
	} else if n < 100 {
		n = 100
	}

	config := &Config{
		Scenario:   scen,
		MaxIter:    *maxiter,
		MaxEval:    *maxeval,
		PopSize:    n,
		MaxConcurr: *parallel,
		Seed:       *seed,
	}

	err = tmpl.Execute(os.Stdout, config)
	check(err)
}
예제 #2
0
파일: main.go 프로젝트: gidden/cloudlus
func main() {
	var err error
	flag.Parse()
	optim.Rand = rand.New(rand.NewSource(int64(*seed)))

	if _, err := os.Stat(*dbname); !os.IsNotExist(err) && *restart < 0 {
		log.Fatalf("db file '%v' already exists", *dbname)
	}

	db, err = sql.Open("sqlite3", *dbname)
	check(err)
	defer db.Close()

	if *addr != "" {
		client, err = cloudlus.Dial(*addr)
		check(err)
		defer client.Close()
	}

	params := make([]int, flag.NArg())
	for i, s := range flag.Args() {
		params[i], err = strconv.Atoi(s)
		check(err)
	}

	// load problem scen file
	scen := &scen.Scenario{}
	err = scen.Load(*scenfile)
	check(err)

	f1, err := os.Create(*objlog)
	check(err)
	defer f1.Close()
	f4, err := os.Create(*runlog)
	check(err)
	defer f4.Close()

	// create and initialize solver
	lb := scen.LowerBounds()
	ub := scen.UpperBounds()

	step := (ub[0] - lb[0]) / 10
	var it optim.Method

	if *restart >= 0 {
		it, step = loadIter(lb, ub, *restart)
	} else {
		it = buildIter(lb, ub)
	}

	obj := &optim.ObjectiveLogger{Obj: &obj{scen, f4}, W: f1}

	m := &optim.BoxMesh{Mesh: &optim.InfMesh{StepSize: step}, Lower: lb, Upper: ub}

	// this is here so that signals goroutine can close over it
	solv := &optim.Solver{
		Method:       it,
		Obj:          obj,
		Mesh:         m,
		MaxIter:      *maxiter,
		MaxEval:      *maxeval,
		MaxNoImprove: *maxnoimprove,
	}

	// handle signals
	start := time.Now()
	sigs := make(chan os.Signal, 1)
	signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
	go func() {
		<-sigs
		f1.Close()
		f4.Close()
		fmt.Println("\n*** optimizer killed early ***")
		final(solv, start)
		os.Exit(1)
	}()

	// solve and print results
	for solv.Next() {
		fmt.Printf("Iter %v (%v evals):  %v\n", solv.Niter(), solv.Neval(), solv.Best())
	}

	final(solv, start)
}