/// <summary> /// Run an experiment. The experiment is Reset prior to run. /// If the saveProjectPath is present and exists, then the project will be /// saved to that location. If there are Save warnings, then true is still /// returned, but the warnings are in explanation. /// </summary> /// <param name="projectPathAndFile"></param> /// <param name="experimentName"></param> /// <param name="saveModelAfterRun"></param> /// <param name="explanation"></param> /// <returns></returns> public static bool RunModelExperiment(ISimioProject project, string saveProjectPath, string modelName, string experimentName, out string explanation) { explanation = ""; string marker = "Begin"; try { marker = $"Loading Model named={modelName}"; IModel model = LoadModel(project, modelName, out explanation); if (model == null) { return(false); } marker = $"Loading Experiment named={experimentName}"; IExperiment experiment = LoadExperiment(model, experimentName, out explanation); if (experiment == null) { return(false); } // Create some methods to handle experiment events. Events are: // RunStarted, RunProgessChanged, RunCompleted // ScenarioStarted, ScenarioEnded // ReplicationStarted, ReplicationEnded // // Here the 'e' is RunStartedEventArgs experiment.RunStarted += (s, e) => { LogIt($"Info: Event=> Experiment={experiment.Name} Run Started. "); }; // Here the 'e' is ReplicationEndedEventArgs experiment.ReplicationEnded += (s, e) => { LogIt($"Info: Event=> Ended Replication={e.ReplicationNumber} of Scenario={e.Scenario.Name}."); }; // Here the 'e' is ScenarioStartedEventArgs experiment.ScenarioStarted += (s, e) => { LogIt($"Info: Event=> Scenario={e.Scenario.Name} Started."); }; experiment.ScenarioEnded += (s, e) => { LogIt($"Info: Event=> Scenario={e.Scenario.Name} Ended."); }; // Here the 'e' is RunCompletedEventArgs experiment.RunCompleted += (s, e) => { LogIt($"Info: Event=> Experiment={experiment.Name} Run Complete. "); foreach (ITable table in model.Tables) { table.ExportForInteractive(); } }; // Now do the run. experiment.Reset(); experiment.Run(); //experiment.RunAsync(); // Another option // Let's look at some results var response = experiment.Responses; if (File.Exists(saveProjectPath)) { marker = $"Save Project After Experiment Run to={saveProjectPath}"; LogIt($"Info: {marker}"); string[] warnings; SimioProjectFactory.SaveProject(project, saveProjectPath, out warnings); explanation = ""; int nn = 0; foreach (string warning in warnings) { explanation += $"Save Warnings({warnings.Length}): Warning{++nn}:{warning}"; LogIt($"Warning: {warning}"); } } return(true); } catch (Exception ex) { throw new ApplicationException($"Marker={marker} Err={ex.Message}"); } }
/// <summary> /// Run an experiment /// </summary> /// <param name="projectPathAndFile"></param> /// <param name="experimentName"></param> /// <param name="saveModelAfterRun"></param> /// <param name="explanation"></param> /// <returns></returns> public static bool RunExperiment(string projectFullPath, string modelName, string experimentName, bool saveModelAfterRun, out string explanation) { explanation = ""; string marker = "Begin"; try { // Set an extensions path to where we can locate User Extensions, etc. string extensionsPath = System.AppDomain.CurrentDomain.BaseDirectory; marker = $"Setting Extensions Path to={extensionsPath}"; LogIt($"Info: {marker}"); SimioProjectFactory.SetExtensionsPath(extensionsPath); marker = $"Loading Project from={projectFullPath}"; ISimioProject project = LoadProject(projectFullPath, out explanation); if (project == null) { return(false); } marker = $"Loading Model named={modelName}"; IModel model = LoadModel(project, modelName, out explanation); if (model == null) { return(false); } marker = $"Loading Experiment named={experimentName}"; IExperiment experiment = LoadExperiment(model, experimentName, out explanation); if (experiment == null) { return(false); } // Create some methods to handle experiment events experiment.ReplicationEnded += (s, e) => { LogIt($"Info: Event=> Ended Replication={e.ReplicationNumber} of Scenario={e.Scenario.Name}."); }; experiment.ScenarioEnded += (s, e) => { LogIt($"Info: Event=> Scenario={e.Scenario.Name} Ended."); }; experiment.RunCompleted += (s, e) => { LogIt($"Info: Event=> Experiment={experiment.Name} Run Complete. "); }; // Now do the run. experiment.Reset(); experiment.Run(); //experiment.RunAsync(); // Another option if (saveModelAfterRun) { marker = $"Save Project After Experiment Run to= (SimioProjectFactory.SaveProject)"; LogIt($"Info: {marker}"); string[] warnings; SimioProjectFactory.SaveProject(project, projectFullPath, out warnings); foreach (string warning in warnings) { LogIt($"Warning: {warning}"); } } return(true); } catch (Exception ex) { throw new ApplicationException($"Marker={marker} Err={ex}"); } }
/// <summary> /// Run an experiment. The experiment is Reset prior to run. /// A loaded project is passed in that must contain the named Model and Experiment. /// If the saveProjectPath is present and exists, then the project will be /// saved to that location. If there are Save warnings, then true is still /// returned, but the warnings are in explanation. /// </summary> /// <param name="model"></param> /// <param name="experimentName"></param> /// <param name="explanation"></param> /// <returns></returns> public static bool RunModelExperiment(IModel model, string experimentName, out string explanation) { explanation = ""; string marker = "Begin"; try { marker = $"Loading Experiment named={experimentName}"; IExperiment experiment = LoadExperiment(model, experimentName, out explanation); if (experiment == null) { return(false); } // Create some methods to handle experiment events. Events are: // RunStarted, RunProgessChanged, RunCompleted // ScenarioStarted, ScenarioEnded // ReplicationStarted, ReplicationEnded // // Here the 'e' is RunStartedEventArgs experiment.RunStarted += (s, e) => { LogIt($"Info: Event=> Experiment={experiment.Name} Run Started. "); }; // Here the 'e' is ReplicationEndedEventArgs experiment.ReplicationEnded += (s, e) => { LogIt($"Info: Event=> Ended Replication={e.ReplicationNumber} of Scenario={e.Scenario.Name}."); }; // Here the 'e' is ScenarioStartedEventArgs experiment.ScenarioStarted += (s, e) => { LogIt($"Info: Event=> Scenario={e.Scenario.Name} Started."); }; experiment.ScenarioEnded += (s, e) => { LogIt($"Info: Event=> Scenario={e.Scenario.Name} Ended."); }; // Here the 'e' is RunCompletedEventArgs experiment.RunCompleted += (s, e) => { LogIt($"Info: Event=> Experiment={experiment.Name} Run Complete. "); foreach (ITable table in model.Tables) { table.ExportForInteractive(); } }; // Now do the run. LogIt($"Info: Resetting Experiment={experiment.Name}"); experiment.Reset(); LogIt($"Info: Running Experiment={experiment.Name}"); experiment.Run(); //experiment.RunAsync(); // Another option // Let's look at some results var response = experiment.Responses; return(true); } catch (Exception ex) { throw new ApplicationException($"Marker={marker} Err={ex.Message}"); } }