ISmQuadraticProgramming.ExtraSettings

Syntax

ExtraSettings: IQPExtraSettings;

Description

The ExtraSettings property returns additional settings used on calculation by means of Gurobi external solver.

Comments

The property is relevant if Gurobi solver is selected in the SolverType property.

Example

Executing an example requires the Gurobi external solver installed on the user computer.

Add a link to the Stat system assembly.

Sub UserProc;
Var
    QP: SmQuadraticProgramming;
    i, j, Res, N: Integer;
    Time: Double;
    CF, Lb, Ub, Init, LinC1, H: Array 
Of Double;
    Bound: ISlBoundaryRegion;
    LCon1: ISlLinearConstraint;
Begin
    QP := New SmQuadraticProgramming.Create;
    N := 
8;
    CF := 
New Double[N];
    Lb := 
New Double[N];
    Ub := 
New Double[N];
    LinC1 := 
New Double[N];
    Init := 
New Double[N];
    
// Domain of definition
    Lb[0] := -1; Ub[0] := 1;
    Lb[
1] := -2.1;  Ub[1] := 2;
    Lb[
2] := -3.2;  Ub[2] := 3;
    Lb[
3] := -4.3;  Ub[3] := 4;
    Lb[
4] := -5.4;  Ub[4] := 5;
    Lb[
5] := -6.5;  Ub[5] := 6;
    Lb[
6] := -7.6;  Ub[6] := 7;
    Lb[
7] := -8.7;  Ub[7] := 8;
    
// Initial approximations
    Init[0] := -1;
    Init[
1] := -2;
    Init[
2] := -3;
    Init[
3] := -4;
    Init[
4] := -5;
    Init[
5] := -6;
    Init[
6] := -7;
    Init[
7] := -8;
    QP.InitialApproximation.AutoCreate := 
False;
    QP.InitialApproximation.InitValues := Init;
    
//Criterion function
    CF[0] := 7;
    CF[
1] := 6;
    CF[
2] := 5;
    CF[
3] := 4;
    CF[
4] := 3;
    CF[
5] := 2;
    CF[
6] := 1;
    CF[
7] := 0;
    H := 
New Double[N, N];
    H[
00] := 1.69; H[01] := 1.00; H[02] := 2.00; H[03] := 3.00; H[04] := 4.00; H[05] := 5.00; H[06] := 6.00; H[07] := 7.00;
    H[
10] := 1.00; H[11] := 1.69; H[12] := 1.00; H[13] := 2.00; H[14] := 3.00; H[15] := 4.00; H[16] := 5.00; H[17] := 6.00;
    H[
20] := 2.00; H[21] := 1.00; H[22] := 1.69; H[23] := 1.00; H[24] := 2.00; H[25] := 3.00; H[26] := 4.00; H[27] := 5.00;
    H[
30] := 3.00; H[31] := 2.00; H[32] := 1.00; H[33] := 1.69; H[34] := 1.00; H[35] := 2.00; H[36] := 3.00; H[37] := 4.00;
    H[
40] := 4.00; H[41] := 3.00; H[42] := 2.00; H[43] := 1.00; H[44] := 1.69; H[45] := 1.00; H[46] := 2.00; H[47] := 3.00;
    H[
50] := 5.00; H[51] := 4.00; H[52] := 3.00; H[53] := 2.00; H[54] := 1.00; H[55] := 1.69; H[56] := 1.00; H[57] := 2.00;
    H[
60] := 6.00; H[61] := 5.00; H[62] := 4.00; H[63] := 3.00; H[64] := 2.00; H[65] := 1.00; H[66] := 1.69; H[67] := 1.00;
    H[
70] := 7.00; H[71] := 6.00; H[72] := 5.00; H[73] := 4.00; H[74] := 3.00; H[75] := 2.00; H[76] := 1.00; H[77] := 1.69;
    
For i := 0 To N - 1 Do
        
For j := 0 To N - 1 Do
            
If i <> j Then
                H[i, j] := 
0;
                H[j, i] := 
0;
            
End If;
        
End For;
    
End For;
    
//Criterion function
    QP.CriterionFunction := CF;
    QP.QuadraticForm := H;
    Bound := QP.Boundary;
    Bound.BoundaryLower := Lb; 
