ILoResults.OptimalValue

Синтаксис

OptimalValue: Double;

Описание

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

Свойство OptimalValue возвращает оптимальное значение целевой функции.

Пример

Sub Main;

Var

ZCU: LinearOptimization;

 

Vrbl: ILoVariable; //переменная

Constr: ILoConstraint; //ограничение

Addend: ILoAddend; //слагаемое

Eq: ILoEquation; //уравнение

VarS: ILoVariables; //список переменных

ConstrS: ILoConstraints; //список ограничений

AddendS: ILoAddends; //список слагаемых

EqS: ILoEquations; //список уравнений

ObjFun: ILoCriterionFunction; //целевая функция

Res: ILoResults;

Retro: Array[1] Of 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; //лаг

Addend := Addends.Add(Vars.FindById("x1")); //1-е слагаемое

Addend.Coeff := 0.5; //коэф. при переменной

Addend.Lag := 1; //лаг

Addend := Addends.Add(Vars.FindById("x2")); //2-е слагаемое

Addend.Coeff := -0.3; //коэф. при переменной

Addend.Lag := 1; //лаг

Addend := Addends.Add(Vars.FindById("x3")); //3-е слагаемое

Addend.Coeff := 0.1; //коэф. при переменной

Addend.Lag := 1; //лаг

Addend := Addends.Add(Vars.FindById("x4")); //4-е слагаемое

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; //лаг

Addend := Addends.Add(Vars.FindById("x1")); //1-е слагаемое

Addend.Coeff := -0.2; //коэф. при переменной

Addend.Lag := 1; //лаг

Addend := Addends.Add(Vars.FindById("x2")); //2-е слагаемое

Addend.Coeff := 0.1; //коэф. при переменной

Addend.Lag := 1; //лаг

Addend := Addends.Add(Vars.FindById("x5")); //3-е слагаемое

Addend.Coeff := 1; //0.1;//коэф. при переменной

Addend.Lag := 1; //лаг

// УРАВНЕНИЕ №3

Eq := EqS.Add;

AddendS := Eq.Addends;

Addend := Addends.Add(Vars.FindById("x3")); //левая часть

Addend.Coeff := 1; //коэф. при переменной

Addend.Lag := 0; //лаг

Addend := Addends.Add(Vars.FindById("x3")); //1-е слагаемое

Addend.Coeff := 0.1; //коэф. при переменной

Addend.Lag := 1; //лаг

Addend := Addends.Add(Vars.FindById("x6")); //2-е слагаемое

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 Main;

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

См. также:

ILoResults