ICpLinearOptimization.Constraints

Синтаксис

Constraints: ILoConstraints;

Описание

Свойство Constraints возвращает ограничения линейной оптимизации.

Комментарии

Свойство доступно только для чтения.

Пример

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

Sub UserProc;
Var
    ZCU: LinearOptimization;
    Vrbl: ILoVariable;
    VarS: ILoVariables;
    ConstrS: ILoConstraints;
    Constr: ILoConstraint;
    AddendS: ILoAddends;
    Addend: ILoAddend;  
    EqS: ILoEquations;
    Eq: ILoEquation;
    ObjFun: ILoCriterionFunction;
    Res: ILoResults;
    Retro: Array[1Of Double;
    I, J: Integer;
    s: String;
    Val: Double;
    ci: ICultureInfo;
    TimeInterval: Integer;
Begin
    ZCU := New LinearOptimization.Create;
    // ПЕРЕМЕННЫЕ
    Retro := New Double[1];
    Retro[0] := 1;
    // Список переменных
    Vars := ZCU.Variables;
    For I := 1 To 6 Do
        s := "x" + i.ToString;
        Vrbl := Vars.Add(s);
        Vrbl.Retrospective := Retro;
    End For;
    //Список ограничений
    ConstrS := ZCU.Constraints;
    //====x1
    For i := 1 To 6 Do
        Constr := ConstrS.Add;
        Constr.LowerBound := 0;
        Constr.UpperBound := 1e20;
        AddendS := Constr.Addends;
        Addend := AddendS.Add(Vars.FindById("x1"));
        //коэффициент при переменной
        Addend.Coeff := 1;
        //лаг
        Addend.Lag := i;
    End For;
    Constr := ConstrS.Add;
    Constr.LowerBound := 2;
    Constr.UpperBound := 1e20;
    AddendS := Constr.Addends;
    Addend := AddendS.Add(Vars.FindById("x1"));
    //коэффициент при переменной
    Addend.Coeff := 1;
    //лаг
    Addend.Lag := 7;
    //====x2
    For i := 1 To 6 Do
        Constr := ConstrS.Add;
        Constr.LowerBound := 0;
        Constr.UpperBound := 1e20;
        AddendS := Constr.Addends;
        Addend := AddendS.Add(Vars.FindById("x2"));
        //коэффициент при переменной
        Addend.Coeff := 1;
        //лаг
        Addend.Lag := i;
    End For;
    Constr := ConstrS.Add;
    Constr.LowerBound := 2;
    Constr.UpperBound := 1e20;
    AddendS := Constr.Addends;
    Addend := AddendS.Add(Vars.FindById("x2"));
    //коэффициент при переменной
    Addend.Coeff := 1;
    //лаг
    Addend.Lag := 7;
    //====x3
    For i := 1 To 6 Do
        Constr := ConstrS.Add;
        Constr.LowerBound := 0;
        Constr.UpperBound := 1e20;
        AddendS := Constr.Addends;
        Addend := AddendS.Add(Vars.FindById("x3"));
        //коэффициент при переменной
        Addend.Coeff := 1;
        //лаг
        Addend.Lag := i;
    End For;
    Constr := ConstrS.Add;
    Constr.LowerBound := 2;
    Constr.UpperBound := 1e20;
    AddendS := Constr.Addends;
    Addend := AddendS.Add(Vars.FindById("x3"));
    //коэффициент при переменной
    Addend.Coeff := 1;
    //лаг
    Addend.Lag := 7;
    //====x4
    For i := 1 To 7 Do
        Constr := ConstrS.Add;
        Constr.LowerBound := 0;
        Constr.UpperBound := 1e20;
        AddendS := Constr.Addends;
        Addend := AddendS.Add(Vars.FindById("x4"));
        //коэффициент при переменной
        Addend.Coeff := 1;
        //лаг
        Addend.Lag := i;
    End For;
    //====x5
    For i := 1 To 7 Do
        Constr := ConstrS.Add;
        Constr.LowerBound := 0;
        Constr.UpperBound := 1e20;
        AddendS := Constr.Addends;
        Addend := AddendS.Add(Vars.FindById("x5"));
        //коэффициент при переменной
        Addend.Coeff := 1;
        //лаг
        Addend.Lag := i;
    End For;
    //====x6
    For i := 1 To 7 Do
        Constr := ConstrS.Add;
        Constr.LowerBound := 0;
        Constr.UpperBound := 1e20;
        AddendS := Constr.Addends;
        Addend := AddendS.Add(Vars.FindById("x6"));
        //коэффициент при переменной
        Addend.Coeff := 1;
        //лаг
        Addend.Lag := i;
    End For;
    // СПИСОК УРАВНЕНИЙ
    EqS := ZCU.Equations;
    // Уравнение №1
    Eq := EqS.Add;
    AddendS := Eq.Addends;
    //левая часть
    Addend := Addends.Add(Vars.FindById("x1"));
    //коэффициент при переменной
    Addend.Coeff := 1;
    //лаг
    Addend.Lag := 0;
    //1-е слагаемое
    Addend := Addends.Add(Vars.FindById("x1"));
    //коэффициент при переменной
    Addend.Coeff := 0.5;
    //лаг
    Addend.Lag := 1;
    //2-е слагаемое
    Addend := Addends.Add(Vars.FindById("x2"));
    //коэффициент при переменной
    Addend.Coeff := -0.3;
    //лаг
    Addend.Lag := 1;
    //3-е слагаемое
    Addend := Addends.Add(Vars.FindById("x3"));
    //коэффициент при переменной
    Addend.Coeff := 0.1;
    //лаг
    Addend.Lag := 1;
    //4-е слагаемое
    Addend := Addends.Add(Vars.FindById("x4"));
    //коэффициент при переменной
    Addend.Coeff := 1;
    //лаг
    Addend.Lag := 1;
    // Уравнение №2
    Eq := EqS.Add;
    AddendS := Eq.Addends;
    //левая часть
    Addend := Addends.Add(Vars.FindById("x2"));
    //коэффициент при переменной
    Addend.Coeff := 1;
    //лаг
    Addend.Lag := 0;
    //1-е слагаемое
    Addend := Addends.Add(Vars.FindById("x1"));
    //коэффициент при переменной
    Addend.Coeff := -0.2;
    //лаг
    Addend.Lag := 1;
    //2-е слагаемое
    Addend := Addends.Add(Vars.FindById("x2"));
    //коэффициент при переменной
    Addend.Coeff := 0.1;
    //лаг
    Addend.Lag := 1;
    //3-е слагаемое
    Addend := Addends.Add(Vars.FindById("x5"));
    //коэффициент при переменной
    Addend.Coeff := 1;
    //лаг
    Addend.Lag := 1;
    // Уравнение №3
    Eq := EqS.Add;
    AddendS := Eq.Addends;
    //левая часть
    Addend := Addends.Add(Vars.FindById("x3"));
    //коэффициент при переменной
    Addend.Coeff := 1;
    //лаг
    Addend.Lag := 0;
    //1-е слагаемое
    Addend := Addends.Add(Vars.FindById("x3"));
    //коэффициент при переменной
    Addend.Coeff := 0.1;
    //лаг
    Addend.Lag := 1;
    //2-е слагаемое
    Addend := Addends.Add(Vars.FindById("x6"));
    //коэффициент при переменной
    Addend.Coeff := 1;
    //лаг
    Addend.Lag := 1;    
    // ЦЕЛЕВАЯ ФУНКЦИЯ
    ObjFun := ZCU.CriterionFunction;
    //=== x4
    For i := 1 To 7 Do
        Addend := ObjFun.Addends.Add(Vars.FindById("x4"));
        Addend.Coeff := 1;
        Addend.Lag := 7 - i;
    End For;
    //=== x5
    For i := 1 To 7 Do
        Addend := ObjFun.Addends.Add(Vars.FindById("x5"));
        Addend.Coeff := 1;
        Addend.Lag := 7 - i;
    End For;
    //=== x6
    For i := 1 To 7 Do
        Addend := ObjFun.Addends.Add(Vars.FindById("x6"));
        Addend.Coeff := 1;
        Addend.Lag := 7 - i;
    End For;
    TimeInterval := 7;
    ZCU.Extremum := ExtremumType.Minimum;
    Res := ZCU.Evaluate(TimeInterval) As ILoResults;
    s := "Оптимальное значение: " + Res.OptimalValue.ToString;
    Debug.WriteLine(s);
    s := Res.ErrorMsg + " (Код: " + Res.Status.ToString + ")";
    Debug.WriteLine(s);
    s := "     ";
    For j := 1 To Vars.Count Do
        Vrbl := Vars.Item(j - 1);
        s := s + Vrbl.Id + ",        ";
    End For;
    Debug.WriteLine(s);
    ci := CultureInfo.Current;
    For i := 1 To TimeInterval Do
        s := "t=" + i.ToString + ", ";
        For j := 1 To Vars.Count Do
            Vrbl := Vars.Item(j - 1);
            Val := Res.VarValues(Vrbl.Id)[i - 1];
            s := s + ci.FormatDoublePrec(Val, 6) + ", ";
        End For;
        Debug.WriteLine(s);
    End For;
End Sub UserProc;

После выполнения примера в окно консоли будут выведены результаты расчетов.

См. также:

ICpLinearOptimization