According to my previous question, I want to optimize an objective function using binary integer linear programming (all of variables are binary) as follows:
Minimize f = (c1*x1) + (c2*x2) + MAX((c3*x3),(c4*x4)) + (c5*x5)
Subject to: some equality and inequality constraints
For MAX
operator, I used auxiliary variable x6
and added x6>=(c3*x3)
and x6>=(c4*x4)
constraints to the problem so the problem turn into:
Minimize f = (c1*x1) + (c2*x2) + x6 + (c5*x5), with added constraints.
I used CPLEX API for MATLAB
to optimize the objective function.
Because all of variables are binary except one ((x6
) which is continuous) and coefficients have double
values, the problem turn into mixed integer linear programming so I used cplexmilp
function with this configuration:
- Variable types:
ctype='BBBBBC'
( B:Binary, C:Continuous) - Lower Bounds:
lb=[0 0 0 0 0 0]
- Upper Bounds:
ub=[0 0 0 0 0 inf]
- Function Call:
[fval] = cplexmilp(f, Aineq, bineq, Aeq, beq,[],[],[],lb,ub,ctype)
but sometimes in the results I see x3
and x4
have continuous values(between 0 and 1) and x3+x4=1
.
So my questions are:
- Can any one tell me what's wrong with
x3
andx4
? - Is there a solution for not using auxiliary variable and solving this optimization problem with
cplexbilp
?
Thanks in advance
[UPDATE]:
One parts of my code had logical errors which I fixed them, now in all cases which x3 and x4 are not binary we have x3*(1-x3)< 10^(-5), x4*(1-x4)< 10^(-5) and x3+x4=1, so @David Nehme were right (according to his useful comment), but my second question still remains here!