Id: String;
Свойство Id возвращает идентификатор переменной.
Свойство доступно только для чтения.
Добавьте ссылки на системные сборки: Cp.
Sub UserProc;
Var
ZCU: LinearOptimization;
VarS: ILoVariables;
Vrbl: ILoVariable;
ConstrS: ILoConstraints;
Constr: ILoConstraint;
AddendS: ILoAddends;
Addend: ILoAddend;
EqS: ILoEquations;
Eq: ILoEquation;
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 UserProc;
После выполнения примера в окно консоли будут выведены результаты расчетов.
См. также: