Exemple #1
0
        private List <ExperimentInstance> DuplicateExperimentInstances(List <ExperimentInstance> instances,
                                                                       int repetitions)
        {
            var copies = new List <ExperimentInstance>();

            for (var i = 0; i < repetitions; i++)
            {
                foreach (var instance in instances)
                {
                    var instanceCopy = new ExperimentInstance
                    {
                        ParameterValues = new List <ExperimentParameterAssignment>()
                    };

                    foreach (var valueAssignment in instance.ParameterValues)
                    {
                        instanceCopy.ParameterValues.Add(new ExperimentParameterAssignment
                        {
                            ParameterValue     = valueAssignment.ParameterValue,
                            ExperimentInstance = instanceCopy
                        });
                    }

                    copies.Add(instanceCopy);
                }
            }

            return(copies);
        }
Exemple #2
0
 public IDictionary <string, object> Resolve(ExperimentInstance source, ExperimentInstanceDto destination,
                                             IDictionary <string, object> destMember,
                                             ResolutionContext context)
 {
     return(source.ParameterValues.Select(v => v.ParameterValue)
            .ToDictionary(parameterValue => parameterValue.Parameter.Name,
                          parameterValue => ParseUtils.ParseToClosestPossibleValueType(parameterValue.Value)));
 }
Exemple #3
0
        internal Result(ExperimentInstance <T, TClean> experiment, IEnumerable <Observation <T, TClean> > observations, Observation <T, TClean> control, Dictionary <string, dynamic> contexts)
        {
            Candidates     = observations.Where(o => o != control).ToList();
            Control        = control;
            ExperimentName = experiment.Name;
            Observations   = observations.ToList();
            Contexts       = contexts;

            var mismatchedObservations = Candidates.Where(o => !o.EquivalentTo(Control, experiment.Comparator)).ToList();

            IgnoredObservations = mismatchedObservations.Where(m => experiment.IgnoreMismatchedObservation(control, m).Result).ToList();

            MismatchedObservations = mismatchedObservations.Except(IgnoredObservations).ToList();
        }
Exemple #4
0
        public override void OnActionExecuting(ActionExecutingContext context)
        {
            var simId      = int.Parse((string)context.RouteData.Values["simid"]);
            var instanceId = int.Parse((string)context.RouteData.Values["instanceid"]);

            var instance = _context.ExperimentInstances
                           .Include(si => si.Experiment)
                           .SingleOrDefault(i => (i.Id == instanceId) && (i.ExperimentId == simId));

            if (instance == null)
            {
                context.Result = NotFound();
                return;
            }

            _currentExperimentInstance = instance;

            base.OnActionExecuting(context);
        }
Exemple #5
0
        private void FindAllInstancePermutations_Recursion(
            IList <ExperimentInstance> experimentInstances,
            IList <Parameter> parameters,
            IList <ParameterValue> selectedParams)
        {
            // If there are no parameters left in the list, we have selected a value for each parameter.
            if (!parameters.Any())
            {
                var experimentInstance = new ExperimentInstance
                {
                    ParameterValues = new List <ExperimentParameterAssignment>(),
                    Status          = ExperimentStatus.Pending
                };

                experimentInstances.Add(experimentInstance);

                foreach (var selectedParam in selectedParams)
                {
                    experimentInstance.ParameterValues.Add(new ExperimentParameterAssignment
                    {
                        ExperimentInstance = experimentInstance,
                        ParameterValue     = selectedParam
                    });
                }
            }
            else
            {
                // Pop the first parameter from the list.
                var parameter = parameters.First();
                parameters.Remove(parameter);

                // Select each possible value once.
                foreach (var paramInstance in parameter.Values)
                {
                    selectedParams.Add(paramInstance);
                    FindAllInstancePermutations_Recursion(experimentInstances, parameters, selectedParams);
                    selectedParams.Remove(paramInstance);
                }

                parameters.Insert(0, parameter);
            }
        }
Exemple #6
0
        public IActionResult AddCombination(int id, [FromBody] List <ParameterValueAddDto> parameterValueAddDto)
        {
            /*
             * This method does not ensure a full cartesian product.
             */

            var       performanceTracking = false;
            Stopwatch sw = performanceTracking ? new Stopwatch() : null;

            if (sw != null)
            {
                sw.Start();
            }

            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            if (sw != null)
            {
                TimeSpan ts = sw.Elapsed;
                Console.WriteLine("Model state validated after " + String.Format("{0:00}:{1:00}:{2:00}:{3:00}",
                                                                                 ts.Hours, ts.Minutes, ts.Seconds, ts.Milliseconds));
            }

            Experiment sim;

            if (!_cache.TryGetValue(id, out sim))
            {
                sim = _context.Experiments
                      .Include(s => s.Parameters).ThenInclude(p => p.Values)
                      .SingleOrDefault(s => s.Id == id);
                _cache.Set(id, sim, TimeSpan.FromMinutes(1));
            }

            if (sim == null)
            {
                Console.WriteLine("Server did not find experiment " + id.ToString());
                return(NotFound());
            }

            if (sw != null)
            {
                TimeSpan ts = sw.Elapsed;
                Console.WriteLine("Loaded data after " + String.Format("{0:00}:{1:00}:{2:00}:{3:00}",
                                                                       ts.Hours, ts.Minutes, ts.Seconds, ts.Milliseconds));
            }

            if (!parameterValueAddDto.TrueForAll(para => sim.Parameters.Single(p => p.Name == para.ParameterName) != null))
            {
                Console.WriteLine("Invalid parameter name " + parameterValueAddDto.Where(para => sim.Parameters.Single(p => p.Name == para.ParameterName) == null).First().ParameterName + ".");
                return(BadRequest("Invalid parameter name " + parameterValueAddDto.Where(para => sim.Parameters.Single(p => p.Name == para.ParameterName) == null).First().ParameterName + "."));
            }

            /*if (sim.Parameters.Where(para => parameterValueAddDto.Exists(p => p.ParameterName != para.Name)).Count() > 0)
             * {
             *  Console.WriteLine("Missing parameter " + sim.Parameters.Where(para => parameterValueAddDto.Exists(p => p.ParameterName != para.Name)).First().Name + ".");
             *  return BadRequest("Missing parameter " + sim.Parameters.Where(para => parameterValueAddDto.Exists(p => p.ParameterName != para.Name)).First().Name + ".");
             * }*/

            if (!parameterValueAddDto.TrueForAll(para => ParameterValidator.IsValid(sim.Parameters.Single(p => p.Name == para.ParameterName).Type, para.Value)))
            {
                Console.WriteLine("Parameter value " +
                                  parameterValueAddDto.Where(para => !ParameterValidator.IsValid(sim.Parameters.Single(p => p.Name == para.ParameterName).Type, para.Value)).First().Value +
                                  " is invalid.");
                return(BadRequest("Parameter value " +
                                  parameterValueAddDto.Where(para => !ParameterValidator.IsValid(sim.Parameters.Single(p => p.Name == para.ParameterName).Type, para.Value)).First().Value +
                                  " is invalid."));
            }

            var experimentInstance = new ExperimentInstance();

            experimentInstance.ParameterValues = parameterValueAddDto.
                                                 Select(para => new ExperimentParameterAssignment
            {
                ParameterValue = new ParameterValue
                {
                    Parameter = sim.Parameters.SingleOrDefault(p => p.Name == para.ParameterName),
                    Value     = para.Value
                },
                ExperimentInstance = experimentInstance
            }).ToList();

            experimentInstance.ExperimentId = sim.Id;
            experimentInstance.Experiment   = sim;

            /*
             * The whole caching is kind of nasty.
             * We might got sim from the cache, so make
             * sure to not add it without tracking.
             */

            if (sw != null)
            {
                TimeSpan ts = sw.Elapsed;
                Console.WriteLine("Prepared data for storage after " + String.Format("{0:00}:{1:00}:{2:00}:{3:00}",
                                                                                     ts.Hours, ts.Minutes, ts.Seconds, ts.Milliseconds));
            }

            _context.Attach(sim);
            _context.Add(experimentInstance);
            _context.SaveChanges();

            if (sw != null)
            {
                TimeSpan ts = sw.Elapsed;
                Console.WriteLine("Stored data after " + String.Format("{0:00}:{1:00}:{2:00}:{3:00}",
                                                                       ts.Hours, ts.Minutes, ts.Seconds, ts.Milliseconds));
            }

            //_scalingService.Scale(sim);

            if (sw != null)
            {
                TimeSpan ts = sw.Elapsed;
                Console.WriteLine("Finished scaling after " + String.Format("{0:00}:{1:00}:{2:00}:{3:00}",
                                                                            ts.Hours, ts.Minutes, ts.Seconds, ts.Milliseconds));
            }

            return(new ObjectResult(new
            {
                ExperimentInstanceId = experimentInstance.Id
            }));
        }