Weird result of CPLEX "cplexmilp" function in MATLAB

Viewed 1826

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:

  1. Can any one tell me what's wrong with x3 and x4?
  2. 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!

2 Answers
Related