BestModelCoefficients: IExponentialSmoothingParameters;
BestModelCoefficients: Prognoz.Platform.Interop.StatLib.IExponentialSmoothingParameters;
Свойство BestModelCoefficients возвращает результаты автоподбора параметров экспоненциального сглаживания.
Результаты доступны только после расчета метода.
Для выполнения примера в репозитории предполагается наличие контейнера моделирования с идентификатором «MS», содержащего модель с идентификатором «MODEL_EXPLSM». Данная модель должна рассчитываться методом «Экспоненциальное сглаживание».
Добавьте ссылки на системные сборки: Metabase, Ms, Stat.
Sub UserProc;
Var
mb: IMetabase;
msKey: Integer;
model: IMsModel;
method: IMsMethod;
exp: IMsExponentialSmoothingTransform;
transf: IMsFormulaTransform;
Coord: IMsFormulaTransformCoord;
Calc: IMsMethodCalculation;
res: IMsModelCalculationResult;
autoSearch: IExponentialSmoothingAutoSearch;
coef: IExponentialSmoothingParameters;
i: Integer;
explSerie: Array Of Double;
Begin
// Получаем текущий репозиторий
mb := MetabaseClass.Active;
// Получаем ключ контейнера моделирования
msKey := mb.GetObjectKeyById("MS");
// Получаем модель
model := mb.ItemByIdNamespace("MODEL_EXPLSM", msKey).Bind As IMsModel;
// Получаем параметры метода расчета модели
transf := model.Transform;
method := transf.FormulaItem(0).Method;
exp := method As IMsExponentialSmoothingTransform;
coord := transf.CreateCoord(transf.Outputs.Item(0));
// Создаем объект для расчета метода
calc := transf.CreateCalculation;
calc.Period.IdentificationStartDate := transf.Period.IdentificationStartDate;
calc.Period.IdentificationEndDate := transf.Period.IdentificationEndDate;
calc.Period.ForecastStartDate := transf.Period.ForecastStartDate;
calc.Period.ForecastEndDate := transf.Period.ForecastEndDate;
calc.CurrentPoint := transf.Period.IdentificationStartDate;
// Выполняем расчет
res := exp.Execute(calc, Coord);
// Выводим результаты в окно консоли
If res.StatMethod.Status = 0 Then
autoSearch := exp.AutoSearch;
coef := exp.BestModelCoefficients;
Debug.WriteLine("Значения параметров:");
Debug.Indent;
Debug.Write("Альфа = " + coef.Alpha.ToString);
PrintInfo(autoSearch.AlphaSearch);
Debug.Write("Дельта = " + coef.Delta.ToString);
PrintInfo(autoSearch.DeltaSearch);
Debug.Write("Гамма = " + coef.Gamma.ToString);
PrintInfo(autoSearch.GammaSearch);
Debug.Write("Фи = " + coef.Phi.ToString);
PrintInfo(autoSearch.PhiSearch);
Debug.Unindent;
End If;
explSerie := exp.Explained.Serie(calc);
Debug.WriteLine("Значения моделируемого ряда:");
Debug.Indent;
For i := 0 To explSerie.Length - 1 Do
Debug.WriteLine(explSerie[i]);
End For;
Debug.Unindent;
End Sub UserProc;
Sub PrintInfo(AutoParam: Boolean);
Begin
If AutoParam Then
Debug.WriteLine(" (рассчитано автоматически)");
Else
Debug.WriteLine(" (задано пользователем)");
End If;
End Sub PrintInfo;
В результате выполнения примера в окно консоли будут выведены значения параметров и значения моделируемого ряда модели.
Необходимые требования и результат выполнения примера Fore.NET совпадают с примером Fore.
Imports Prognoz.Platform.Interop.Ms;
Imports Prognoz.Platform.Interop.Stat;
…
Public Shared Sub Main(Params: StartParams);
Var
mb: IMetabase;
msKey: uinteger;
model: IMsModel;
method: IMsMethod;
exp: IMsExponentialSmoothingTransform;
transf: IMsFormulaTransform;
Coord: IMsFormulaTransformCoord;
Calc: IMsMethodCalculation;
res: IMsModelCalculationResult;
autoSearch: IExponentialSmoothingAutoSearch;
coef: IExponentialSmoothingParameters;
i: Integer;
explSerie: System.Array;
Begin
// Получаем текущий репозиторий
mb := Params.Metabase;
// Получаем ключ контейнера моделирования
msKey := mb.GetObjectKeyById("MS");
// Получаем модель
model := mb.ItemByIdNamespace["MODEL_EXPLSM", msKey].Bind() As IMsModel;
// Получаем параметры метода расчета модели
transf := model.Transform;
method := transf.FormulaItem[0].Method;
exp := method As IMsExponentialSmoothingTransform;
coord := transf.CreateCoord(transf.Outputs.Item[0]);
// Создаем объект для расчета метода
calc := transf.CreateCalculation();
calc.Period.IdentificationStartDate := transf.Period.IdentificationStartDate;
calc.Period.IdentificationEndDate := transf.Period.IdentificationEndDate;
calc.Period.ForecastStartDate := transf.Period.ForecastStartDate;
calc.Period.ForecastEndDate := transf.Period.ForecastEndDate;
calc.CurrentPoint := transf.Period.IdentificationStartDate;
// Выполняем расчет
res := exp.Execute(calc, Coord);
// Выводим результаты в окно консоли
If res.StatMethod.Status = 0 Then
autoSearch := exp.AutoSearch;
coef := exp.BestModelCoefficients;
System.Diagnostics.Debug.WriteLine("Значения параметров:");
System.Diagnostics.Debug.Indent();
System.Diagnostics.Debug.Write("Альфа = " + coef.Alpha.ToString());
PrintInfo(autoSearch.AlphaSearch);
System.Diagnostics.Debug.Write("Дельта = " + coef.Delta.ToString());
PrintInfo(autoSearch.DeltaSearch);
System.Diagnostics.Debug.Write("Гамма = " + coef.Gamma.ToString());
PrintInfo(autoSearch.GammaSearch);
System.Diagnostics.Debug.Write("Фи = " + coef.Phi.ToString());
PrintInfo(autoSearch.PhiSearch);
System.Diagnostics.Debug.Unindent();
End If;
explSerie := exp.Explained.Serie[calc];
System.Diagnostics.Debug.WriteLine("Значения моделируемого ряда:");
System.Diagnostics.Debug.Indent();
For i := 0 To explSerie.Length - 1 Do
System.Diagnostics.Debug.WriteLine(explSerie[i]);
End For;
System.Diagnostics.Debug.Unindent();
End Sub;
Public Shared Sub PrintInfo(AutoParam: Boolean);
Begin
If AutoParam Then
System.Diagnostics.Debug.WriteLine(" (рассчитано автоматически)");
Else
System.Diagnostics.Debug.WriteLine(" (задано пользователем)");
End If;
End Sub PrintInfo;
См. также: