Содержание
Рассмотрим пример создания задачи моделирования типа «Задача прогнозирования».
Для выполнения примера в репозитории предполагается наличие контейнера моделирования с идентификатором «MS», содержащей метамодель с идентификатором «METAMODEL». Данная метамодель должна содержать одну или несколько прогнозных моделей.
Добавьте ссылки на системные сборки: Metabase, Ms.
Sub ProblemCreation;
Var
MB: IMetabase;
MSObj: IMetabaseObject;
MS: IMsModelSpace;
CrInfo: IMetabaseObjectCreateInfo;
ProblemObj: IMetabaseObject;
Problem: IMsProblem;
ScenTree: IMsScenarioTreeEntries;
ScenElement: IMsScenarioTreeElement;
Scenario: IMsScenario;
ScenProblem: IMsProblemScenarios;
Forecasting: IMsForecastingProblem;
Period: IMsModelPeriod;
Begin
// Получаем текущий репозиторий
MB := MetabaseClass.Active;
// Получаем контейнер моделирования
MSObj := MB.ItemById("MS").Edit;
MS := MSObj As IMsModelSpace;
// Задаем базовые параметры создания задачи
CrInfo := MB.CreateCreateInfo;
CrInfo.ClassID := MetabaseObjectClass.KE_CLASS_MSPROBLEM;
CrInfo.Id := MB.GenerateId("PROBLEM", MSObj.Key);
CrInfo.Name := "Задача прогнозирования";
CrInfo.Parent := MSObj.EditDescriptor;
// Создаем задачу и открываем её для редактирования
ProblemObj := MB.CreateObject(CrInfo).Edit;
Problem := ProblemObj As IMsProblem;
// Указываем метамодель, рассчитываемую задачей
Problem.MetaModel := MB.ItemByIdNamespace("METAMODEL", MSObj.Key).Bind As IMsMetaModel;
// Получаем все сценарии моделирования, содержащиеся в контейнере
ScenTree := MS.ScenarioTree;
// Добавляем новый сценарий
ScenElement := (ScenTree.AddScenario(False, True));
ScenElement.Name := "Базовый сценарий";
Scenario := ScenElement.Scenario;
// Получаем сценарии задачи моделирования и добавляем в них созданный сценарий
ScenProblem := Problem.Scenarios;
ScenProblem.AddScenario(Scenario);
// Сохраняем изменения в контейнере моделирования
MSObj.Save;
// Создаем параметры для задачи прогнозирования
Forecasting := New MsForecastingProblem.Create;
// Задаем периоды задачи
Period := Forecasting.Period;
Period.IdentificationStartDate := DateTime.Parse("01.01.2001");
Period.IdentificationEndDate := DateTime.Parse("31.12.2014");
Period.ForecastStartDate := DateTime.Parse("01.01.2015");
Period.ForecastEndDate := DateTime.Parse("31.12.2019");
// Указываем, что будет рассчитываться задача прогнозирования
Problem.Details := Forecasting;
// Указываем, что для отчетов по переменным будут использоваться кубы
Problem.UseCubes := True;
// Сохраняем задачу
ProblemObj.Save;
End Sub ProblemCreation;
Imports Prognoz.Platform.Interop.Ms;
…
Public Shared Sub Main(Params: StartParams);
Var
MB: IMetabase;
MSObj: IMetabaseObject;
MS: IMsModelSpace;
CrInfo: IMetabaseObjectCreateInfo;
ProblemObj: IMetabaseObject;
Problem: IMsProblem;
ScenTree: IMsScenarioTreeEntries;
ScenElement: IMsScenarioTreeElement;
Scenario: IMsScenario;
ScenProblem: IMsProblemScenarios;
Forecasting: IMsForecastingProblem;
Period: IMsModelPeriod;
Begin
// Получаем текущий репозиторий
MB := Params.Metabase;
// Получаем контейнер моделирования
MSObj := MB.ItemById["MS"].Edit();
MS := MSObj As IMsModelSpace;
// Задаем базовые параметры создания задачи
CrInfo := MB.CreateCreateInfo();
CrInfo.ClassID := MetabaseObjectClass.KE_CLASS_MSPROBLEM As integer;
CrInfo.Id := MB.GenerateId("PROBLEM", MSObj.Key);
CrInfo.Name := "Задача прогнозирования";
CrInfo.Parent := MSObj.EditDescriptor();
// Создаем задачу и открываем её для редактирования
ProblemObj := MB.CreateObject(CrInfo).Edit();
Problem := ProblemObj As IMsProblem;
// Указываем метамодель, рассчитываемую задачей
Problem.MetaModel := MB.ItemByIdNamespace["METAMODEL", MSObj.Key].Bind() As IMsMetaModel;
// Получаем все сценарии моделирования, содержащиеся в контейнере
ScenTree := MS.ScenarioTree;
// Добавляем новый сценарий
ScenElement := (ScenTree.AddScenario(False, True));
ScenElement.Name := "Базовый сценарий";
Scenario := ScenElement.Scenario;
// Получаем сценарии задачи моделирования и добавляем в них созданный сценарий
ScenProblem := Problem.Scenarios;
ScenProblem.AddScenario(Scenario);
// Сохраняем изменения в контейнере моделирования
MSObj.Save();
// Создаем параметры для задачи прогнозирования
Forecasting := New MsForecastingProblem.Create();
// Задаем периоды задачи
Period := Forecasting.Period;
Period.IdentificationStartDate := DateTime.Parse("01.01.2001");
Period.IdentificationEndDate := DateTime.Parse("31.12.2014");
Period.ForecastStartDate := DateTime.Parse("01.01.2015");
Period.ForecastEndDate := DateTime.Parse("31.12.2019");
// Указываем, что будет рассчитываться задача прогнозирования
Problem.Details := Forecasting;
// Указываем, что для отчетов по переменным будут использоваться кубы
Problem.UseCubes := True;
// Сохраняем задачу
ProblemObj.Save();
End Sub;
В результате выполнения примера будет создана задача прогнозирования со следующими параметрами:
тип задачи - задача прогнозирования;
задача рассчитывает метамодель с идентификатором «METAMODEL»;
для расчета задачи создан новый сценарий в контейнере моделирования. Название сценария «Базовый сценарий»;
период идентификации: начало - «2001», окончание - «2014»;
период прогнозирования: начало - «2015», окончание - «2019»;
для создания отчетов по переменным будут использоваться кубы.
См. также: