func NewExperiment(ctx neat.Context, cfg neat.ExperimentSettings, t int) (exp *neat.Experiment, err error) { // Create the experiment exp = &neat.Experiment{ExperimentSettings: cfg} exp.SetContext(ctx) // Restore the saved setting and, if available, state if *ConfigName == "" { *ConfigName = os.Args[0] // Use the executable's name } rst := &archiver.File{ FileSettings: ConfigSettings{path: *ConfigPath, name: *ConfigName}, } if err = rst.Restore(ctx); err != nil { return } // Update helpers with trial number if t > NoTrials { hs := []interface{}{ ctx.Archiver(), ctx.Comparer(), ctx.Crosser(), ctx.Decoder(), ctx.Evaluator(), ctx.Generator(), ctx.Mutator(), ctx.Searcher(), ctx.Speciater(), ctx.Visualizer(), } for _, h := range hs { if th, ok := h.(neat.Trialable); ok { th.SetTrial(t) } } } // Load ids and innovations if ph, ok := ctx.(neat.Populatable); ok { ph.SetPopulation(exp.Population()) } return }