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); }
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()); }