ISmQuadraticProgramming.IntVec

Syntax

IntVec: Array;

Description

The IntVec property determines the numeric array used to set, which variables are integer ones.

Comments

The length of the IntVec array must be equal to the number of variables.

If value of the IntVec array element is equal to 0, the corresponding variable is considered a real one, if it is not equal to 0, it is considered an integer one.

If the IntVec array is not defined, all variables are considered real ones.

NOTE. IntVec is used only if the Gurobi solver is used for calculation.

Example

Executing the example requires the Gurobi 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: Array 
Of Double;
    LinC1: Array 
Of Double;
    H: Array 
Of Double;
    Bound: ISlBoundaryRegion;
    LCon1: ISlLinearConstraint;
    intVec: Array[
8Of Integer;
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.<font color="#008000">69</font><font color="#000000">;<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;N&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;</font><font color="#008080">For</font><font color="#000000">&nbsp;j&nbsp;:=&nbsp;</font><font color="#008000">0</font><font color="#000000">&nbsp;</font><font color="#008080">To</font><font color="#000000">&nbsp;N&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;</font><font color="#008080">If</font><font color="#000000">&nbsp;i&nbsp;&lt;&gt;&nbsp;j&nbsp;</font><font color="#008080">Then</font><font color="#000000"><br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;H[i,&nbsp;j]&nbsp;:=&nbsp;</font><font color="#008000">0</font><font color="#000000">;<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;H[j,&nbsp;i]&nbsp;:=&nbsp;</font><font color="#008000">0</font><font color="#000000">;<br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#008080">End</font><font color="#000000">&nbsp;</font><font color="#008080">If</font><font color="#000000">;<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;</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;Specify&nbsp;integer&nbsp;variables<br/> </font><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;IntVec[</font><font color="#008000">0</font><font color="#000000">]&nbsp;:=&nbsp;</font><font color="#008000">0</font><font color="#000000">;<br/> &nbsp;&nbsp;&nbsp;&nbsp;IntVec[</font><font color="#008000">1</font><font color="#000000">]&nbsp;:=&nbsp;</font><font color="#008000">1</font><font color="#000000">;<br/> &nbsp;&nbsp;&nbsp;&nbsp;IntVec[</font><font color="#008000">2</font><font color="#000000">]&nbsp;:=&nbsp;</font><font color="#008000">0</font><font color="#000000">;<br/> &nbsp;&nbsp;&nbsp;&nbsp;IntVec[</font><font color="#008000">3</font><font color="#000000">]&nbsp;:=&nbsp;</font><font color="#008000">1</font><font color="#000000">;<br/> &nbsp;&nbsp;&nbsp;&nbsp;IntVec[</font><font color="#008000">4</font><font color="#000000">]&nbsp;:=&nbsp;</font><font color="#008000">0</font><font color="#000000">;<br/> &nbsp;&nbsp;&nbsp;&nbsp;IntVec[</font><font color="#008000">5</font><font color="#000000">]&nbsp;:=&nbsp;</font><font color="#008000">1</font><font color="#000000">;<br/> &nbsp;&nbsp;&nbsp;&nbsp;IntVec[</font><font color="#008000">6</font><font color="#000000">]&nbsp;:=&nbsp;</font><font color="#008000">0</font><font color="#000000">;<br/> &nbsp;&nbsp;&nbsp;&nbsp;IntVec[</font><font color="#008000">7</font><font color="#000000">]&nbsp;:=&nbsp;</font><font color="#008000">1</font><font color="#000000">;<br/> &nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#008000">//Criterion&nbsp;function<br/> </font><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;QP.CriterionFunction&nbsp;:=&nbsp;CF;<br/> &nbsp;&nbsp;&nbsp;&nbsp;QP.QuadraticForm&nbsp;:=&nbsp;H;<br/> &nbsp;&nbsp;&nbsp;&nbsp;QP.IntVec&nbsp;:=&nbsp;IntVec;<br/> &nbsp;&nbsp;&nbsp;&nbsp;Bound&nbsp;:=&nbsp;QP.Boundary;<br/> &nbsp;&nbsp;&nbsp;&nbsp;Bound.BoundaryLower&nbsp;:=&nbsp;Lb;&nbsp;</font><font color="#008000">//Lower&nbsp;area&nbsp;limit&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/> </font><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;Bound.BoundaryUpper&nbsp;:=&nbsp;Ub;&nbsp;</font><font color="#008000">//Upper&nbsp;area&nbsp;limit<br/> </font><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;LCon1&nbsp;:=&nbsp;QP.LinearConstraints.Add;<br/> &nbsp;&nbsp;&nbsp;&nbsp;LinC1[</font><font color="#008000">0</font><font color="#000000">]&nbsp;:=&nbsp;-</font><font color="#008000">1</font><font color="#000000">;&nbsp;LinC1[</font><font color="#008000">1</font><font color="#000000">]&nbsp;:=&nbsp;</font><font color="#008000">1</font><font color="#000000">;<br/> &nbsp;&nbsp;&nbsp;&nbsp;LCon1.Value&nbsp;:=&nbsp;LinC1;&nbsp;</font><font color="#008000">//&nbsp;Linear&nbsp;constraint&nbsp;coefficient<br/> </font><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;LCon1.BoundaryLower&nbsp;:=&nbsp;-</font><font color="#008000">1</font><font color="#000000">.</font>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">//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">//&nbspUse&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;</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;</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 is calculated using the Gurobi solver.

The development environment console displays the following:

See also:

ISmQuadraticProgramming