ICpTargetAdjustment.Tolerance

Fore syntax

Tolerance: Double;

Fore.NET syntax

Tolerance: double;

Description

The Tolerance property determines accuracy of solution.

Comments

Default value - 0,0001.

Fore example

Add a link to the Cp system assembly.

The example uses the MyCallBackCycle custom class. Implementation of this class is given in the example for ICallbackCycle.Execute.

Sub UserProc;
Var
    TargetAdj: ICpTargetAdjustment;
    T: Integer;
    RetroX1, RetroX2, RetroU, RetroV: Array Of Double;
    InitApproximation, ValuesI, ValuesJ: Array Of Double;
    i, j: Integer;
    VarsP: ITargetPhaseVariablesArray;
    VrblP: ITargetPhaseVariable;
    VarConstrs: IVarTargetConstraintsArray;
    VarConstr: IVarTargetConstraint;
    VarsC: ITargetControlVariablesArray;
    VrblC: ITargetControlVariable;
    Expls: INonLinearExplanatories;
    Expl: INonLinearExplanatory;
    Ser: Array[4Of Double;
    Constraints: ITargetConstraints;
    Constraint: ITargetConstraint;
    ConInfoArray: ITargetConstraintInfoArray;
    ConInfo: ITargetConstraintInfo;
    Res: ITargetResults;
    Val: Double;
    MyCallBackC: MyCallBackCycle;
Begin
    TargetAdj := New TargetAdjustment.Create;
    // Set period
    T := 6;
    // Create variables with restrospective
    RetroX1 := New Double[T];
    RetroX2 := New Double[T];
    RetroU := New Double[T];
    RetroV := New Double[T];
    ValuesI := New Double[T];
    ValuesJ := New Double[T];
    // Create an array of initial approximations
    InitApproximation := New Double[T];
    // Set initial variable values
    For i := 0 To T - 1 Do
        RetroX1[i] := 0.8 + i / 5;
        RetroX2[i] := 0.85 + i / 4;
        RetroU[i] := 0.9 + i / 10;
        RetroV[i] := 0.95 + i / 10;
        ValuesI[i] := 0.6 + i / 8;
        ValuesJ[i] := 0.7 + i / 6;
    End For;
    // Get phase variables
    VarsP := TargetAdj.PhaseVariables;
    // Add phase variable x1
    VrblP := VarsP.Add("x1");
    VrblP.Name := "x1";
    // Set retrospective values
    VrblP.Retrospective := RetroX1;
    // Set order of variables
    VrblP.CoefficientsOrder := "x1[t];x1[t-1]";
    // Get phase variable constraints
    VarConstrs := VrblP.Constraints;
    For i := 0 To T - 1 Do
        // Create a new constraint
        VarConstr := VarConstrs.Add;
        // Set borders
        VarConstr.LowerBound := -10 - i / 100;
        VarConstr.UpperBound := 10 + i / 100;
        // Specify the current moment of time
        VarConstr.TimeMoment := i;
    End For;
    // Set frequency equation
    VrblP.FunctionExpression := "0.3 * x1[t-1] + 0.1 * x2[t-1] + u[t-1] * x1[t-1] *x2[t-1]";
    // Add phase variable x2
    VrblP := VarsP.Add("x2");
    VrblP.Name := "x2";
    VrblP.Retrospective := RetroX2;
    VrblP.CoefficientsOrder := "x2[t];x2[t-1]";
    VarConstrs := VrblP.Constraints;
    For i := 0 To T - 1 Do
        VarConstr := VarConstrs.Add;
        VarConstr.LowerBound := -100-i;
        VarConstr.UpperBound := 100+i;
        VarConstr.TimeMoment := i;
    End For;
    VrblP.FunctionExpression := "(-0.2) * x1[t-1] + 0.4 *x2[t-1] + (x1[t-1] * x2[t-1])/(v[t]+1)";
    // Get controlling variables
    VarsC := TargetAdj.ControlVariables;
    // Add controlling variable u
    VrblC := VarsC.Add("u");
    VrblC.Name := "u";
    // Set retrospective values
    VrblC.Retrospective := RetroU;
    // Set order of coefficients
    VrblC.CoefficientsOrder := "u[t];u[t-1]";
    // Set values of initial approximations
    For i := 0 To T - 1 Do
        InitApproximation[i] := 1.2 + (i + 1) / 100;
    End For;
    VrblC.InitApproximation := InitApproximation;
    // Get controlling variable constraints
    VarConstrs := VrblC.Constraints;
    For i := 0 To T - 1 Do
        // Add constraint
        VarConstr := VarConstrs.Add;
        // Set constraint borders
        VarConstr.LowerBound := 1;
        VarConstr.UpperBound := 2;
        // Set the current moment of time
        VarConstr.TimeMoment := i;
    End For;
    // Add controlling variable v
    VrblC := VarsC.Add("v");
    VrblC.Name := "v";
    VrblC.Retrospective := RetroV;
    VrblC.CoefficientsOrder := "v[t];v[t-1]";
    For i:=0 To T-1 Do
        InitApproximation[i] := 1.5+ (i+1)/100;
    End For;    
    VrblC.InitApproximation := InitApproximation;
    VarConstrs := VrblC.Constraints;
    For i := 0 To T - 1 Do
        VarConstr := VarConstrs.Add;
        VarConstr.LowerBound := 0.8;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VarConstr.UpperBound&nbsp;:=&nbsp;<font color="#008000">7</font>;<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VarConstr.TimeMoment&nbsp;:=&nbsp;i;<br/> &nbsp;&nbsp;&nbsp;&nbsp;<font color="#008080">End</font>&nbsp;<font color="#008080">For</font>;<br/> &nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//&nbsp;Get&nbsp;explanatory&nbsp;series<br/> </font>&nbsp;&nbsp;&nbsp;&nbsp;Expls&nbsp;:=&nbsp;TargetAdj.Explanatories;<br/> &nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//&nbsp;Set&nbsp;an explanatory&nbsp;series&nbsp;i<br/> </font>&nbsp;&nbsp;&nbsp;&nbsp;Expl&nbsp;:=&nbsp;Expls.Add;<br/> &nbsp;&nbsp;&nbsp;&nbsp;Expl.VariableName&nbsp;:=&nbsp;<font color="#800000">&quot;i&quot;</font>;<br/> &nbsp;&nbsp;&nbsp;&nbsp;Expl.CoefficientsOrder&nbsp;:=&nbsp;<font color="#800000">&quot;i[t]&quot;</font>;<br/> &nbsp;&nbsp;&nbsp;&nbsp;Expl.Series&nbsp;:=&nbsp;ValuesI;<br/> &nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//&nbsp;Set&nbsp;an explanatory&nbsp;series&nbsp;j<br/> </font>&nbsp;&nbsp;&nbsp;&nbsp;Expl&nbsp;:=&nbsp;Expls.Add;<br/> &nbsp;&nbsp;&nbsp;&nbsp;Expl.VariableName&nbsp;:=&nbsp;<font color="#800000">&quot;j&quot;</font>;<br/> &nbsp;&nbsp;&nbsp;&nbsp;Expl.CoefficientsOrder&nbsp;:=&nbsp;<font color="#800000">&quot;j[t]&quot;</font>;<br/> &nbsp;&nbsp;&nbsp;&nbsp;Expl.Series&nbsp;:=&nbsp;ValuesJ;<br/> &nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//&nbsp;Set&nbsp;criterion&nbsp;trajectory<br/> </font>&nbsp;&nbsp;&nbsp;&nbsp;ser[<font color="#008000">0</font>]&nbsp;:=&nbsp;<font color="#008000">1</font>;<br/> &nbsp;&nbsp;&nbsp;&nbsp;ser[<font color="#008000">1</font>]&nbsp;:=&nbsp;<font color="#008000">2</font>;<br/> &nbsp;&nbsp;&nbsp;&nbsp;ser[<font color="#008000">2</font>]&nbsp;:=&nbsp;<font color="#008000">3</font>;<br/> &nbsp;&nbsp;&nbsp;&nbsp;ser[<font color="#008000">3</font>]&nbsp;:=&nbsp;<font color="#008000">4</font>;<br/> &nbsp;&nbsp;&nbsp;&nbsp;TargetAdj.TargetTrajectory&nbsp;:=&nbsp;Ser;<br/> &nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//&nbsp;Set&nbsp;criterion&nbsp;function<br/> </font>&nbsp;&nbsp;&nbsp;&nbsp;TargetAdj.CriterionFunction&nbsp;:=&nbsp;<font color="#800000">&quot;x1[t]&nbsp;+&nbsp;x2[t-1]&nbsp;-&nbsp;u[t]&nbsp;+&nbsp;i[t]&nbsp;+&nbsp;j[t]&quot;</font>;<br/> &nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//&nbsp;Set&nbsp;number of&nbsp;iterations<br/> </font>&nbsp;&nbsp;&nbsp;&nbsp;TargetAdj.MaxIterationsCount&nbsp;:=&nbsp;<font color="#008000">25000</font>;<br/> &nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//&nbsp;Set&nbsp;accuracy of&nbsp;solution<br/> </font>&nbsp;&nbsp;&nbsp;&nbsp;TargetAdj.Tolerance&nbsp;:=&nbsp;<font color="#008000">0</font>.<font color="#008000">00001</font>;<br/> &nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//&nbsp;Get&nbsp;non-linear&nbsp;constraints&nbsp;of criterion&nbsp;function<br/> </font>&nbsp;&nbsp;&nbsp;&nbsp;Constraints&nbsp;:=&nbsp;TargetAdj.Constraints;<br/> &nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//&nbsp;Add&nbsp;non-linear&nbsp;constraint<br/> </font>&nbsp;&nbsp;&nbsp;&nbsp;Constraint&nbsp;:=&nbsp;Constraints.Add;<br/> &nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//&nbsp;Set&nbsp;non-linear&nbsp;constraint&nbsp;expression<br/> </font>&nbsp;&nbsp;&nbsp;&nbsp;Constraint.Expression&nbsp;:=&nbsp;<font color="#800000">&quot;v[t]&nbsp;+&nbsp;u[t]&nbsp;+&nbsp;x1[t]*0.001&quot;</font>;<br/> &nbsp;&nbsp;&nbsp;&nbsp;ConInfoArray&nbsp;:=&nbsp;Constraint.Constraints;<br/> &nbsp;&nbsp;&nbsp;&nbsp;<font color="#008080">For</font>&nbsp;i&nbsp;:=&nbsp;<font color="#008000">0</font>&nbsp;<font color="#008080">To</font>&nbsp;T&nbsp;-&nbsp;<font color="#008000">1</font>&nbsp;<font color="#008080">Do</font><br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conInfo&nbsp;:=&nbsp;ConInfoArray.Add;<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conInfo.TimeMoment&nbsp;:=&nbsp;i;<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conInfo.LowerBound&nbsp;:=&nbsp;-<font color="#008000">10</font>.<font color="#008000">5555</font>;<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;coninfo.UpperBound&nbsp;:=&nbsp;<font color="#008000">10</font>.<font color="#008000">55555</font>;<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;coninfo.LowerBoundFixed&nbsp;:=&nbsp;<font color="#008080">False</font>;<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;coninfo.UpperBoundFixed&nbsp;:=&nbsp;<font color="#008080">False</font>;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/> &nbsp;&nbsp;&nbsp;&nbsp;<font color="#008080">End</font>&nbsp;<font color="#008080">For</font>;<br/> &nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//&nbsp;Set&nbsp;problem&nbsp;type<br/> </font>&nbsp;&nbsp;&nbsp;&nbsp;TargetAdj.AutoSearchType&nbsp;:=&nbsp;TargetAutoSearchType.MinError;<br/> &nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//&nbsp;Set&nbsp;number of&nbsp;cycles<br/> </font>&nbsp;&nbsp;&nbsp;&nbsp;TargetAdj.AutoAdjustMaxIter&nbsp;:=&nbsp;<font color="#008000">10</font>;<br/> &nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//&nbsp;Set&nbsp;satisfactory&nbsp;tolerance<br/> </font>&nbsp;&nbsp;&nbsp;&nbsp;TargetAdj.AutoAdjustSatisfactoryTolerance&nbsp;:=&nbsp;<font color="#008000">1</font>.<font color="#008000">01</font>;<br/> &nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//&nbsp;Set&nbsp;number of&nbsp;constraints&nbsp;removed&nbsp;in&nbsp;one&nbsp;iteration<br/> </font>&nbsp;&nbsp;&nbsp;&nbsp;TargetAdj.AutoAdjustRemoveCount&nbsp;:=&nbsp;<font color="#008000">2</font>;<br/> &nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//&nbsp;Set&nbsp;handler&nbsp;for&nbsp;calculation of&nbsp;controlling&nbsp;variable&nbsp;values<br/> </font>&nbsp;&nbsp;&nbsp;&nbsp;MyCallBackC&nbsp;:=&nbsp;<font color="#008080">New</font>&nbsp;MyCallbackCycle.Create;<br/> &nbsp;&nbsp;&nbsp;&nbsp;TargetAdj.CallbackCycle&nbsp;:=&nbsp;MyCallBackC;<font color="#008000"><br/> </font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//&nbsp;Execute&nbsp;calculation<br/> </font>&nbsp;&nbsp;&nbsp;&nbsp;Res&nbsp;:=&nbsp;TargetAdj.Evaluate(T)&nbsp;<font color="#008080">As</font>&nbsp;ITargetResults;<br/> &nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//&nbspIf&nbsp;calculation&nbsp;is completed&nbsp;without&nbsp;errors,&nbsp;output&nbsp;results&nbsp;to&nbsp;console<br/> </font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008080">If</font>&nbsp;res.Status&nbsp;=&nbsp;<font color="#008000">0</font>&nbsp;<font color="#008080">Then</font><br/> &nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//&nbsp;Output&nbsp;optimal&nbsp;value<br/> </font>&nbsp;&nbsp;&nbsp;&nbsp;Debug.WriteLine(<font color="#800000">&quot;Optimal&nbsp;value:&quot;</font>);<br/> &nbsp;&nbsp;&nbsp;&nbsp;Debug.Indent;<br/> &nbsp;&nbsp;&nbsp;&nbsp;Debug.WriteLine(res.OptimalValue);<br/> &nbsp;&nbsp;&nbsp;&nbsp;Debug.Unindent;<br/> &nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//&nbsp;Output&nbsp;controlling&nbsp;variable&nbsp;values<br/> </font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008080">For</font>&nbsp;j&nbsp;:=&nbsp;<font color="#008000">1</font>&nbsp;<font color="#008080">To</font>&nbsp;VarsC.Count&nbsp;<font color="#008080">Do</font><br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VrblC&nbsp;:=&nbsp;VarsC.Item(j&nbsp;-&nbsp;<font color="#008000">1</font>);<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Debug.WriteLine(<font color="#800000">&quot;Controlling&nbsp;variable&nbsp;values&nbsp;'&quot;</font>&nbsp;+&nbsp;VrblC.Id&nbsp;+&nbsp;<font color="#800000">&quot;':&quot;</font>);<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Debug.Indent;<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008080">For</font>&nbsp;i&nbsp;:=&nbsp;<font color="#008000">1</font>&nbsp;<font color="#008080">To</font>&nbsp;T&nbsp;<font color="#008080">Do</font><br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Val&nbsp;:=&nbsp;Res.VarValues(VrblC.Id)[i&nbsp;-&nbsp;<font color="#008000">1</font>];<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Debug.WriteLine(i.ToString&nbsp;+&nbsp;<font color="#800000">&quot;:&nbsp;&quot;</font>&nbsp;+&nbsp;Val.ToString);<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008080">End</font>&nbsp;<font color="#008080">For</font>;<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Debug.Unindent;<br/> &nbsp;&nbsp;&nbsp;&nbsp;<font color="#008080">End</font>&nbsp;<font color="#008080">For</font>;<br/> &nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//&nbsp;Output&nbsp;phase &nbsp;variable&nbsp;values<br/> </font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008080">For</font>&nbsp;j&nbsp;:=&nbsp;<font color="#008000">1</font>&nbsp;<font color="#008080">To</font>&nbsp;VarsP.Count&nbsp;<font color="#008080">Do</font><br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VrblP&nbsp;:=&nbsp;VarsP.Item(j&nbsp;-&nbsp;<font color="#008000">1</font>);<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Debug.WriteLine(<font color="#800000">&quot;Phase&nbsp;variable&nbsp;values&nbsp;'&quot;</font>&nbsp;+&nbsp;VrblP.Id&nbsp;+&nbsp;<font color="#800000">&quot;':&quot;</font>);<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Debug.Indent;<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008080">For</font>&nbsp;i&nbsp;:=&nbsp;<font color="#008000">1</font>&nbsp;<font color="#008080">To</font>&nbsp;T&nbsp;<font color="#008080">Do</font><br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Val&nbsp;:=&nbsp;Res.VarValues(VrblP.Id)[i&nbsp;-&nbsp;<font color="#008000">1</font>];<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Debug.WriteLine(i.ToString&nbsp;+&nbsp;<font color="#800000">&quot;:&nbsp;&quot;</font>&nbsp;+&nbsp;Val.ToString);<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008080">End</font>&nbsp;<font color="#008080">For</font>;<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Debug.Unindent;<br/> &nbsp;&nbsp;&nbsp;&nbsp;<font color="#008080">End</font>&nbsp;<font color="#008080">For</font>;<br/> &nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//&nbsp;Output&nbsp;change&nbsp;progress&nbsp;of criterion&nbsp;function&nbsp;during&nbsp;solution<br/> </font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//&nbsp;non-linear&nbsp;programming&nbsp;problems&nbsp;&nbsp;<br/> </font>&nbsp;&nbsp;&nbsp;&nbsp;Debug.WriteLine(<font color="#800000">&quot;Change&nbsp;progress for&nbsp;criterion&nbsp;function&nbsp;during&nbsp;solution&quot;</font>&nbsp;+<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#800000">&quot;&nbsp;Non-linear&nbsp;programming&nbsp;problems:&quot;</font>);<br/> &nbsp;&nbsp;&nbsp;&nbsp;Debug.Indent;<br/> &nbsp;&nbsp;&nbsp;&nbsp;<font color="#008080">For</font>&nbsp;i&nbsp;:=&nbsp;<font color="#008000">0</font>&nbsp;<font color="#008080">To</font>&nbsp;Res.ObjValByIter.Length&nbsp;-&nbsp;<font color="#008000">1</font>&nbsp;<font color="#008080">Do</font><br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Debug.WriteLine(Res.ObjValByIter[i]);<br/> &nbsp;&nbsp;&nbsp;&nbsp;<font color="#008080">End</font>&nbsp;<font color="#008080">For</font>;<br/> &nbsp;&nbsp;&nbsp;&nbsp;Debug.Unindent;<br/> &nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//&nbsp;Output&nbsp;change&nbsp;progress&nbsp;of criterion&nbsp;function&nbsp;during<br/> </font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//&nbsp;sequantial&nbsp;limit&nbsp;loosening<br/> </font>&nbsp;&nbsp;&nbsp;&nbsp;Debug.WriteLine(<font color="#800000">&quot;Change&nbsp;progress&nbsp;of criterion&nbsp;function&nbsp;during&quot;</font>&nbsp;+<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#800000">&quot;&nbsp;sequential&nbsp;limit&nbsp;loosening:&quot;</font>);<br/> &nbsp;&nbsp;&nbsp;&nbsp;Debug.Indent;<br/> &nbsp;&nbsp;&nbsp;&nbsp;<font color="#008080">For</font>&nbsp;i&nbsp;:=&nbsp;<font color="#008000">0</font>&nbsp;<font color="#008080">To</font>&nbsp;Res.ObjValByAdjustIter.Length&nbsp;-&nbsp;<font color="#008000">1</font>&nbsp;<font color="#008080">Do</font><br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Debug.WriteLine(Res.ObjValByAdjustIter[i]);<br/> &nbsp;&nbsp;&nbsp;&nbsp;<font color="#008080">End</font>&nbsp;<font color="#008080">For</font>;<br/> &nbsp;&nbsp;&nbsp;&nbsp;Debug.Unindent;<br/> &nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//&nbsp;Output&nbsp;optimal&nbsp;trajectory&nbs;of criterion&nbsp;function<br/> </font>&nbsp;&nbsp;&nbsp;&nbsp;Debug.WriteLine(<font color="#800000">&quot;Optimal&nbsp;trajectory&nbsp;of criterion&nbsp;function:&quot;</font>);<br/> &nbsp;&nbsp;&nbsp;&nbsp;Debug.Indent;<br/> &nbsp;&nbsp;&nbsp;&nbsp;<font color="#008080">For</font>&nbsp;i&nbsp;:=&nbsp;<font color="#008000">0</font>&nbsp;<font color="#008080">To</font>&nbsp;Res.CriterionFunctionTrajectory.Length&nbsp;-&nbsp;<font color="#008000">1</font>&nbsp;<font color="#008080">Do</font><br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Debug.WriteLine(Res.CriterionFunctionTrajectory[i]);<br/> &nbsp;&nbsp;&nbsp;&nbsp;<font color="#008080">End</font>&nbsp;<font color="#008080">For</font>;<br/> &nbsp;&nbsp;&nbsp;&nbsp;Debug.Unindent;<br/> &nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//&nbsp;If&nbsp;calculation&nbsp;is completed&nbsp;with&nbsp;error,&nbsp;output&nbsp;its&nbsp;text<br/> </font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008080">Else</font><br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Debug.WriteLine(res.ErrorMsg);<br/> &nbsp;&nbsp;&nbsp;&nbsp;<font color="#008080">End</font>&nbsp;<font color="#008080">If</font>;<br/> <font color="#008080">End</font>&nbsp;<font color="#008080">Sub</font>&nbsp;UserProc;

After executing the example optimization problem parameters are set, the problem is calculated, results are displayed to the console.

Fore.NET example

The requirements and result of the Fore.NET example execution match with those in the Fore example.

Imports Prognoz.Platform.Interop.Cp;

Public Shared Sub Main(Params: StartParams);
Var
    TargetAdj: ICpTargetAdjustment;
    T: Integer;
    RetroX1, RetroX2, RetroU, RetroV: Array Of Double;
    InitApproximation, ValuesI, ValuesJ: Array Of Double;
    i, j: Integer;
    VarsP: ITargetPhaseVariablesArray;
    VrblP: ITargetPhaseVariable;
    VarConstrs: IVarTargetConstraintsArray;
    VarConstr: IVarTargetConstraint;
    VarsC: ITargetControlVariablesArray;
    VrblC: ITargetControlVariable;
    Expls: INonLinearExplanatories;
    Expl: INonLinearExplanatory;
    Ser: Array[4Of Double;
    Constraints: ITargetConstraints;
    Constraint: ITargetConstraint;
    ConInfoArray: ITargetConstraintInfoArray;
    ConInfo: ITargetConstraintInfo;
    Res: ITargetResults;
    Val: Double;
    MyCallBackC: MyCallBackCycle;
Begin
    TargetAdj := New TargetAdjustment.Create();
    // Set period
    T := 6;
    // Create variables with restrospective
    RetroX1 := New Double[T];
    RetroX2 := New Double[T];
    RetroU := New Double[T];
    RetroV := New Double[T];
    ValuesI := New Double[T];
    ValuesJ := New Double[T];
    // Create an array of initial approximations
    InitApproximation := New Double[T];
    // Set initial variable values
    For i := 0 To T - 1 Do
        RetroX1[i] := 0.8 + i / 5;
        RetroX2[i] := 0.85 + i / 4;
        RetroU[i] := 0.9 + i / 10;
        RetroV[i] := 0.95 + i / 10;
        ValuesI[i] := 0.6 + i / 8;
        ValuesJ[i] := 0.7 + i / 6;
    End For;
    // Get phase variables
    VarsP := TargetAdj.PhaseVariables;
    // Add phase variable x1
    VrblP := VarsP.Add("x1");
    VrblP.Name := "x1";
    // Set retrospective values
    VrblP.Retrospective := RetroX1;
    // Set order of variables
    VrblP.CoefficientsOrder := "x1[t];x1[t-1]";
    // Get phase variable constraints
    VarConstrs := VrblP.Constraints;
    For i := 0 To T - 1 Do
        // Create a new constraint
        VarConstr := VarConstrs.Add();
        // Set borders
        VarConstr.LowerBound := -10 - i / 100;
        VarConstr.UpperBound := 10 + i / 100;
        // Specify the current moment of time
        VarConstr.TimeMoment := i;
    End For;
    // Set frequency equation
    VrblP.FunctionExpression := "0.3 * x1[t-1] + 0.1 * x2[t-1] + u[t-1] * x1[t-1] *x2[t-1]";
    // Add phase variable x2
    VrblP := VarsP.Add("x2");
    VrblP.Name := "x2";
    VrblP.Retrospective := RetroX2;
    VrblP.CoefficientsOrder := "x2[t];x2[t-1]";
    VarConstrs := VrblP.Constraints;
    For i := 0 To T - 1 Do
        VarConstr := VarConstrs.Add();
        VarConstr.LowerBound := -100-i;
        VarConstr.UpperBound := 100+i;
        VarConstr.TimeMoment := i;
    End For;
    VrblP.FunctionExpression := "(-0.2) * x1[t-1] + 0.4 *x2[t-1] + (x1[t-1] * x2[t-1])/(v[t]+1)";
    // Get controlling variables
    VarsC := TargetAdj.ControlVariables;
    // Add controlling variable u
    VrblC := VarsC.Add("u");
    VrblC.Name := "u";
    // Set retrospective values
    VrblC.Retrospective := RetroU;
    // Set order of coefficients
    VrblC.CoefficientsOrder := "u[t];u[t-1]";
    // Set values of initial approximations
    For i := 0 To T - 1 Do
        InitApproximation[i] := 1.2 + (i + 1) / 100;
    End For;
    VrblC.InitApproximation := InitApproximation;
    // Get controlling variable constraints
    VarConstrs := VrblC.Constraints;
    For i := 0 To T - 1 Do
        // Add constraint
        VarConstr := VarConstrs.Add();
        // Set constraint borders
        VarConstr.LowerBound := 1;
        VarConstr.UpperBound := 2;
        // Set the current moment of time
        VarConstr.TimeMoment := i;
    End For;
    // Add controlling variable v
    VrblC := VarsC.Add("v");
    VrblC.Name := "v";
    VrblC.Retrospective := RetroV;
    VrblC.CoefficientsOrder := "v[t];v[t-1]";
    For i:=0 To T-1 Do
        InitApproximation[i] := 1.5+ (i+1)/100;
    End For;    
    VrblC.InitApproximation := InitApproximation;
    VarConstrs := VrblC.Constraints;
&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008080">For</font>&nbsp;i&nbsp;:=&nbsp;<font color="#008000">0</font>&nbsp;<font color="#008080">To</font>&nbsp;T&nbsp;-&nbsp;<font color="#008000">1</font>&nbsp;<font color="#008080">Do</font><br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VarConstr&nbsp;:=&nbsp;VarConstrs.Add();<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VarConstr.LowerBound&nbsp;:=&nbsp;<font color="#008000">0</font>.<font color="#008000">8</font>;<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VarConstr.UpperBound&nbsp;:=&nbsp;<font color="#008000">7</font>;<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VarConstr.TimeMoment&nbsp;:=&nbsp;i;<br/> &nbsp;&nbsp;&nbsp;&nbsp;<font color="#008080">End</font>&nbsp;<font color="#008080">For</font>;<br/> &nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//&nbsp;Get&nbsp;explanatory&nbsp;series<br/> </font>&nbsp;&nbsp;&nbsp;&nbsp;Expls&nbsp;:=&nbsp;TargetAdj.Explanatories;<br/> &nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//&nbsp;Set&nbsp;an explanatory&nbsp;series&nbsp;i<br/> </font>&nbsp;&nbsp;&nbsp;&nbsp;Expl&nbsp;:=&nbsp;Expls.Add();<br/> &nbsp;&nbsp;&nbsp;&nbsp;Expl.VariableName&nbsp;:=&nbsp;<font color="#800000">&quot;i&quot;</font>;<br/> &nbsp;&nbsp;&nbsp;&nbsp;Expl.CoefficientsOrder&nbsp;:=&nbsp;<font color="#800000">&quot;i[t]&quot;</font>;<br/> &nbsp;&nbsp;&nbsp;&nbsp;Expl.Series&nbsp;:=&nbsp;ValuesI;<br/> &nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//&nbsp;Set&nbsp;an explanatory&nbsp;series&nbsp;j<br/> </font>&nbsp;&nbsp;&nbsp;&nbsp;Expl&nbsp;:=&nbsp;Expls.Add();<br/> &nbsp;&nbsp;&nbsp;&nbsp;Expl.VariableName&nbsp;:=&nbsp;<font color="#800000">&quot;j&quot;</font>;<br/> &nbsp;&nbsp;&nbsp;&nbsp;Expl.CoefficientsOrder&nbsp;:=&nbsp;<font color="#800000">&quot;j[t]&quot;</font>;<br/> &nbsp;&nbsp;&nbsp;&nbsp;Expl.Series&nbsp;:=&nbsp;ValuesJ;<br/> &nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//&nbsp;Set&nbsp;criterion&nbsp;trajectory<br/> </font>&nbsp;&nbsp;&nbsp;&nbsp;ser[<font color="#008000">0</font>]&nbsp;:=&nbsp;<font color="#008000">1</font>;<br/> &nbsp;&nbsp;&nbsp;&nbsp;ser[<font color="#008000">1</font>]&nbsp;:=&nbsp;<font color="#008000">2</font>;<br/> &nbsp;&nbsp;&nbsp;&nbsp;ser[<font color="#008000">2</font>]&nbsp;:=&nbsp;<font color="#008000">3</font>;<br/> &nbsp;&nbsp;&nbsp;&nbsp;ser[<font color="#008000">3</font>]&nbsp;:=&nbsp;<font color="#008000">4</font>;<br/> &nbsp;&nbsp;&nbsp;&nbsp;TargetAdj.TargetTrajectory&nbsp;:=&nbsp;Ser;<br/> &nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//&nbsp;Set&nbsp;criterion&nbsp;function<br/> </font>&nbsp;&nbsp;&nbsp;&nbsp;TargetAdj.CriterionFunction&nbsp;:=&nbsp;<font color="#800000">&quot;x1[t]&nbsp;+&nbsp;x2[t-1]&nbsp;-&nbsp;u[t]&nbsp;+&nbsp;i[t]&nbsp;+&nbsp;j[t]&quot;</font>;<br/> &nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//&nbsp;Set&nbsp;number of&nbsp;iterations<br/> </font>&nbsp;&nbsp;&nbsp;&nbsp;TargetAdj.MaxIterationsCount&nbsp;:=&nbsp;<font color="#008000">25000</font>;<br/> &nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//&nbsp;Set&nbsp;accuracy&nbsp;of solution<br/> </font>&nbsp;&nbsp;&nbsp;&nbsp;TargetAdj.Tolerance&nbsp;:=&nbsp;<font color="#008000">0</font>.<font color="#008000">00001</font>;<br/> &nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//&nbsp;Get&nbsp;non-linear&nbsp;constraints of&nbsp;criterion&nbsp;function<br/> </font>&nbsp;&nbsp;&nbsp;&nbsp;Constraints&nbsp;:=&nbsp;TargetAdj.Constraints;<br/> &nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//&nbsp;Add&nbsp;non-linear&nbsp;constraint<br/> </font>&nbsp;&nbsp;&nbsp;&nbsp;Constraint&nbsp;:=&nbsp;Constraints.Add();<br/> &nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//&nbsp;Set&nbsp;non-linear&nbsp;constraint&nbsp;expression<br/> </font>&nbsp;&nbsp;&nbsp;&nbsp;Constraint.Expression&nbsp;:=&nbsp;<font color="#800000">&quot;v[t]&nbsp;+&nbsp;u[t]&nbsp;+&nbsp;x1[t]*0.001&quot;</font>;<br/> &nbsp;&nbsp;&nbsp;&nbsp;ConInfoArray&nbsp;:=&nbsp;Constraint.Constraints;<br/> &nbsp;&nbsp;&nbsp;&nbsp;<font color="#008080">For</font>&nbsp;i&nbsp;:=&nbsp;<font color="#008000">0</font>&nbsp;<font color="#008080">To</font>&nbsp;T&nbsp;-&nbsp;<font color="#008000">1</font>&nbsp;<font color="#008080">Do</font><br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conInfo&nbsp;:=&nbsp;ConInfoArray.Add();<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conInfo.TimeMoment&nbsp;:=&nbsp;i;<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conInfo.LowerBound&nbsp;:=&nbsp;-<font color="#008000">10</font>.<font color="#008000">5555</font>;<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;coninfo.UpperBound&nbsp;:=&nbsp;<font color="#008000">10</font>.<font color="#008000">55555</font>;<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;coninfo.LowerBoundFixed&nbsp;:=&nbsp;<font color="#008080">False</font>;<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;coninfo.UpperBoundFixed&nbsp;:=&nbsp;<font color="#008080">False</font>;<br/> &nbsp;&nbsp;&nbsp;&nbsp;<font color="#008080">End</font>&nbsp;<font color="#008080">For</font>;<br/> &nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//&nbsp;Set&nbsp;problem&nbsp;type<br/> </font>&nbsp;&nbsp;&nbsp;&nbsp;TargetAdj.AutoSearchType&nbsp;:=&nbsp;TargetAutoSearchType.tastMinError;<br/> &nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//&nbsp;Set&nbsp;number of&nbsp;cycles<br/> </font>&nbsp;&nbsp;&nbsp;&nbsp;TargetAdj.AutoAdjustMaxIter&nbsp;:=&nbsp;<font color="#008000">10</font>;<br/> &nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//&nbsp;Set&nbsp;satisfactory&nbsp;tolerance<br/> </font>&nbsp;&nbsp;&nbsp;&nbsp;TargetAdj.AutoAdjustSatisfactoryTolerance&nbsp;:=&nbsp;<font color="#008000">1</font>.<font color="#008000">01</font>;<br/> &nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//&nbsp;Set&nbsp;number of&nbsp;constraints&nbsp;removed&nbsp;in&nbsp;one&nbsp;iteration<br/> </font>&nbsp;&nbsp;&nbsp;&nbsp;TargetAdj.AutoAdjustRemoveCount&nbsp;:=&nbsp;<font color="#008000">2</font>;<br/> &nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//&nbsp;Set&nbsp;handler&nbsp;for&nbsp;calculating&nbsp;values of&nbsp;controlling&nbsp;variables<br/> </font>&nbsp;&nbsp;&nbsp;&nbsp;MyCallBackC&nbsp;:=&nbsp;<font color="#008080">New</font>&nbsp;MyCallbackCycle.Create();<br/> &nbsp;&nbsp;&nbsp;&nbsp;TargetAdj.CallbackCycle&nbsp;:=&nbsp;MyCallBackC;<br/> &nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//&nbsp;Execute&nbsp;calculation<br/> </font>&nbsp;&nbsp;&nbsp;&nbsp;Res&nbsp;:=&nbsp;TargetAdj.Evaluate(T)&nbsp;<font color="#008080">As</font>&nbsp;ITargetResults;<br/> &nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//&nbsp;If&nbsp;calculation&nbsp;is completed&nbsp;without&nbsp;errors,&nbsp;output&nbsp;results&nbsp;to&nbsp;console<br/> </font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008080">If</font>&nbsp;res.Status&nbsp;=&nbsp;<font color="#008000">0</font>&nbsp;<font color="#008080">Then</font><br/> &nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//&nbsp;Output&nbsp;optimal&nbsp;value<br/> </font>&nbsp;&nbsp;&nbsp;&nbsp;System.Diagnostics.Debug.WriteLine(<font color="#800000">&quot;Optimal&nbsp;value:&quot;</font>);<br/> &nbsp;&nbsp;&nbsp;&nbsp;System.Diagnostics.Debug.Indent();<br/> &nbsp;&nbsp;&nbsp;&nbsp;<font color="#008080">For</font>&nbsp;i&nbsp;:=&nbsp;<font color="#008000">0</font>&nbsp;<font color="#008080">To</font>&nbsp;res.ObjValByAdjustIter.Length&nbsp;-&nbsp;<font color="#008000">1</font>&nbsp;<font color="#008080">Do</font><br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.Diagnostics.Debug.WriteLine(res.ObjValByAdjustIter.GetValue(i));<br/> &nbsp;&nbsp;&nbsp;&nbsp;<font color="#008080">End</font>&nbsp;<font color="#008080">For</font>;<br/> &nbsp;&nbsp;&nbsp;&nbsp;System.Diagnostics.Debug.Unindent();<br/> &nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//&nbsp;Output&nbsp;values of&nbsp;controlling&nbsp;variables<br/> </font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008080">For</font>&nbsp;j&nbsp;:=&nbsp;<font color="#008000">1</font>&nbsp;<font color="#008080">To</font>&nbsp;VarsC.Count&nbsp;<font color="#008080">Do</font><br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VrblC&nbsp;:=&nbsp;VarsC.Item[j&nbsp;-&nbsp;<font color="#008000">1</font>];<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.Diagnostics.Debug.WriteLine(<font color="#800000">&quot;Values of&nbsp;controlling&nbsp;variable&nbsp;'&quot;</font>&nbsp;+&nbsp;VrblC.Id&nbsp;+&nbsp;<font color="#800000">&quot;':&quot;</font>);<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.Diagnostics.Debug.Indent();<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008080">For</font>&nbsp;i&nbsp;:=&nbsp;<font color="#008000">1</font>&nbsp;<font color="#008080">To</font>&nbsp;T&nbsp;<font color="#008080">Do</font><br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Val&nbsp;:=&nbsp;Res.VarValues[VrblC.Id].GetValue(i&nbsp;-&nbsp;<font color="#008000">1</font>)&nbsp;<font color="#008080">As</font>&nbsp;double;<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.Diagnostics.Debug.WriteLine(i.ToString()&nbsp;+&nbsp;<font color="#800000">&quot;:&nbsp;&quot;</font>&nbsp;+&nbsp;Val.ToString());<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008080">End</font>&nbsp;<font color="#008080">For</font>;<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.Diagnostics.Debug.Unindent();<br/> &nbsp;&nbsp;&nbsp;&nbsp;<font color="#008080">End</font>&nbsp;<font color="#008080">For</font>;<br/> &nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//&nbsp;Output&nbsp;values of&nbsp;phase&nbsp;variables<br/> </font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008080">For</font>&nbsp;j&nbsp;:=&nbsp;<font color="#008000">1</font>&nbsp;<font color="#008080">To</font>&nbsp;VarsP.Count&nbsp;<font color="#008080">Do</font><br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VrblP&nbsp;:=&nbsp;VarsP.Item[j&nbsp;-&nbsp;<font color="#008000">1</font>];<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.Diagnostics.Debug.WriteLine(<font color="#800000">&quot;Values of&nbsp;phase&nbsp;variable&nbsp;'&quot;</font>&nbsp;+&nbsp;VrblP.Id&nbsp;+&nbsp;<font color="#800000">&quot;':&quot;</font>);<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.Diagnostics.Debug.Indent();<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008080">For</font>&nbsp;i&nbsp;:=&nbsp;<font color="#008000">1</font>&nbsp;<font color="#008080">To</font>&nbsp;T&nbsp;<font color="#008080">Do</font><br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Val&nbsp;:=&nbsp;Res.VarValues[VrblP.Id].GetValue(i&nbsp;-&nbsp;<font color="#008000">1</font>)&nbsp;<font color="#008080">As</font>&nbsp;double;<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.Diagnostics.Debug.WriteLine(i.ToString()&nbsp;+&nbsp;<font color="#800000">&quot;:&nbsp;&quot;</font>&nbsp;+&nbsp;Val.ToString());<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008080">End</font>&nbsp;<font color="#008080">For</font>;<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.Diagnostics.Debug.Unindent();<br/> &nbsp;&nbsp;&nbsp;&nbsp;<font color="#008080">End</font>&nbsp;<font color="#008080">For</font>;<br/> &nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//&nbsp;Output&nbsp;change&nbsp;progress&nbsp;of criterion&nbsp;function&nbsp;during&nbsp;solution of<br/> </font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//&nbsp;non-linear&nbsp;programming&nbsp;problem&nbsp;&nbsp;<br/> </font>&nbsp;&nbsp;&nbsp;&nbsp;System.Diagnostics.Debug.WriteLine(<font color="#800000">&quot;Change&nbsp;progress&nbsp;of criterion&nbsp;function&nbsp;during&nbsp;solution&nbsp;of&quot;</font>&nbsp;+<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#800000">&quot;&nbsp;non-linear&nbsp;programming&nbsp;problem:&quot;</font>);<br/> &nbsp;&nbsp;&nbsp;&nbsp;System.Diagnostics.Debug.Indent();<br/> &nbsp;&nbsp;&nbsp;&nbsp;<font color="#008080">For</font>&nbsp;i&nbsp;:=&nbsp;<font color="#008000">0</font>&nbsp;<font color="#008080">To</font>&nbsp;Res.ObjValByIter.Length&nbsp;-&nbsp;<font color="#008000">1</font>&nbsp;<font color="#008080">Do</font><br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.Diagnostics.Debug.WriteLine(Res.ObjValByIter.GetValue(i));<br/> &nbsp;&nbsp;&nbsp;&nbsp;<font color="#008080">End</font>&nbsp;<font color="#008080">For</font>;<br/> &nbsp;&nbsp;&nbsp;&nbsp;System.Diagnostics.Debug.Unindent();<br/> &nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//&nbsp;Output&nbsp;change&nbsp;progress&nbsp;of criterion&nbsp;function&nbsp;during&nbsp;<br/> </font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//&nbsp;sequential&nbsp;loosening&nbsp;of limits<br/> </font>&nbsp;&nbsp;&nbsp;&nbsp;System.Diagnostics.Debug.WriteLine(<font color="#800000">&quot;Change&nbsp;progress&nbsp;of criterion&nbsp;function&nbsp;during&quot;</font>&nbsp;+<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#800000">&quot;&nbsp;sequential&nbsp;loosening&nbsp;of limits:&quot;</font>);<br/> &nbsp;&nbsp;&nbsp;&nbsp;System.Diagnostics.Debug.Indent();<br/> &nbsp;&nbsp;&nbsp;&nbsp;<font color="#008080">For</font>&nbsp;i&nbsp;:=&nbsp;<font color="#008000">0</font>&nbsp;<font color="#008080">To</font>&nbsp;Res.ObjValByAdjustIter.Length&nbsp;-&nbsp;<font color="#008000">1</font>&nbsp;<font color="#008080">Do</font><br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.Diagnostics.Debug.WriteLine(Res.ObjValByAdjustIter.GetValue(i));<br/> &nbsp;&nbsp;&nbsp;&nbsp;<font color="#008080">End</font>&nbsp;<font color="#008080">For</font>;<br/> &nbsp;&nbsp;&nbsp;&nbsp;System.Diagnostics.Debug.Unindent();<br/> &nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//&nbsp;Output&nbsp;optimal&nbsp;trajectory&nbsp;of criterion&nbsp;function<br/> </font>&nbsp;&nbsp;&nbsp;&nbsp;System.Diagnostics.Debug.WriteLine(<font color="#800000">&quot;Optimal&nbsp;trajectory&nbsp;of criterion&nbsp;function:&quot;</font>);<br/> &nbsp;&nbsp;&nbsp;&nbsp;System.Diagnostics.Debug.Indent();<br/> &nbsp;&nbsp;&nbsp;&nbsp;<font color="#008080">For</font>&nbsp;i&nbsp;:=&nbsp;<font color="#008000">0</font>&nbsp;<font color="#008080">To</font>&nbsp;Res.CriterionFunctionTrajectory.Length&nbsp;-&nbsp;<font color="#008000">1</font>&nbsp;<font color="#008080">Do</font><br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.Diagnostics.Debug.WriteLine(Res.CriterionFunctionTrajectory.GetValue(i));<br/> &nbsp;&nbsp;&nbsp;&nbsp;<font color="#008080">End</font>&nbsp;<font color="#008080">For</font>;<br/> &nbsp;&nbsp;&nbsp;&nbsp;System.Diagnostics.Debug.Unindent();<br/> &nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//&nbsp;If&nbsp;calculation&nbsp;is completed&nbsp;with&nbsp;error,&nbsp;output&nbsp;its&nbsp;text<br/> </font>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008080">Else</font><br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.Diagnostics.Debug.WriteLine(res.ErrorMsg);<br/> &nbsp;&nbsp;&nbsp;&nbsp;<font color="#008080">End</font>&nbsp;<font color="#008080">If</font>;<br/> <font color="#008080">End</font>&nbsp;<font color="#008080">Sub</font>;

See also:

ICpTargetAdjustment