Задача моделирования

При создании и работе с задачей моделирования следует учитывать следующие особенности:

Для работы с задачей моделирования через язык Fore предназначен интерфейс IMsProblem. Используя его свойства и методы можно настроить параметры задачи и произвести ее расчет.

Прежде всего, для работы с задачей моделирования необходимо задать рассчитываемую метамодель (свойство IMsProblem.MetaModel) и определить тип задачи (свойство IMsProblem.Details). От выбора типа задачи во многом зависят параметры ее расчета. Для всех типов задач базовым является интерфейс IMsProblemDetails, определяющий периоды прогнозирования и идентификации задачи. Для работы с конкретным типом задачи необходимо использовать один из дочерних интерфейсов IMsProblemDetails:

Примечание. В примере, представленном ниже, предполагается наличие объектов, которые указаны в разделе описания переменных.

Например, создание объекта ControlProblem для определения параметров задачи оптимального уравнения:

Sub UserProc;
Var
    Problem: IMsProblem;
    ControlProblem: IMsTransformationProblem;
Begin
    ControlProblem := New MsTransformationProblem.Create;
    Problem.Details := ControlProblem;
End Sub UserProc;

Программирование параметров расчета задачи зависит от ее типа. Более подробную информацию об этом можно найти в описании соответствующих интерфейсов.

Создание и расчет задачи моделирования

После создания метамодели «Метамодель для расчета сальдо» следует создать задачу моделирования, с помощью которой будет осуществлен расчет цепочки по сценарию «Факт».

Для выполнения модуля по созданию и расчету задачи необходимо добавить ссылки на сборки: Metabase, Ms.

Sub UserProc;
Var
    MB: IMetabase;
    KMDesc: IMetabaseObjectDescriptor;
    CrInfo: IMetabaseObjectCreateInfo;
    MObj: IMetabaseObject;
    Problem: IMsProblem;
    TranfProblem: IMsTransformationProblem;
    CalcSett: IMsProblemCalculationSettings;
    Calculation: IMsProblemCalculation;
Begin
    MB := MetabaseClass.Active;
    KMDesc := MB.ItemById("MODEL_SPACE");
    // Создание задачи моделирования
    CrInfo := MB.CreateCreateInfo;
    CrInfo.ClassID := MetabaseObjectClass.KE_CLASS_MSPROBLEM;
    CrInfo.Id := "PROBLEM_BALANCE";
    CrInfo.Name := "Задача расчета сальдо";
    CrInfo.Parent := KMDesc;
    MObj := MB.CreateObject(CrInfo).Edit;
    Problem := MObj As IMsProblem;
    // Установка рассчитываемой метамодели
    Problem.MetaModel := MB.ItemByIdNamespace("META_MODEL_BALANCE", KMDesc.Key).Bind As IMsMetaModel;
    // Настройка типа расчета задачи: задача трансформации
    TranfProblem := New MsTransformationProblem.Create;
    Problem.Details := TranfProblem;
    MObj.Save;
    Debug.WriteLine("Создана задача '" + MObj.Name + "' с идентификатором '" + MObj.Id + "'");
    // Расчет задачи
    CalcSett := Problem.CreateCalculationSettings;
    CalcSett.FactIncluded := True;
    Calculation := Problem.Calculate(CalcSett);
    Calculation.SaveHistory := True;
    Calculation.Run;
End Sub UserProc;

После выполнения модуля будет создана задача трансформации «Задача расчета сальдо» с идентификатором PROBLEM_BALANCE, информация об этом будет выведена в окно консоли. Задача будет рассчитана по сценарию «Факт» в векторном режиме. История расчета будет сохранена.

О выводе результатов расчета рассказано с разделе «Просмотр значений переменной».

См. также:

Общие принципы программирования с использованием сборки Ms