Exemplo n.º 1
0
        public void RunMultiAsync(StartMultirunBindingSource parameters, Dispatcher context, Func<bool> startAction, Action<Experiment.ExperimentData> endAction, Action<string> stateChangedAction)
        {
            ThreadPool.QueueUserWorkItem(o =>
            {
                aex.Protect(() =>
                    {
                        // load model if VISSIM is not instanciated or save model otherwise
                        if (!vissim.IsInstanciated)
                        {
                            LoadModelToVissim(true);
                        }
                        else SaveModelToVissim();

                        // perform prep. actions (ask user for DataCollections, Evaluations and etc.)
                        bool canContinue = true;
                        context.Invoke(DispatcherPriority.Background, new ThreadStart(delegate()
                        {
                            canContinue = startAction();
                        }));
                        if (!canContinue) return;

                        var gr = vissim.Instance.Graphics.Wrap();
                        bool wasVisualizationEnabled = gr.IsVisualizationEnabled;
                        if (!gr.IsVisualizationEnabled ^ parameters.DisableAnimation) gr.IsVisualizationEnabled = !parameters.DisableAnimation;

                        var sim = vissim.Instance.Simulation;

                        long startTicks = DateTime.Now.Ticks;

                        //sim.RunMulti();

                        int i = 0;

                        simulationState.IsSimulationRunning = true;
                        try
                        {
                            while (parameters.NumberOfRuns > i && !simulationState.SimulationWasStopped)
                            {
                                sim.RunIndex = i++;
                                sim.RandomSeed = (int)DateTime.Now.Ticks;
                                sim.Comment = string.Format("Simulation random seed = {0}", sim.RandomSeed);

                                context.Invoke(DispatcherPriority.Normal, new ThreadStart(delegate()
                                {
                                    stateChangedAction(string.Format("Simulation ...\nRun {0} of {1}", i, parameters.NumberOfRuns));
                                }));

                                aex.Protect(() => sim.RunContinuous());

                                aex.Protect(() => vissim.Instance.DoEvents());
                            }
                        }
                        finally
                        {
                            if (wasVisualizationEnabled != gr.IsVisualizationEnabled) gr.IsVisualizationEnabled = wasVisualizationEnabled;
                            simulationState.IsSimulationRunning = false;
                            if (simulationState.SimulationWasStopped) simulationState.SimulationWasStopped = false;
                        }

                        var data = new Experiment.ExperimentData()
                        {
                            CreatedOn = DateTime.Now,
                            Duration = new TimeSpan(DateTime.Now.Ticks - startTicks),
                            //Period = new TimeSpan(0, 0, (int)sim.Period * i),
                            IsCountersEvaluationEnabled = vissim.Instance.Evaluation.Wrap().IsDataCollectionsEnabled,
                            IsTravelTimesEvaluationEnabled = vissim.Instance.Evaluation.Wrap().IsTravelTimeEnabled,
                            NumberOfRuns = i
                        };

                        context.Invoke(DispatcherPriority.Background,
                            new ThreadStart(delegate()
                        {
                            endAction(data);
                        }));
                    });
            });
        }
Exemplo n.º 2
0
        public void RunSimulationAsync(Dispatcher context, Func<bool> startAction, Action<Experiment.ExperimentData> endAction)
        {
            ThreadPool.QueueUserWorkItem(o =>
            {
                aex.Protect(() =>
                    {
                        // load model if VISSIM is not instanciated or save model otherwise
                        if (!vissim.IsInstanciated)
                        {
                            LoadModelToVissim(true);
                        }
                        else SaveModelToVissim();

                        // perform prep. actions (ask user for DataCollections, Evaluations and etc.)
                        bool canContinue = true;
                        context.Invoke(DispatcherPriority.Background, new ThreadStart(delegate()
                        {
                            canContinue = startAction();
                        }));
                        if (!canContinue) return;

                        var sim = vissim.Instance.Simulation;

                        long startTicks = DateTime.Now.Ticks;
                        simulationState.IsSimulationRunning = true;

                        try
                        {
                            aex.Protect(() => sim.RunContinuous());
                        }
                        finally
                        {
                            simulationState.IsSimulationRunning = false;
                            if (simulationState.SimulationWasStopped) simulationState.SimulationWasStopped = false;
                        }

                        var data = new Experiment.ExperimentData()
                        {
                            CreatedOn = DateTime.Now,
                            Duration = new TimeSpan(DateTime.Now.Ticks - startTicks),
                            //Period = new TimeSpan(0, 0, (int)sim.Period),
                            IsCountersEvaluationEnabled = vissim.Instance.Evaluation.Wrap().IsDataCollectionsEnabled,
                            IsTravelTimesEvaluationEnabled = vissim.Instance.Evaluation.Wrap().IsTravelTimeEnabled,
                            NumberOfRuns = 1
                        };

                        context.Invoke(DispatcherPriority.Background, new ThreadStart(delegate()
                        {
                            endAction(data);
                        }));
                    });
            });
        }
Exemplo n.º 3
0
        public void CreateRootExperiment()
        {
            // create new experiment folder
            var di = Directory.CreateDirectory(manager.GetLoadedExperimentModelDir(modelName));
            
            // copy main model folder to new model folder
            string s = manager.GetModelDir(modelName);
            SysAdmin.CopyDirectory(s, di.FullName);

            // create experiment data file in the experiment folder
            var expData = new Experiment.ExperimentData()
            {
                //Alanyze = false,
                CreatedOn = DateTime.Now,
                Description = "Zero Experiment (created automatically)",
                //Duration = new TimeSpan(0),
                //DurationTicks = 0
            };

            expData.Save(manager.GetLoadedExperimentDataFileName(modelName));
        }