Example #1
0
 void AddEstimates()
 {
     foreach (var o in _model.LeafObstacles())
     {
         var satRates = _model.satisfactionRateRepository.GetObstacleSatisfactionRates(o.Identifier);
         if (satRates == null)
         {
             Console.WriteLine($"Obstacle '{o.Identifier}' not estimated.");
         }
         else
         {
             var estimates = satRates.Where(x => x.ExpertIdentifier != null);
             foreach (var estimate in estimates)
             {
                 if (estimate is QuantileList qd)
                 {
                     try
                     {
                         ef.AddEstimate(estimate.ExpertIdentifier, o.Identifier, qd.Quantiles.ToArray());
                     } catch (Exception e) {
                         Console.WriteLine("---");
                         Console.WriteLine($"An error occured while adding estimate for '{o.Identifier}' by expert '{estimate.ExpertIdentifier}'");
                         Console.WriteLine(e.Message);
                         Console.WriteLine(e.StackTrace);
                         Console.WriteLine("---");
                     }
                 }
                 else
                 {
                     throw new NotImplementedException("Distribution not supported");
                 }
             }
         }
     }
 }
Example #2
0
        void Initialize()
        {
            RootSatisfactionRates = new Dictionary <string, DoubleSatisfactionRate>();
            TimeSpan monitoringDelay = TimeSpan.FromMinutes(1);

            // Create the new obstacle monitors
            foreach (var obstacle in _model_running.LeafObstacles()
                     .Where(x => x.CustomData.ContainsKey("monitored") &&
                            x.CustomData["monitored"].Equals("true")))
            {
                IStateInformationStorage storage = new FiniteStateInformationStorage(100);
                var monitor = new ObstacleMonitor(obstacle, _model_running, storage, monitoringDelay);
                obstacleMonitors.Add(obstacle.Identifier, monitor);
            }

            // Initialize the propagator
            _propagator = new BDDBasedPropagator(_model_running);
            foreach (var root in _roots)
            {
                _propagator.PreBuildObstructionSet(root);
                RootSatisfactionRates.Add(root.Identifier, null);
            }
        }
Example #3
0
        public static void Main(string[] args)
        {
            //DeployAmbulanceAtStationAllocator();
            //Thread.Sleep(TimeSpan.FromSeconds(10));

            Console.WriteLine("Hello World!");
            var monitoringDelay = TimeSpan.FromSeconds(1);

            logger.Info("Connecting to database");
            var provider         = new PostgreSQLDatabaseProvider();
            var connectionString = ConfigurationManager.ConnectionStrings["postgres"].ConnectionString;

            var config = DatabaseConfiguration.Build()
                         .UsingConnectionString(connectionString)
                         .UsingProvider(provider)
                         .UsingDefaultMapper <ConventionMapper>();

            db = new Database(config);
            incidentRepository      = new IncidentRepository(db);
            ambulanceRepository     = new AmbulanceRepository(db);
            allocationRepository    = new AllocationRepository(db);
            hospitalRepository      = new HospitalRepository(db);
            configurationRepository = new ConfigurationRepository(db);
            logger.Info("Connected to database");

            logger.Info("Building KAOS model.");
            var filename = "./Models/simple.kaos";
            var parser   = new KAOSTools.Parsing.ModelBuilder();

            model = parser.Parse(File.ReadAllText(filename), filename);
            var model2 = parser.Parse(File.ReadAllText(filename), filename);

            ActiveResolutions = Enumerable.Empty <Resolution>();

            var declarations = parser.Declarations;

            logger.Info("(done)");

            logger.Info("Configuring monitors.");
            // Configure all the monitors (for all obstacles and domain properties).
            KAOSMetaModelElement[] goals     = model.Goals().ToArray();
            KAOSMetaModelElement[] obstacles = model.LeafObstacles().ToArray();
            var projection = new HashSet <string>(GetAllPredicates(goals));

            monitor = new GoalMonitor(model, goals.Union(obstacles), projection, HandleFunc,
                                      // new TimedStateInformationStorage(TimeSpan.FromMinutes(60), TimeSpan.FromMinutes(120)),
                                      monitoringDelay);
            logger.Info("(done)");

            foreach (var p in model.Predicates())
            {
                Console.WriteLine(p.FriendlyName);
            }

            // What goals and obstacles should appear in LOG
            cpsGoals     = model.Goals(x => x.CustomData.ContainsKey("log_cps"));
            cpsObstacles = model.Obstacles(x => x.CustomData.ContainsKey("log_cps"));

            // Initialize obstruction sets
            obstructionLock = new object();
            ComputeObstructionSets();

            Console.WriteLine("Waiting ...");
            Console.ReadKey();

            logger.Info("Launching monitors");
            monitor.Run(false);

            var goalMonitorProcessor = new GoalMonitorProcessor(monitor);

            csvExport = new CSVGoalExportProcessor("experiment-goal.csv", "experiment-obstacle.csv");
            // goalMonitorProcessor.AddProcessor(csvExport, monitoringDelay);

            new Timer((state) => UpdateCPS(), null, monitoringDelay, monitoringDelay);
            new Timer((state) => MonitorStep(), null, monitoringDelay, monitoringDelay);
            Thread.Sleep(TimeSpan.FromSeconds(5));
            logger.Info("Launching processors");
            //new Timer((state) => LogStatistic(), null, monitoringDelay, monitoringDelay);
            new Timer((state) => LogCSV(), null, monitoringDelay, monitoringDelay);

            // Configure optimization process.
            optimizer = new Optimizer(monitor, model2);
            new Timer((state) => Optimize(), null, TimeSpan.FromSeconds(30), TimeSpan.FromSeconds(60));

            while (true)
            {
                ;
            }
        }