ArrangeModels(ArrangeMode: MsArrangeMode; [Problem: IMsProblem = Null]);
ArrangeModels(ArrangeMode: Prognoz.Platform.Interop.Ms.MsArrangeMode;
Problem:
Prognoz.Platform.Interop.Ms.IMsProblem);
ArrangeMode. Режим автопостроения цепочки расчета;
Problem. Задача, по которой будут устанавливаться периоды расчёта создаваемой системы уравнений. Параметр актуален, если ArrangeMode = MsArrangeMode.CreateSystems.
Метод ArrangeModels автоматически выстраивает цепочку расчета моделей по заданным параметрам в соответствии с зависимостями между переменными.
Автоматическое построение позволяет определить зависимости между моделями и построить согласно этим зависимостям цепочку расчёта. Метамодели, входящие в цепочку расчёта, при автопостроении игнорируются.
Принципы автоматического построения цепочки:
объясняемые переменные моделей представляют множество Y;
в число факторов всех моделей входят:
переменные из множества Y;
переменные из множества Y, но с лагами - множество Y1;
переменные, для которых нет уравнений - множество X;
в цепочку будут включены сначала X, Y1, затем Y2. Модели Y2 зависят только от X и от Y1;
затем формируется множество Y3, содержащее модели, которые можно рассчитать на основе X, Y1, Y2. Полученное множество будет включено в цепочку и т.д.;
если в цепочке присутствуют модели, содержащие переменные, зависящие сами от себя, то такие модели будут размещены в отдельную папку «Циклы».
Значение параметра ArrangeMode влияет на автоматическое построение следующим образом:
ArrangeMode содержит значение InsideFolders. Автопостроение выполняется по отдельности для каждой папки, входящей в цепочку;
ArrangeMode содержит значение DeleteFolders. Все модели из всех дочерних папок извлекаются на уровень, для которого производится автопостроение, а папки удаляются. Таким образом, автопостроение выполняется без учета папок;
ArrangeMode содержит значение SplitSlices. Если в цепочке расчёта присутствует многомерная модель, содержащая внутренние циклы, или если хотя бы одно из её уравнений образует цикл с другой моделью, входящей в цепочку, то многомерная модель разбивается на модели, соответствующие измерениям, для которых задан метод расчёта. Оставшиеся уравнения, которые не образуют циклов, помещаются в другую многомерную модель. Если циклы разрешаются путём изменения порядка уравнений в многомерной модели, то создается копия модели с нужным порядком. Все созданные модели будут выстроены в порядке зависимости. Модели, образующие циклы, будут помещены в папку «Цикл N», где N - порядковый номер цикла. Исходные многомерные модели изменены не будут, созданные модели будут иметь наименование, соответствующее исходной многомерной модели, и помещены в папку рядом с ней. Наименование папки формируется следующим образом: <Наименование исходной модели>(<дата и время создания папки>);
ArrangeMode не содержит значение SplitSlices. Многомерные модели, содержащие внутренние циклы, будут помещены без изменений в папку «Циклы»;
Примечание. Если родительским объектом контейнера моделирования является база данных временных рядов, то разделение использования значения SplitSlices недоступно.
ArrangeMode содержит значение CreateSystems. Если в цепочке расчёта присутствуют уравнения линейной регрессии, нелинейной регрессии, детерминированного уравнения, образующие цикл, то они объединяются в систему уравнений. Периоды расчёта системы будут взяты из задачи моделирования, указанной в параметре Problem;
ArrangeMode содержит значение NoCycles. Если в цепочке расчета присутствуют циклы, то модели, образующие цикл, извлекаются из папок, соответствующих циклам, в цепочку расчета вместо самих папок.
Для выполнения примера предполагается наличие контейнера моделирования с идентификатором «CONT_MODEL», содержащего метамодель с идентификатором «META_ARRANGE». Добавьте ссылки на системные сборки «Metabase», «Ms».
Sub UserProc;
Var
mb: IMetabase;
ContKey: Integer;
MetaModel: IMsMetaModel;
Chain: IMsCalculationChainEntries;
Begin
mb := MetabaseClass.Active;
ContKey := mb.GetObjectKeyById("CONT_MODEL");
MetaModel := mb.ItemByIdNamespace("META_ARRANGE", ContKey).Edit As IMsMetaModel;
Chain := MetaModel.CalculationChain;
Chain.ArrangeModels(MsArrangeMode.DeleteFolders Or MsArrangeMode.SplitSlices);
(MetaModel As IMetabaseObject).Save;
End Sub UserProc;
После выполнения примера элементы в цепочке расчёта будут выстроены без учета папок, многомерные модели с циклами будут разделены на части.
Необходимые требования и результат выполнения примера Fore.NET совпадают с примером Fore.
Imports Prognoz.Platform.Interop.Ms;
…
Public Shared Sub Main(Params: StartParams);
Var
mb: IMetabase;
ContKey: uinteger;
MetaModel: IMsMetaModel;
Chain: IMsCalculationChainEntries;
Begin
mb := Params.Metabase;
ContKey := mb.GetObjectKeyById("CONT_MODEL");
MetaModel := mb.ItemByIdNamespace["META_ARRANGE", ContKey].Edit() As IMsMetaModel;
Chain := MetaModel.CalculationChain;
Chain.ArrangeModels(MsArrangeMode.mamDeleteFolders Or MsArrangeMode.mamSplitSlices, Null);
(MetaModel As IMetabaseObject).Save();
End Sub;
См. также: