public SumSquareRunoffEvaluator(IModelSimulation <double[], double, int> simulation, double[] observedData, int from, int to)
 {
     this.simulation   = simulation;
     this.observedData = observedData;
     this.from         = from;
     this.to           = to;
 }
            private void apply(IHyperCube <double> systemConfiguration, IModelSimulation <double[], double, int> simulation)
            {
                var varNames = systemConfiguration.GetVariableNames();

                foreach (var varName in varNames)
                {
                    simulation.SetVariable(varName, systemConfiguration.GetValue(varName));
                }
            }
        public static void SetSampleSimulation(IModelSimulation <double[], double, int> simulation, DataHandling.SampleClimate data)
        {
            simulation.Play("Rainfall", data.Rainfall);
            simulation.Play("Evapotranspiration", data.Evapotranspiration);

            var startTs = new DateTime(1980, 01, 01);
            int from    = (new DateTime(1985, 01, 01) - startTs).Days;
            int to      = (new DateTime(1999, 12, 31) - startTs).Days;

            simulation.SetSpan(0, to);
            simulation.Record("Runoff");
        }
        public static void SetSampleSimulation(IModelSimulation<double[], double, int> simulation, DataHandling.SampleClimate data)
        {
            simulation.Play("Rainfall", data.Rainfall);
            simulation.Play("Evapotranspiration", data.Evapotranspiration);

            var startTs = new DateTime(1980, 01, 01);
            int from = (new DateTime(1985, 01, 01) - startTs).Days;
            int to = (new DateTime(1999, 12, 31) - startTs).Days;

            simulation.SetSpan(0, to);
            simulation.Record("Runoff");
        }
        public static IHyperCube <double> BuildParameterSpace(IModelSimulation <double[], double, int> simulation)
        {
            // TODO there could be a protocol to at least verify that the parameters defined are compatible with a given simulation.
            // However this is a lot of work for a very generic system.
            var paramSpace = new BasicHyperCube(new[] {
                "C1",
                "C2",
                "C3",
                "BFI",
                "KBase",
                "KSurf"
            });

            paramSpace.SetMinMaxValue("C1", 0.0, 50.0, 7.0);
            paramSpace.SetMinMaxValue("C2", 0.0, 200.0, 20.0);
            paramSpace.SetMinMaxValue("C3", 0.0, 1000.0, 50.0);
            paramSpace.SetMinMaxValue("BFI", 0.01, 0.99, 0.7);
            paramSpace.SetMinMaxValue("KBase", 0.01, 0.99, 0.3);
            paramSpace.SetMinMaxValue("KSurf", 0.01, 0.99, 0.9);
            return(paramSpace);
        }
Example #6
0
        public static double[] ParallelRun(IModelSimulation simulation, int numSystems, int reps, int maxDegreeOfParallelism = -1)
        {
            var systems = new List<IModelSimulation>();
            for (int i = 0; i < numSystems; i++)
            {
                systems.Add(simulation.CloneModel());
            }
            var parallelOptions = new ParallelOptions() { MaxDegreeOfParallelism = maxDegreeOfParallelism };

            double[] res = new double[reps];
            var sw = new Stopwatch();
            for (int rep = 0; rep < reps; rep++)
            {
                sw.Start();
                if (systems.Count() > 1)
                    Parallel.ForEach(systems, parallelOptions, s => s.Execute());
                else
                    systems[0].Execute();
                sw.Stop();
                res[rep] = sw.Elapsed.TotalMilliseconds;
                sw.Reset();
            }
            return res;
        }
Example #7
0
 public static IHyperCube <double> CreateFeasibleAwbmParameterSpace(IModelSimulation <double[], double, int> simulation)
 {
     return(ModellingSampleAdapter.OptimizationAdapter.BuildParameterSpace(simulation));
 }
Example #8
0
 public static IClonableObjectiveEvaluator <IHyperCube <double> > BuildUrsEvaluator(IModelSimulation <double[], double, int> simulation, double[] observation, int from, int to)
 {
     return(ModellingSampleAdapter.OptimizationAdapter.BuildEvaluator(simulation, observation, from, to));
 }
 public static IClonableObjectiveEvaluator <IHyperCube <double> > BuildEvaluator(IModelSimulation <double[], double, int> simulation, double[] observation, int from, int to, string statisticsId = "ss")
 {
     if (statisticsId != "ss")
     {
         throw new NotSupportedException("Only the sum of squared differences objective function is supported in this sample code...");
     }
     return(new SumSquareRunoffEvaluator(simulation, observation, from, to));
 }
Example #10
0
 public static IHyperCube<double> CreateFeasibleAwbmParameterSpace(IModelSimulation<double[], double, int> simulation)
 {
     return ModellingSampleAdapter.OptimizationAdapter.BuildParameterSpace(simulation);
 }
Example #11
0
 public static IClonableObjectiveEvaluator<IHyperCube<double>> BuildUrsEvaluator(IModelSimulation<double[], double, int> simulation, double[] observation, int from, int to)
 {
     return ModellingSampleAdapter.OptimizationAdapter.BuildEvaluator(simulation, observation, from, to);
 }