I’m trying to do an integer programming problem with GUROBI in MATLAB. My code is the following:
function[d, uu, ul, cprime, c, b, u, cvx_optval] = demandresponse1(n)
d = randn(1);
bnds = randn(n,2);
uu = max(bnds, [], 2);
ul = min(bnds, [], 2);
uhat = (uu+ul)/2; %this is the average of the upper and lower bounds
cprime = randn(n, 1);
c = randn(n, 1);
%Start the CVX optimization
cvx_begin
variable u(n);
variable b(n) binary;
minimize((d - sum(u))^2 + sum(cprime.*b + (c.^2).*(u-b.*uhat).^2));
subject to
(b.*ul) <= u <= (b.*uu);
cvx_end
end
In the above, I declare variable b(n) binary
. But when I actually run the optimization, I get the following output. b
is not an array of binary values; what happened?
>> [d, uu, u, b, u] = demandresponse1(5)
Calling Gurobi 5.60: 33 variables, 17 equality constraints
------------------------------------------------------------
Optimize a model with 17 rows, 33 columns and 53 nonzeros
Model has 6 quadratic constraints
Presolve removed 0 rows and 10 columns
Presolve time: 0.01s
Presolved: 35 rows, 41 columns, 79 nonzeros
Variable types: 36 continuous, 5 integer (5 binary)
Root relaxation: objective -7.947353e+00, 3 iterations, 0.00 seconds
Nodes | Current Node | Objective Bounds | Work
Expl Unexpl | Obj Depth IntInf | Incumbent BestBd Gap | It/Node Time
H 0 0 -0.1941943 -7.94735 3992% - 0s
0 0 -0.26352 0 1 -0.19419 -0.26352 35.7% - 0s
0 0 -0.22958 0 1 -0.19419 -0.22958 18.2% - 0s
0 0 -0.22938 0 1 -0.19419 -0.22938 18.1% - 0s
0 0 -0.22938 0 1 -0.19419 -0.22938 18.1% - 0s
Cutting planes:
Gomory: 1
Explored 3 nodes (39 simplex iterations) in 0.06 seconds
Thread count was 2 (of 2 available processors)
Optimal solution found (tolerance 1.00e-04)
Best objective -1.941942815787e-01, best bound -1.941976010650e-01, gap 0.0017%
------------------------------------------------------------
Status: Solved
Optimal value (cvx_optval): -0.194194
d =
0.5377
uu =
1.8339
0.3426
3.5784
2.7694
-1.3077
u =
-0.1241
1.4897
1.4090
1.4172
0.6715
b =
3.0349
0.7254
-0.0631
0.7147
-0.2050
u =
-0.1241
1.4897
1.4090
1.4172
0.6715