Tolerance: Double;
Tolerance: double;
The Tolerance property determines accuracy of solution.
Default value - 0,0001.
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[4] Of 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;
VarConstr.UpperBound := <font color="#008000">7</font>;<br/> VarConstr.TimeMoment := i;<br/> <font color="#008080">End</font> <font color="#008080">For</font>;<br/> <font color="#008000">// Get explanatory series<br/> </font> Expls := TargetAdj.Explanatories;<br/> <font color="#008000">// Set an explanatory series i<br/> </font> Expl := Expls.Add;<br/> Expl.VariableName := <font color="#800000">"i"</font>;<br/> Expl.CoefficientsOrder := <font color="#800000">"i[t]"</font>;<br/> Expl.Series := ValuesI;<br/> <font color="#008000">// Set an explanatory series j<br/> </font> Expl := Expls.Add;<br/> Expl.VariableName := <font color="#800000">"j"</font>;<br/> Expl.CoefficientsOrder := <font color="#800000">"j[t]"</font>;<br/> Expl.Series := ValuesJ;<br/> <font color="#008000">// Set criterion trajectory<br/> </font> ser[<font color="#008000">0</font>] := <font color="#008000">1</font>;<br/> ser[<font color="#008000">1</font>] := <font color="#008000">2</font>;<br/> ser[<font color="#008000">2</font>] := <font color="#008000">3</font>;<br/> ser[<font color="#008000">3</font>] := <font color="#008000">4</font>;<br/> TargetAdj.TargetTrajectory := Ser;<br/> <font color="#008000">// Set criterion function<br/> </font> TargetAdj.CriterionFunction := <font color="#800000">"x1[t] + x2[t-1] - u[t] + i[t] + j[t]"</font>;<br/> <font color="#008000">// Set number of iterations<br/> </font> TargetAdj.MaxIterationsCount := <font color="#008000">25000</font>;<br/> <font color="#008000">// Set accuracy of solution<br/> </font> TargetAdj.Tolerance := <font color="#008000">0</font>.<font color="#008000">00001</font>;<br/> <font color="#008000">// Get non-linear constraints of criterion function<br/> </font> Constraints := TargetAdj.Constraints;<br/> <font color="#008000">// Add non-linear constraint<br/> </font> Constraint := Constraints.Add;<br/> <font color="#008000">// Set non-linear constraint expression<br/> </font> Constraint.Expression := <font color="#800000">"v[t] + u[t] + x1[t]*0.001"</font>;<br/> ConInfoArray := Constraint.Constraints;<br/> <font color="#008080">For</font> i := <font color="#008000">0</font> <font color="#008080">To</font> T - <font color="#008000">1</font> <font color="#008080">Do</font><br/> conInfo := ConInfoArray.Add;<br/> conInfo.TimeMoment := i;<br/> conInfo.LowerBound := -<font color="#008000">10</font>.<font color="#008000">5555</font>;<br/> coninfo.UpperBound := <font color="#008000">10</font>.<font color="#008000">55555</font>;<br/> coninfo.LowerBoundFixed := <font color="#008080">False</font>;<br/> coninfo.UpperBoundFixed := <font color="#008080">False</font>; <br/> <font color="#008080">End</font> <font color="#008080">For</font>;<br/> <font color="#008000">// Set problem type<br/> </font> TargetAdj.AutoSearchType := TargetAutoSearchType.MinError;<br/> <font color="#008000">// Set number of cycles<br/> </font> TargetAdj.AutoAdjustMaxIter := <font color="#008000">10</font>;<br/> <font color="#008000">// Set satisfactory tolerance<br/> </font> TargetAdj.AutoAdjustSatisfactoryTolerance := <font color="#008000">1</font>.<font color="#008000">01</font>;<br/> <font color="#008000">// Set number of constraints removed in one iteration<br/> </font> TargetAdj.AutoAdjustRemoveCount := <font color="#008000">2</font>;<br/> <font color="#008000">// Set handler for calculation of controlling variable values<br/> </font> MyCallBackC := <font color="#008080">New</font> MyCallbackCycle.Create;<br/> TargetAdj.CallbackCycle := MyCallBackC;<font color="#008000"><br/> </font> <font color="#008000">// Execute calculation<br/> </font> Res := TargetAdj.Evaluate(T) <font color="#008080">As</font> ITargetResults;<br/> <font color="#008000">// If calculation is completed without errors, output results to console<br/> </font> <font color="#008080">If</font> res.Status = <font color="#008000">0</font> <font color="#008080">Then</font><br/> <font color="#008000">// Output optimal value<br/> </font> Debug.WriteLine(<font color="#800000">"Optimal value:"</font>);<br/> Debug.Indent;<br/> Debug.WriteLine(res.OptimalValue);<br/> Debug.Unindent;<br/> <font color="#008000">// Output controlling variable values<br/> </font> <font color="#008080">For</font> j := <font color="#008000">1</font> <font color="#008080">To</font> VarsC.Count <font color="#008080">Do</font><br/> VrblC := VarsC.Item(j - <font color="#008000">1</font>);<br/> Debug.WriteLine(<font color="#800000">"Controlling variable values '"</font> + VrblC.Id + <font color="#800000">"':"</font>);<br/> Debug.Indent;<br/> <font color="#008080">For</font> i := <font color="#008000">1</font> <font color="#008080">To</font> T <font color="#008080">Do</font><br/> Val := Res.VarValues(VrblC.Id)[i - <font color="#008000">1</font>];<br/> Debug.WriteLine(i.ToString + <font color="#800000">": "</font> + Val.ToString);<br/> <font color="#008080">End</font> <font color="#008080">For</font>;<br/> Debug.Unindent;<br/> <font color="#008080">End</font> <font color="#008080">For</font>;<br/> <font color="#008000">// Output phase variable values<br/> </font> <font color="#008080">For</font> j := <font color="#008000">1</font> <font color="#008080">To</font> VarsP.Count <font color="#008080">Do</font><br/> VrblP := VarsP.Item(j - <font color="#008000">1</font>);<br/> Debug.WriteLine(<font color="#800000">"Phase variable values '"</font> + VrblP.Id + <font color="#800000">"':"</font>);<br/> Debug.Indent;<br/> <font color="#008080">For</font> i := <font color="#008000">1</font> <font color="#008080">To</font> T <font color="#008080">Do</font><br/> Val := Res.VarValues(VrblP.Id)[i - <font color="#008000">1</font>];<br/> Debug.WriteLine(i.ToString + <font color="#800000">": "</font> + Val.ToString);<br/> <font color="#008080">End</font> <font color="#008080">For</font>;<br/> Debug.Unindent;<br/> <font color="#008080">End</font> <font color="#008080">For</font>;<br/> <font color="#008000">// Output change progress of criterion function during solution<br/> </font> <font color="#008000">// non-linear programming problems <br/> </font> Debug.WriteLine(<font color="#800000">"Change progress for criterion function during solution"</font> +<br/> <font color="#800000">" Non-linear programming problems:"</font>);<br/> Debug.Indent;<br/> <font color="#008080">For</font> i := <font color="#008000">0</font> <font color="#008080">To</font> Res.ObjValByIter.Length - <font color="#008000">1</font> <font color="#008080">Do</font><br/> Debug.WriteLine(Res.ObjValByIter[i]);<br/> <font color="#008080">End</font> <font color="#008080">For</font>;<br/> Debug.Unindent;<br/> <font color="#008000">// Output change progress of criterion function during<br/> </font> <font color="#008000">// sequantial limit loosening<br/> </font> Debug.WriteLine(<font color="#800000">"Change progress of criterion function during"</font> +<br/> <font color="#800000">" sequential limit loosening:"</font>);<br/> Debug.Indent;<br/> <font color="#008080">For</font> i := <font color="#008000">0</font> <font color="#008080">To</font> Res.ObjValByAdjustIter.Length - <font color="#008000">1</font> <font color="#008080">Do</font><br/> Debug.WriteLine(Res.ObjValByAdjustIter[i]);<br/> <font color="#008080">End</font> <font color="#008080">For</font>;<br/> Debug.Unindent;<br/> <font color="#008000">// Output optimal trajectory&nbs;of criterion function<br/> </font> Debug.WriteLine(<font color="#800000">"Optimal trajectory of criterion function:"</font>);<br/> Debug.Indent;<br/> <font color="#008080">For</font> i := <font color="#008000">0</font> <font color="#008080">To</font> Res.CriterionFunctionTrajectory.Length - <font color="#008000">1</font> <font color="#008080">Do</font><br/> Debug.WriteLine(Res.CriterionFunctionTrajectory[i]);<br/> <font color="#008080">End</font> <font color="#008080">For</font>;<br/> Debug.Unindent;<br/> <font color="#008000">// If calculation is completed with error, output its text<br/> </font> <font color="#008080">Else</font><br/> Debug.WriteLine(res.ErrorMsg);<br/> <font color="#008080">End</font> <font color="#008080">If</font>;<br/> <font color="#008080">End</font> <font color="#008080">Sub</font> UserProc;
After executing the example optimization problem parameters are set, the problem is calculated, results are displayed to the console.
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[4] Of 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;
<font color="#008080">For</font> i := <font color="#008000">0</font> <font color="#008080">To</font> T - <font color="#008000">1</font> <font color="#008080">Do</font><br/> VarConstr := VarConstrs.Add();<br/> VarConstr.LowerBound := <font color="#008000">0</font>.<font color="#008000">8</font>;<br/> VarConstr.UpperBound := <font color="#008000">7</font>;<br/> VarConstr.TimeMoment := i;<br/> <font color="#008080">End</font> <font color="#008080">For</font>;<br/> <font color="#008000">// Get explanatory series<br/> </font> Expls := TargetAdj.Explanatories;<br/> <font color="#008000">// Set an explanatory series i<br/> </font> Expl := Expls.Add();<br/> Expl.VariableName := <font color="#800000">"i"</font>;<br/> Expl.CoefficientsOrder := <font color="#800000">"i[t]"</font>;<br/> Expl.Series := ValuesI;<br/> <font color="#008000">// Set an explanatory series j<br/> </font> Expl := Expls.Add();<br/> Expl.VariableName := <font color="#800000">"j"</font>;<br/> Expl.CoefficientsOrder := <font color="#800000">"j[t]"</font>;<br/> Expl.Series := ValuesJ;<br/> <font color="#008000">// Set criterion trajectory<br/> </font> ser[<font color="#008000">0</font>] := <font color="#008000">1</font>;<br/> ser[<font color="#008000">1</font>] := <font color="#008000">2</font>;<br/> ser[<font color="#008000">2</font>] := <font color="#008000">3</font>;<br/> ser[<font color="#008000">3</font>] := <font color="#008000">4</font>;<br/> TargetAdj.TargetTrajectory := Ser;<br/> <font color="#008000">// Set criterion function<br/> </font> TargetAdj.CriterionFunction := <font color="#800000">"x1[t] + x2[t-1] - u[t] + i[t] + j[t]"</font>;<br/> <font color="#008000">// Set number of iterations<br/> </font> TargetAdj.MaxIterationsCount := <font color="#008000">25000</font>;<br/> <font color="#008000">// Set accuracy of solution<br/> </font> TargetAdj.Tolerance := <font color="#008000">0</font>.<font color="#008000">00001</font>;<br/> <font color="#008000">// Get non-linear constraints of criterion function<br/> </font> Constraints := TargetAdj.Constraints;<br/> <font color="#008000">// Add non-linear constraint<br/> </font> Constraint := Constraints.Add();<br/> <font color="#008000">// Set non-linear constraint expression<br/> </font> Constraint.Expression := <font color="#800000">"v[t] + u[t] + x1[t]*0.001"</font>;<br/> ConInfoArray := Constraint.Constraints;<br/> <font color="#008080">For</font> i := <font color="#008000">0</font> <font color="#008080">To</font> T - <font color="#008000">1</font> <font color="#008080">Do</font><br/> conInfo := ConInfoArray.Add();<br/> conInfo.TimeMoment := i;<br/> conInfo.LowerBound := -<font color="#008000">10</font>.<font color="#008000">5555</font>;<br/> coninfo.UpperBound := <font color="#008000">10</font>.<font color="#008000">55555</font>;<br/> coninfo.LowerBoundFixed := <font color="#008080">False</font>;<br/> coninfo.UpperBoundFixed := <font color="#008080">False</font>;<br/> <font color="#008080">End</font> <font color="#008080">For</font>;<br/> <font color="#008000">// Set problem type<br/> </font> TargetAdj.AutoSearchType := TargetAutoSearchType.tastMinError;<br/> <font color="#008000">// Set number of cycles<br/> </font> TargetAdj.AutoAdjustMaxIter := <font color="#008000">10</font>;<br/> <font color="#008000">// Set satisfactory tolerance<br/> </font> TargetAdj.AutoAdjustSatisfactoryTolerance := <font color="#008000">1</font>.<font color="#008000">01</font>;<br/> <font color="#008000">// Set number of constraints removed in one iteration<br/> </font> TargetAdj.AutoAdjustRemoveCount := <font color="#008000">2</font>;<br/> <font color="#008000">// Set handler for calculating values of controlling variables<br/> </font> MyCallBackC := <font color="#008080">New</font> MyCallbackCycle.Create();<br/> TargetAdj.CallbackCycle := MyCallBackC;<br/> <font color="#008000">// Execute calculation<br/> </font> Res := TargetAdj.Evaluate(T) <font color="#008080">As</font> ITargetResults;<br/> <font color="#008000">// If calculation is completed without errors, output results to console<br/> </font> <font color="#008080">If</font> res.Status = <font color="#008000">0</font> <font color="#008080">Then</font><br/> <font color="#008000">// Output optimal value<br/> </font> System.Diagnostics.Debug.WriteLine(<font color="#800000">"Optimal value:"</font>);<br/> System.Diagnostics.Debug.Indent();<br/> <font color="#008080">For</font> i := <font color="#008000">0</font> <font color="#008080">To</font> res.ObjValByAdjustIter.Length - <font color="#008000">1</font> <font color="#008080">Do</font><br/> System.Diagnostics.Debug.WriteLine(res.ObjValByAdjustIter.GetValue(i));<br/> <font color="#008080">End</font> <font color="#008080">For</font>;<br/> System.Diagnostics.Debug.Unindent();<br/> <font color="#008000">// Output values of controlling variables<br/> </font> <font color="#008080">For</font> j := <font color="#008000">1</font> <font color="#008080">To</font> VarsC.Count <font color="#008080">Do</font><br/> VrblC := VarsC.Item[j - <font color="#008000">1</font>];<br/> System.Diagnostics.Debug.WriteLine(<font color="#800000">"Values of controlling variable '"</font> + VrblC.Id + <font color="#800000">"':"</font>);<br/> System.Diagnostics.Debug.Indent();<br/> <font color="#008080">For</font> i := <font color="#008000">1</font> <font color="#008080">To</font> T <font color="#008080">Do</font><br/> Val := Res.VarValues[VrblC.Id].GetValue(i - <font color="#008000">1</font>) <font color="#008080">As</font> double;<br/> System.Diagnostics.Debug.WriteLine(i.ToString() + <font color="#800000">": "</font> + Val.ToString());<br/> <font color="#008080">End</font> <font color="#008080">For</font>;<br/> System.Diagnostics.Debug.Unindent();<br/> <font color="#008080">End</font> <font color="#008080">For</font>;<br/> <font color="#008000">// Output values of phase variables<br/> </font> <font color="#008080">For</font> j := <font color="#008000">1</font> <font color="#008080">To</font> VarsP.Count <font color="#008080">Do</font><br/> VrblP := VarsP.Item[j - <font color="#008000">1</font>];<br/> System.Diagnostics.Debug.WriteLine(<font color="#800000">"Values of phase variable '"</font> + VrblP.Id + <font color="#800000">"':"</font>);<br/> System.Diagnostics.Debug.Indent();<br/> <font color="#008080">For</font> i := <font color="#008000">1</font> <font color="#008080">To</font> T <font color="#008080">Do</font><br/> Val := Res.VarValues[VrblP.Id].GetValue(i - <font color="#008000">1</font>) <font color="#008080">As</font> double;<br/> System.Diagnostics.Debug.WriteLine(i.ToString() + <font color="#800000">": "</font> + Val.ToString());<br/> <font color="#008080">End</font> <font color="#008080">For</font>;<br/> System.Diagnostics.Debug.Unindent();<br/> <font color="#008080">End</font> <font color="#008080">For</font>;<br/> <font color="#008000">// Output change progress of criterion function during solution of<br/> </font> <font color="#008000">// non-linear programming problem <br/> </font> System.Diagnostics.Debug.WriteLine(<font color="#800000">"Change progress of criterion function during solution of"</font> +<br/> <font color="#800000">" non-linear programming problem:"</font>);<br/> System.Diagnostics.Debug.Indent();<br/> <font color="#008080">For</font> i := <font color="#008000">0</font> <font color="#008080">To</font> Res.ObjValByIter.Length - <font color="#008000">1</font> <font color="#008080">Do</font><br/> System.Diagnostics.Debug.WriteLine(Res.ObjValByIter.GetValue(i));<br/> <font color="#008080">End</font> <font color="#008080">For</font>;<br/> System.Diagnostics.Debug.Unindent();<br/> <font color="#008000">// Output change progress of criterion function during <br/> </font> <font color="#008000">// sequential loosening of limits<br/> </font> System.Diagnostics.Debug.WriteLine(<font color="#800000">"Change progress of criterion function during"</font> +<br/> <font color="#800000">" sequential loosening of limits:"</font>);<br/> System.Diagnostics.Debug.Indent();<br/> <font color="#008080">For</font> i := <font color="#008000">0</font> <font color="#008080">To</font> Res.ObjValByAdjustIter.Length - <font color="#008000">1</font> <font color="#008080">Do</font><br/> System.Diagnostics.Debug.WriteLine(Res.ObjValByAdjustIter.GetValue(i));<br/> <font color="#008080">End</font> <font color="#008080">For</font>;<br/> System.Diagnostics.Debug.Unindent();<br/> <font color="#008000">// Output optimal trajectory of criterion function<br/> </font> System.Diagnostics.Debug.WriteLine(<font color="#800000">"Optimal trajectory of criterion function:"</font>);<br/> System.Diagnostics.Debug.Indent();<br/> <font color="#008080">For</font> i := <font color="#008000">0</font> <font color="#008080">To</font> Res.CriterionFunctionTrajectory.Length - <font color="#008000">1</font> <font color="#008080">Do</font><br/> System.Diagnostics.Debug.WriteLine(Res.CriterionFunctionTrajectory.GetValue(i));<br/> <font color="#008080">End</font> <font color="#008080">For</font>;<br/> System.Diagnostics.Debug.Unindent();<br/> <font color="#008000">// If calculation is completed with error, output its text<br/> </font> <font color="#008080">Else</font><br/> System.Diagnostics.Debug.WriteLine(res.ErrorMsg);<br/> <font color="#008080">End</font> <font color="#008080">If</font>;<br/> <font color="#008080">End</font> <font color="#008080">Sub</font>;
See also: