static void StopNReturn(IDMotorExperiment experiment) { _ea.RequestTerminateAndWait(); // Save performance data IGenomeDecoder <NeatGenome, IBlackBox> deco = experiment.CreateGenomeDecoder(); IBlackBox nn = deco.Decode(_ea.CurrentChampGenome); SavePerformance(nn); SaveValidation(nn); // Save genome to xml file. XmlWriterSettings xwSettings = new XmlWriterSettings(); xwSettings.Indent = true; using (XmlWriter xw = XmlWriter.Create(GenomeFolder + NameFile + "_" + MaxTMin + "m" + ".gnm.xml", xwSettings)) { experiment.SavePopulation(xw, new NeatGenome[] { _ea.CurrentChampGenome }); } Console.WriteLine(NameFile + "finished. Continuing to the next data set => \n"); }
static void Main(string[] args) { for (; ;) { string[] cmdArgs = Console.ReadLine().Split(' '); ControlSignal = unpackControlSignal(csFile); switch (cmdArgs[0]) { case "Evolve": { if (cmdArgs.Length == 2) { safeNamesFile = cmdArgs[1]; } SetSafeNames(); SetDataFiles(); for (i = 0; i < dataFiles.GetLength(0); i++) { SetCurrentNameFile(); // Initialise log4net (log to console). XmlConfigurator.Configure(new FileInfo("log4net.properties")); // Experiment classes encapsulate much of the nuts and bolts of setting up a NEAT search. IDMotorExperiment experiment = new IDMotorExperiment(); //Set training datasets IDMotorUtils.SetData(dataFiles[i]); // Load config XML. xmlConfig.Load("IDMotor.config.xml"); experiment.Initialize("IDMotor", xmlConfig.DocumentElement); // Create a genome factory with our neat genome parameters object and the appropriate number of input and output neuron genes. _genomeFactory = experiment.CreateGenomeFactory(); // Create an initial population of randomly generated genomes. _genomeList = _genomeFactory.CreateGenomeList(1000, 0); // Create evolution algorithm and attach update event. _ea = experiment.CreateEvolutionAlgorithm(_genomeFactory, _genomeList); _ea.UpdateEvent += new EventHandler(ea_UpdateEvent); // Start algorithm (it will run on a background thread). T0 = DateTime.Now; now = T0; next = false; _ea.StartContinue(); while (!(((now - T0).Minutes >= MaxTMin)) || next) { now = DateTime.Now; } StopNReturn(experiment); } break; } case "Validate": { if (cmdArgs.Length == 2) { genomeNameFile = cmdArgs[1]; } StreamReader gnmReader = new StreamReader(genomeNameFile); string[] gnmfiles = gnmReader.ReadToEnd().Split('\n'); gnmReader.Close(); IDMotorExperiment _experiment = new IDMotorExperiment(); xmlConfig = new XmlDocument(); xmlConfig.Load("IDMotor.config.xml"); _experiment.Initialize("IDMotor", xmlConfig.DocumentElement); for (i = 0; i < gnmfiles.GetLength(0); i++) { NameFile = gnmfiles[i].Replace(".gnm.xml", "").Replace("\r", ""); Console.WriteLine("Validating {0}...", NameFile); XmlReader xr = XmlReader.Create(GenomeFolder + NameFile + ".gnm.xml"); _genomeList = _experiment.LoadPopulation(xr); IGenomeDecoder <NeatGenome, IBlackBox> _genomeDecoder = _experiment.CreateGenomeDecoder(); IBlackBox nn = _genomeDecoder.Decode(_genomeList[0]); SaveValidation(nn); Console.WriteLine("Done."); } break; } default: Console.WriteLine("Error, Evolve or Validate only."); break; } // Hit return to quit. Console.ReadLine(); } }
private void btnStart_Click(object sender, EventArgs e) { try { #region NNInit IDMotorExperiment _experiment = new IDMotorExperiment(); xmlConfig = new XmlDocument(); xmlConfig.Load("IDMotor.config.xml"); _experiment.Initialize("IDMotor", xmlConfig.DocumentElement); _activationScheme = ExperimentUtils.CreateActivationScheme(xmlConfig.DocumentElement, "Activation"); XmlReader xr = XmlReader.Create(genomeFile); List <NeatGenome> _genomeList = _experiment.LoadPopulation(xr); _genomeDecoder = new NeatGenomeDecoder(_activationScheme); neatGenome = _genomeList[0]; box = _genomeDecoder.Decode(neatGenome); #endregion if (chkMotor.Checked) { #region Encoder Init digitalTask = new Task("digitalTask"); double zIndexValue = Convert.ToDouble(zIndexValueTextBox.Text); int pulsePerRev = Convert.ToInt32(pulsePerRevTextBox.Text); zIndexEnable = zIndexEnabledCheckBox.Checked; switch (decodingTypeComboBox.SelectedIndex) { case 0: //X1 encoderType = CIEncoderDecodingType.X1; break; case 1: //X2 encoderType = CIEncoderDecodingType.X2; break; case 2: //X4 encoderType = CIEncoderDecodingType.X4; break; } switch (zIndexPhaseComboBox.SelectedIndex) { case 0: //A High B High encoderPhase = CIEncoderZIndexPhase.AHighBHigh; break; case 1: //A High B Low encoderPhase = CIEncoderZIndexPhase.AHighBLow; break; case 2: //A Low B High encoderPhase = CIEncoderZIndexPhase.ALowBHigh; break; case 3: //A Low B Low encoderPhase = CIEncoderZIndexPhase.ALowBLow; break; } digitalTask.CIChannels.CreateAngularEncoderChannel(counterComboBox.Text, "", encoderType, zIndexEnable, zIndexValue, encoderPhase, pulsePerRev, 0.0, CIAngularEncoderUnits.Radians); digitalTask.Control(TaskAction.Verify); digitalReader = new CounterMultiChannelReader(digitalTask.Stream); digitalTask.Start(); #endregion #region Vout Init waveTask = new Task("ControlVoltageTask"); waveTask.AOChannels.CreateVoltageChannel(physicalChannelComboBox.Text, "", Convert.ToDouble(minimumTextBox.Text), Convert.ToDouble(maximumTextBox.Text), AOVoltageUnits.Volts); // verify the task before doing the waveform calculations waveTask.Control(TaskAction.Verify); writer = new AnalogSingleChannelWriter(waveTask.Stream); waveTask.Start(); #endregion } box.ResetState(); actualPos = 0; n = 0; tmrRefresh.Enabled = true; btnStart.Enabled = false; btnStopDemo.Enabled = true; motorPos = 0; ti = DateTime.Now; ta = ti; if (csFile != null && ControlSignal == null) { ControlSignal = unpackControlSignal(csFile); } i = 0; if (!chckBoxWarmUp.Checked) { csvWriter = new StreamWriter(dataFile); } } catch (Exception ex) { MessageBox.Show(ex.Message); } }