IMsCalculationChainTargetConstraint.Constraint

Синтаксис Fore

Constraint: IMsTargetConstraint;

Синтаксис Fore.NET

Constraint: Prognoz.Platform.Interop.Ms.IMsTargetConstraint;

Описание

Свойство Constraint возвращает параметры ограничения целевой функции.

Комментарии

Для получения из цепочки расчета целевой функции, которой принадлежит ограничение, используйте свойство IMsCalculationChainTargetConstraint.TargetEntry.

Пример Fore

Для выполнения примера в репозитории предполагается наличие контейнера моделирования с идентификатором «MS», содержащего задачу моделирования с идентификатором «CHAIN_TARGET_CONSTRANT_D». Данная задача должна быть предназначена для веб-приложения и содержать целевую функцию.

Добавьте ссылки на системные сборки: Metabase, Ms.

Sub UserProc;
Var
    mb: IMetabase;
    MsObj: IMetabaseObjectDescriptor;
    Ms: IMsModelSpace;
    Problem: IMsProblem;
    CalcChain: IMsCalculationChainEntries;
    I: Integer;
    Constraint: IMsTargetConstraint;
    MetaConstraint: IMsCalculationChainTargetConstraint;
Begin
    // Получаем текущий репозиторий
    mb := MetabaseClass.Active;
    // Получаем контейнер моделирования
    MsObj := mb.ItemById("MS");
    Ms := MsObj.Bind As IMsModelSpace;
    // Получаем задачу моделирования
    Problem := mb.ItemByIdNamespace("CHAIN_TARGET_CONSTRANT_D", MsObj.Key).Edit As IMsProblem;
    // Получаем цепочку расчета
    CalcChain := Problem.MetaModel.CalculationChain;
    // Ищем ограничения целевой функции
    For i := 0 To CalcChain.Count - 1 Do
        If CalcChain.Item(i).Type = MsCalculationChainEntryType.TargetConstraint Then
            MetaConstraint := CalcChain.Item(i) As IMsCalculationChainTargetConstraint;
            Debug.WriteLine("Ограничение '" + MetaConstraint.Name + "'");
            // Ослабляем ограничение сверху и снизу
            Constraint := MetaConstraint.Constraint;
            Constraint.LowerBoundFixed := MsBoundFixType.NotFixed;
            Constraint.UpperBoundFixed := MsBoundFixType.NotFixed;
            // Выводим в окно консоли название целевой функции, которой принадлежит ограничение
            Debug.Indent;
                Debug.WriteLine("Принадлежит целевой функции '" + MetaConstraint.TargetEntry.Name + "'");
            Debug.Unindent;
        End If;
    End For;
    // Сохраняем изменения
    (Problem As IMetabaseObject).Save;
End Sub UserProc;

В результате выполнения примера в окно консоли будет выведена информация об ограничениях целевой функции. Все имеющиеся ограничения будут ослаблены.

Пример Fore.NET

Необходимые требования и результат выполнения примера Fore.NET совпадают с примером Fore.

Imports Prognoz.Platform.Interop.Ms;

Public Shared Sub Main(Params: StartParams);
Var
    mb: IMetabase;
    MsObj: IMetabaseObjectDescriptor;
    Ms: IMsModelSpace;
    Problem: IMsProblem;
    CalcChain: IMsCalculationChainEntries;
    I: Integer;
    Constraint: IMsTargetConstraint;
    MetaConstraint: IMsCalculationChainTargetConstraint;
Begin
    // Получаем текущий репозиторий
    mb := Params.Metabase;
    // Получаем контейнер моделирования
    MsObj := mb.ItemById["MS"];
    Ms := MsObj.Bind() As IMsModelSpace;
    // Получаем задачу моделирования
    Problem := mb.ItemByIdNamespace["CHAIN_TARGET_CONSTRANT_D", MsObj.Key].Edit() As IMsProblem;
    // Получаем цепочку расчета
    CalcChain := Problem.MetaModel.CalculationChain;
    // Ищем ограничения целевой функции
    For i := 0 To CalcChain.Count - 1 Do
        If CalcChain.Item[i].Type = MsCalculationChainEntryType.mccetTargetConstraint Then
            MetaConstraint := CalcChain.Item[i] As IMsCalculationChainTargetConstraint;
            System.Diagnostics.Debug.WriteLine("Ограничение '" + MetaConstraint.Name + "'");
            // Ослабляем ограничение сверху и снизу
            Constraint := MetaConstraint.Constraint;
            Constraint.LowerBoundFixed := MsBoundFixType.msbftNotFixed;
            Constraint.UpperBoundFixed := MsBoundFixType.msbftNotFixed;
            // Выводим в окно консоли название целевой функции, которой принадлежит ограничение
            System.Diagnostics.Debug.Indent();
                System.Diagnostics.Debug.WriteLine("Принадлежит целевой функции '" + MetaConstraint.TargetEntry.Name + "'");
            System.Diagnostics.Debug.Unindent();
        End If;
    End For;
    // Сохраняем изменения      
    (Problem As IMetabaseObject).Save();
End Sub;

См. также:

IMsCalculationChainTargetConstraint