//Lower area limit     
    Bound.BoundaryUpper := Ub; //Upper area limit
    LCon1 := QP.LinearConstraints.Add;
    LinC1[
0] := -1; LinC1[1] := 1;
    LCon1.Value := LinC1; 
// Linear constraint coefficient
    LCon1.BoundaryLower := -1.00// Lower linear constraint
    LCon1.BoundaryUpper := Double.PositiveInfinity; //Upper linear constraint
    LinC1[0] := 0; LinC1[1] := 0;
    LCon1 := QP.LinearConstraints.Add;
    LinC1[
1] := -1; LinC1[2] := 1;
    LCon1.Value := LinC1; 
// Linear constraint coefficient
    LCon1.BoundaryLower := -1.05// Lower linear constraint
    LCon1.BoundaryUpper := Double.PositiveInfinity; // Upper linear constraint
    LinC1[1] := 0; LinC1[2] := 0;
    LCon1 := QP.LinearConstraints.Add;
    LinC1[
2] := -1; LinC1[3] := 1;
    LCon1.Value := LinC1; 
// Linear constraint coefficient
    LCon1.BoundaryLower := -1.10// Lower linear constraint
    LCon1.BoundaryUpper := Double.PositiveInfinity; // Upper linear constraint
    LinC1[2] := 0; LinC1[3] := 0;
    LCon1 := QP.LinearConstraints.Add;
    LinC1[
3] := -1; LinC1[4] := 1;
    LCon1.Value := LinC1; 
// Linear constraint coefficient
    LCon1.BoundaryLower := -1.15// Lower linear constraint
    LCon1.BoundaryUpper := Double.PositiveInfinity; // Upper linear constraint
    LinC1[3] := 0; LinC1[4] := 0;
    LCon1 := QP.LinearConstraints.Add;
    LinC1[
4] := -1; LinC1[5] := 1;
    LCon1.Value := LinC1; 
// Linear constraint coefficient
    LCon1.BoundaryLower := -1.2// Lower linear constraint
    LCon1.BoundaryUpper := Double.PositiveInfinity; // Upper linear constraint
    LinC1[4] := 0; LinC1[5] := 0;
    LCon1 := QP.LinearConstraints.Add;
    LinC1[
5] := -1; LinC1[6] := 1;
    LCon1.Value := LinC1; 
// Linear constraint coefficient
    LCon1.BoundaryLower := -1.25// Lower linear constraint
    LCon1.BoundaryUpper := Double.PositiveInfinity; // Upper linear constraint
    LinC1[5] := 0; LinC1[6] := 0;
    LCon1 := QP.LinearConstraints.Add;
    LinC1[
6] := -1; LinC1[7] := 1;
    LCon1.Value := LinC1; 
