コード例 #1
0
        public ICalibratonDataSets Select(ICalibrationSchema schema)
        {
            ICalibratonDataSets ds = null;

            if (schema.Responses.Length > 1)
            {
                throw new Exception("Only one output variable is required.");
            }
            else
            {
                IVariable outputv          = schema.Responses[0];
                TimeSeriesQueryCriteria qc = new TimeSeriesQueryCriteria()
                {
                    Start      = schema.Start,
                    End        = schema.End,
                    SiteID     = outputv.SiteID,
                    VariableID = outputv.VariableID
                };
                var ts = outputv.GetValues(qc, mOdmAdaptor);
                if (ts != null)
                {
                    ds = new CalibrationDatasets(ts[0, ":", "0"], ts.DateTimes);
                    schema.InstancesCount = ts.Size[1];

                    double[][] input = new double[schema.Stimulus.Length][];
                    int        i     = 0;
                    foreach (IVariable v in schema.Stimulus)
                    {
                        qc = new TimeSeriesQueryCriteria()
                        {
                            Start      = schema.Start,
                            End        = schema.End,
                            SiteID     = v.SiteID,
                            VariableID = v.VariableID
                        };
                        input[i] = v.GetValues(qc, mOdmAdaptor)[0, ":", "0"];
                        i++;
                    }
                    ds.InputData = input;
                    schema.CalibratonDataSets = ds;
                }
            }
            return(ds);
        }
コード例 #2
0
        public void Calibrate(ICalibratonDataSets datasets)
        {
            OnStartRunning(new ComponentRunEventArgs());
            mSCEParameter.SimulatedLength = datasets.Length;

            //mInputDataVector = new double[datasets.Length * 5];
            //mDesiredOutputDataVector = new double[datasets.Length * 2];

            //for (int i = 0; i < datasets.Length; i++)
            //{
            //    for (int j = 0; j < 5; j++)
            //    {
            //        mInputDataVector[i * 5 + j] = datasets.InputData[i][j];
            //    }
            //    mDesiredOutputDataVector[i * 2 + 0] = datasets.ObservedData[i];
            //    mDesiredOutputDataVector[i * 2 + 1] = (Math.Pow(datasets.ObservedData[i] + 1.0, 0.3) - 1.0) / 0.3;
            //}
            var input   = (datasets as CalibrationDatasets).ConvertToSCEInput();
            var desired = (datasets as CalibrationDatasets).ConvertToSCEDesiredOutput();

            int cvgCount = mSCEParameter.MaximumIteration / 100 - 5;

            mPrameterMatrix = new double[mSCEParameter.Samples][];
            mObjMatrix      = new double[mSCEParameter.Samples][];
            mSlnMatrix      = new double[cvgCount][];
            mSimlateMatrix  = new double[mSCEParameter.SimulatedLength][];
            for (int i = 0; i < mSCEParameter.Samples; i++)
            {
                mPrameterMatrix[i] = new double[13];
                mObjMatrix[i]      = new double[3];
            }
            for (int i = 0; i < mSCEParameter.SimulatedLength; i++)
            {
                mSimlateMatrix[i] = new double[1];
            }
            for (int i = 0; i < cvgCount; i++)
            {
                mSlnMatrix[i] = new double[13];
            }
            double[] praVector = new double[mSCEParameter.Samples * 13];
            double[] objVector = new double[mSCEParameter.Samples * 3];

            double[] simulateVector = new double[mSCEParameter.SimulatedLength * 1];
            //MoSceFunc(mSCEParameter.ParametersCount, mSCEParameter.ObjectivesCount, mSCEParameter.Samples,
            //    mSCEParameter.Complex, mSCEParameter.MaximumIteration, mSCEParameter.SimulatedLength, input,
            //    desired, (int)mSCEParameter.ErrorFunction, praVector, objVector, simulateVector);

            MoSceFunc(mSCEParameter.ParametersCount, mSCEParameter.ObjectivesCount, mSCEParameter.Samples,
                      mSCEParameter.Complex, mSCEParameter.MaximumIteration, mSCEParameter.SimulatedLength, input,
                      desired, 1, praVector, objVector, simulateVector);

            for (int i = 0; i < mSCEParameter.Samples; i++)
            {
                for (int j = 0; j < 13; j++)
                {
                    mPrameterMatrix[i][j] = praVector[i * 13 + j];
                }
                for (int j = 0; j < 3; j++)
                {
                    mObjMatrix[i][j] = objVector[i * 3 + j];
                }
            }
            for (int i = 0; i < mSCEParameter.SimulatedLength; i++)
            {
                mSimlateMatrix[i][0] = simulateVector[i];
            }
            OnFinishRunning(new ComponentRunEventArgs());
        }