Constraint: IMsTargetConstraint;
Constraint: Prognoz.Platform.Interop.Ms.IMsTargetConstraint;
Свойство Constraint возвращает параметры ограничения целевой функции.
Для получения из цепочки расчета целевой функции, которой принадлежит ограничение, используйте свойство IMsCalculationChainTargetConstraint.TargetEntry.
Для выполнения примера в репозитории предполагается наличие контейнера моделирования с идентификатором «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.
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;
См. также: