ICpTargetAdjustment.Tolerance

Syntax

Tolerance: Double;

Tolerance: double;

Description

The Tolerance property determines accuracy of solution.

Comments

The default value is 0.0001.

Example

To execute the 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 retrospective
    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 the x1 phase variable
    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 constraints of phase variable
    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;
        
// Determine current time point
        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 the x2 phase variable
    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 the u controlling variable
    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 constraints of controlling variable
    VarConstrs := VrblC.Constraints;
    
For i := 0 To T - 1 Do
        
// Add a constraint
        VarConstr := VarConstrs.Add;
        
// Set constraint borders
        VarConstr.LowerBound := 1;
        VarConstr.UpperBound := 
2;
        
// Set current moment of time
        VarConstr.TimeMoment := i;
    
End For;
    
// Add a controlling dimension 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;
        VarConstr.UpperBound := 
7;
        VarConstr.TimeMoment := i;
    
End For;
    
// Get explanatory series
    Expls := TargetAdj.Explanatories;
    
// Set controlling series i
    Expl := Expls.Add;
    Expl.VariableName := 
"i";
    Expl.CoefficientsOrder := 
"i[t]";
    Expl.Series := ValuesI;
    
// Set explanatory series j
    Expl := Expls.Add;
    Expl.VariableName := 
"j";
    Expl.CoefficientsOrder := 
"j[t]";
    Expl.Series := ValuesJ;
    
// Set target trajectory
    ser[0] := 1;
    ser[
1] := 2;
    ser[
2] := 3;
    ser[
3] := 4;
    TargetAdj.TargetTrajectory := Ser;
    
// Set target function
    TargetAdj.CriterionFunction := "x1[t] + x2[t-1] - u[t] + i[t] + j[t]";
    
// Set number of iterations
    TargetAdj.MaxIterationsCount := 25000;
    
// Set solution accuracy
    TargetAdj.Tolerance := 0.00001;
    
// Get non-linear constraints of target function
    Constraints := TargetAdj.Constraints;
    
// Add a non-linear constraint
    Constraint := Constraints.Add;
    
// Set expression of non-linear constraint
    Constraint.Expression := "v[t] + u[t] + x1[t]*0.001";
    ConInfoArray := Constraint.Constraints;
    
For i := 0 To T - 1 Do
        conInfo := ConInfoArray.Add;
        conInfo.TimeMoment := i;
        conInfo.LowerBound := -
10.5555;
        coninfo.UpperBound := 
10.55555;
        coninfo.LowerBoundFixed := 
False;
        coninfo.UpperBoundFixed := 
False;           
    
End For;
    
// Set problem type
    TargetAdj.AutoSearchType := TargetAutoSearchType.MinError;
    
// Set number of cycles
    TargetAdj.AutoAdjustMaxIter := 10;
    
// Set satisfactory tolerance 
    TargetAdj.AutoAdjustSatisfactoryTolerance := 1.<font color="#008000">01</font><font color="#000000">;<br/> &nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#008000">//&nbsp;Set&nbsp;number&nbsp;of constraints&nbsp;deleted&nbsp;during&nbsp;one&nbsp;iteration<br/> </font><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;TargetAdj.AutoAdjustRemoveCount&nbsp;:=&nbsp;</font><font color="#008000">2</font><font color="#000000">;<br/> &nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#008000">//&nbsp;Set&nbsp;handler&nbsp;to&nbsp;calculate&nbsp;values&nbsp;for controlling&nbsp;variables<br/> </font><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;MyCallBackC&nbsp;:=&nbsp;</font><font color="#008080">New</font><font color="#000000">&nbsp;MyCallbackCycle.Create;<br/> &nbsp;&nbsp;&nbsp;&nbsp;TargetAdj.CallbackCycle&nbsp;:=&nbsp;MyCallBackC;<br/> &nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#008000">//&nbsp;Calculate<br/> </font><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;Res&nbsp;:=&nbsp;TargetAdj.Evaluate(T)&nbsp;</font><font color="#008080">As</font><font color="#000000">&nbsp;ITargetResults;<br/> &nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#008000">//&nbsp;If&nbsp;calculation&nbsp;is without&nbsp;errors,&nbsp;then&nbsp;display&nbsp;results&nbsp;to&nbsp;console<br/> </font><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#008080">If</font><font color="#000000">&nbsp;res.Status&nbsp;=&nbsp;</font><font color="#008000">0</font><font color="#000000">&nbsp;</font><font color="#008080">Then</font><font color="#000000"><br/> &nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#008000">//&nbsp;Display&nbsp;optimal&nbsp;value<br/> </font><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;Debug.WriteLine(</font><font color="#800000">&quot;Optimal&nbsp;value:&quot;</font><font color="#000000">);<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><font color="#008000">//&nbsp;Display&nbsp;values&nbsp;of controlling&nbsp;variables<br/> </font><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#008080">For</font><font color="#000000">&nbsp;j&nbsp;:=&nbsp;</font><font color="#008000">1</font><font color="#000000">&nbsp;</font><font color="#008080">To</font><font color="#000000">&nbsp;VarsC.Count&nbsp;</font><font color="#008080">Do</font><font color="#000000"><br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VrblC&nbsp;:=&nbsp;VarsC.Item(j&nbsp;-&nbsp;</font><font color="#008000">1</font><font color="#000000">);<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Debug.WriteLine(</font><font color="#800000">&quot;Values&nbsp;of controlling&nbsp;variable&nbsp;'&quot;</font><font color="#000000">&nbsp;+&nbsp;VrblC.Id&nbsp;+&nbsp;</font><font color="#800000">&quot;':&quot;</font><font color="#000000">);<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Debug.Indent;<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#008080">For</font><font color="#000000">&nbsp;i&nbsp;:=&nbsp;</font><font color="#008000">1</font><font color="#000000">&nbsp;</font><font color="#008080">To</font><font color="#000000">&nbsp;T&nbsp;</font><font color="#008080">Do</font><font color="#000000"><br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Val&nbsp;:=&nbsp;Res.VarValues(VrblC.Id)[i&nbsp;-&nbsp;</font><font color="#008000">1</font><font color="#000000">];<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Debug.WriteLine(i.ToString&nbsp;+&nbsp;</font><font color="#800000">&quot;:&nbsp;&quot;</font><font color="#000000">&nbsp;+&nbsp;Val.ToString);<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#008080">End</font><font color="#000000">&nbsp;</font><font color="#008080">For</font><font color="#000000">;<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Debug.Unindent;<br/> &nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#008080">End</font><font color="#000000">&nbsp;</font><font color="#008080">For</font><font color="#000000">;<br/> &nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#008000">//&nbsp;Display&nbsp;values&nbsp;of phase&nbsp;variables<br/> </font><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#008080">For</font><font color="#000000">&nbsp;j&nbsp;:=&nbsp;</font><font color="#008000">1</font><font color="#000000">&nbsp;</font><font color="#008080">To</font><font color="#000000">&nbsp;VarsP.Count&nbsp;</font><font color="#008080">Do</font><font color="#000000"><br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VrblP&nbsp;:=&nbsp;VarsP.Item(j&nbsp;-&nbsp;</font><font color="#008000">1</font><font color="#000000">);<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Debug.WriteLine(</font><font color="#800000">&quot;Values&nbsp;of phase&nbsp;variable&nbsp;'&quot;</font><font color="#000000">&nbsp;+&nbsp;VrblP.Id&nbsp;+&nbsp;</font><font color="#800000">&quot;':&quot;</font><font color="#000000">);<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Debug.Indent;<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#008080">For</font><font color="#000000">&nbsp;i&nbsp;:=&nbsp;</font><font color="#008000">1</font><font color="#000000">&nbsp;</font><font color="#008080">To</font><font color="#000000">&nbsp;T&nbsp;</font><font color="#008080">Do</font><font color="#000000"><br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Val&nbsp;:=&nbsp;Res.VarValues(VrblP.Id)[i&nbsp;-&nbsp;</font><font color="#008000">1</font><font color="#000000">];<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Debug.WriteLine(i.ToString&nbsp;+&nbsp;</font><font color="#800000">&quot;:&nbsp;&quot;</font><font color="#000000">&nbsp;+&nbsp;Val.ToString);<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#008080">End</font><font color="#000000">&nbsp;</font><font color="#008080">For</font><font color="#000000">;<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Debug.Unindent;<br/> &nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#008080">End</font><font color="#000000">&nbsp;</font><font color="#008080">For</font><font color="#000000">;<br/> &nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#008000">//&nbsp;Display&nbsp;progress&nbsp;of target&nbsp;function&nbsp;change&nbsp;during&nbsp;calculation<br/> </font><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#008000">//&nbsp;of&nbsp;non-linear&nbsp;programming problem&nbsp;&nbsp;<br/> </font><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;Debug.WriteLine(</font><font color="#800000">&quot;Progress&nbsp;of target&nbsp;function&nbsp;change&nbsp;during&nbsp;calculation&quot;</font><font color="#000000">&nbsp;+<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#800000">&quot;&nbsp;of non-linear&nbsp;programming problem:&quot;</font><font color="#000000">);<br/> &nbsp;&nbsp;&nbsp;&nbsp;Debug.Indent;<br/> &nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#008080">For</font><font color="#000000">&nbsp;i&nbsp;:=&nbsp;</font><font color="#008000">0</font><font color="#000000">&nbsp;</font><font color="#008080">To</font><font color="#000000">&nbsp;Res.ObjValByIter.Length&nbsp;-&nbsp;</font><font color="#008000">1</font><font color="#000000">&nbsp;</font><font color="#008080">Do</font><font color="#000000"><br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Debug.WriteLine(Res.ObjValByIter[i]);<br/> &nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#008080">End</font><font color="#000000">&nbsp;</font><font color="#008080">For</font><font color="#000000">;<br/> &nbsp;&nbsp;&nbsp;&nbsp;Debug.Unindent;<br/> &nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#008000">//&nbsp;Display&nbsp;progress&nbsp;of target&nbsp;function&nbsp;change&nbsp;during<br/> </font><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#008000">//&nbsp;consecutive&nbsp;weakening&nbsp;of borders<br/> </font><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;Debug.WriteLine(</font><font color="#800000">&quot;Progress&nbsp;of target&nbsp;function&nbsp;change&nbsp;during&quot;</font><font color="#000000">&nbsp;+<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#800000">&quot;&nbsp;consecutive&nbsp;weakening&nbsp;of borders:&quot;</font><font color="#000000">);<br/> &nbsp;&nbsp;&nbsp;&nbsp;Debug.Indent;<br/> &nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#008080">For</font><font color="#000000">&nbsp;i&nbsp;:=&nbsp;</font><font color="#008000">0</font><font color="#000000">&nbsp;</font><font color="#008080">To</font><font color="#000000">&nbsp;Res.ObjValByAdjustIter.Length&nbsp;-&nbsp;</font><font color="#008000">1</font><font color="#000000">&nbsp;</font><font color="#008080">Do</font><font color="#000000"><br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Debug.WriteLine(Res.ObjValByAdjustIter[i]);<br/> &nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#008080">End</font><font color="#000000">&nbsp;</font><font color="#008080">For</font><font color="#000000">;<br/> &nbsp;&nbsp;&nbsp;&nbsp;Debug.Unindent;<br/> &nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#008000">//&nbsp;Display&nbsp;optimal&nbsp;trajectory&nbsp;of target&nbsp;function<br/> </font><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;Debug.WriteLine(</font><font color="#800000">&quot;Optimal&nbsp;trajectory&nbsp;of target&nbsp;function:&quot;</font><font color="#000000">);<br/> &nbsp;&nbsp;&nbsp;&nbsp;Debug.Indent;<br/> &nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#008080">For</font><font color="#000000">&nbsp;i&nbsp;:=&nbsp;</font><font color="#008000">0</font><font color="#000000">&nbsp;</font><font color="#008080">To</font><font color="#000000">&nbsp;Res.CriterionFunctionTrajectory.Length&nbsp;-&nbsp;</font><font color="#008000">1</font><font color="#000000">&nbsp;</font><font color="#008080">Do</font><font color="#000000"><br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Debug.WriteLine(Res.CriterionFunctionTrajectory[i]);<br/> &nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#008080">End</font><font color="#000000">&nbsp;</font><font color="#008080">For</font><font color="#000000">;<br/> &nbsp;&nbsp;&nbsp;&nbsp;Debug.Unindent;<br/> &nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#008000">//&nbsp;If&nbsp;calculation&nbsp;is finished&nbsp;with&nbsp;error,&nbsp;then&nbsp;display&nbsp;its&nbsp;text<br/> </font><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#008080">Else</font><font color="#000000"><br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Debug.WriteLine(res.ErrorMsg);<br/> &nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#008080">End</font><font color="#000000">&nbsp;</font><font color="#008080">If</font><font color="#000000">;<br/> </font><font color="#008080">End</font><font color="#000000">&nbsp;</font><font color="#008080">Sub</font><font color="#000000">&nbsp;UserProc;</font>

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 retrospective
    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 the x1 phase variable
    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 the u controlling variable
    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 a 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>;

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

See also:

ICpTargetAdjustment