// Linear constraint coefficient
    LCon1.BoundaryLower := -1.<font color="#008000">30</font><font color="#000000">;&nbsp;</font><font color="#008000">//&nbsp;Lower&nbsp;linear&nbsp;constraint<br/> </font><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;LCon1.BoundaryUpper&nbsp;:=&nbsp;Double.PositiveInfinity;&nbsp;</font><font color="#008000">//&nbsp;Upper&nbsp;linear&nbsp;constraint<br/> </font><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;LinC1[</font><font color="#008000">6</font><font color="#000000">]&nbsp;:=&nbsp;</font><font color="#008000">0</font><font color="#000000">;&nbsp;LinC1[</font><font color="#008000">7</font><font color="#000000">]&nbsp;:=&nbsp;</font><font color="#008000">0</font><font color="#000000">;<br/> &nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#008000">//&nbsp;Use&nbsp;Gurobi<br/> </font><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;QP.SolverType&nbsp;:=&nbsp;QPSolverType.Grb;<br/> &nbsp;&nbsp;&nbsp;&nbsp;QP.ExtraSettings.DLLPath&nbsp;:=&nbsp;</font><font color="#800000">&quot;c:\gurobi752\win64\bin\gurobi75.dll&quot;</font><font color="#000000">;<br/> &nbsp;&nbsp;&nbsp;&nbsp;QP.ExtraSettings.SaveLogToFilePath&nbsp;:=&nbsp;</font><font color="#800000">&quot;c:\Files\Gurobi.log&quot;</font><font color="#000000">;<br/> &nbsp;&nbsp;&nbsp;&nbsp;QP.ExtraSettings.SaveModelToFilePath&nbsp;:=&nbsp;</font><font color="#800000">&quot;c:\Files\Model.mps&quot;</font><font color="#000000">;<br/> &nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#008000">//&nbsp;Execute&nbsp;calculation<br/> </font><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;Res&nbsp;:=&nbsp;QP.Execute;<br/> &nbsp;&nbsp;&nbsp;&nbsp;Time&nbsp;:=&nbsp;QP.PerformanceTime&nbsp;/&nbsp;</font><font color="#008000">1000</font><font color="#000000">;<br/> &nbsp;&nbsp;&nbsp;&nbsp;Debug.WriteLine(</font><font color="#800000">&quot;Time[sec]&nbsp;=&nbsp;&quot;</font><font color="#000000">&nbsp;+&nbsp;time.ToString);<br/> &nbsp;&nbsp;&nbsp;&nbsp;Debug.WriteLine(</font><font color="#800000">&quot;RES&nbsp;=&nbsp;&quot;</font><font color="#000000">&nbsp;+&nbsp;Res.ToString);<br/> &nbsp;&nbsp;&nbsp;&nbsp;Debug.WriteLine(QP.Errors);<br/> &nbsp;&nbsp;&nbsp;&nbsp;Debug.WriteLine(</font><font color="#800000">&quot;Gurobi&nbsp;error&nbsp;code&nbsp;=&nbsp;&quot;</font><font color="#000000">&nbsp;+&nbsp;QP.ExtraSettings.nErrorCode.ToString);<br/> &nbsp;&nbsp;&nbsp;&nbsp;Debug.WriteLine(</font><font color="#800000">&quot;Gurobi&nbsp;message&nbsp;=&nbsp;&quot;</font><font color="#000000">&nbsp;+&nbsp;QP.ExtraSettings.MessageString);<br/> &nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#008080">If</font><font color="#000000">&nbsp;Res&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;&nbsp;&nbsp;&nbsp;&nbsp;Debug.WriteLine(</font><font color="#800000">&quot;==&nbsp;Criterion&nbsp;function&nbsp;value&nbsp;==&quot;</font><font color="#000000">);<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Debug.WriteLine(QP.OptimalFunctionValue.ToString);<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Debug.WriteLine(</font><font color="#800000">&quot;==&nbsp;Solution&nbsp;==&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">0</font><font color="#000000">&nbsp;</font><font color="#008080">To</font><font color="#000000">&nbsp;QP.Solution.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;&nbsp;&nbsp;&nbsp;&nbsp;Debug.WriteLine(i.ToString&nbsp;+&nbsp;</font><font color="#800000">&quot;:&nbsp;&quot;</font><font color="#000000">&nbsp;+&nbsp;lb[i].ToString&nbsp;+&nbsp;</font><font color="#800000">&quot;&nbsp;&lt;=&nbsp;&quot;</font><font color="#000000">&nbsp;+&nbsp;QP.Solution[i].ToString&nbsp;+&nbsp;</font><font color="#800000">&quot;&nbsp;&lt;=&nbsp;&quot;</font><font color="#000000">&nbsp;+&nbsp;ub[i].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;&nbsp;&nbsp;&nbsp;&nbsp;Debug.WriteLine(</font><font color="#800000">&quot;==&nbsp;Linear&nbsp;constraints&nbsp;==&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">0</font><font color="#000000">&nbsp;</font><font color="#008080">To</font><font color="#000000">&nbsp;QP.LinearConstraints.Count&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;&nbsp;&nbsp;&nbsp;&nbsp;LCon1&nbsp;:=&nbsp;QP.LinearConstraints.Item(i);<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;LCon1.BoundaryLower.ToString&nbsp;+&nbsp;</font><font color="#800000">&quot;&nbsp;&lt;=&nbsp;&quot;</font><font color="#000000">&nbsp;+&nbsp;LCon1.Result.ToString&nbsp;+&nbsp;</font><font color="#800000">&quot;&nbsp;&lt;=&nbsp;&quot;</font><font color="#000000">&nbsp;+&nbsp;LCon1.BoundaryUpper.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">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>

On executing the example, the quadratic programming task will be calculated using the Gurobi external solver. The development environment console displays the following:

Report about calculation and the model are saved to the specified files.

See also:

ISmQuadraticProgramming