Hi Everyone,

I am a new user to CPLEX and currently trying to implement a Column Generation Method using C++ as the API.

For example, the formulation is :

min(x1+x2+x3)

s.t.

2.x1+3.x2+4.x3<=y1 (c1)

x1+2.x3<=y2 (c2)

y1+y2=4 (c3)

x,y>=0 (c4)

We can see that y1,y2 are non-decision variable, that is it is not in the objective. Commonly, if we formulate the problem by column, we use like:

constraints.add(IloRange(env,A1,A2)); (1)

x.add(IloNumVar(obj(1)+constraints[0]*2+constraints[1]*1)) (2)

Problem1: for c1 and c2, the lower bound is 0 but upper bound is y1 and y2, respectively. The cplex does not allow me to put variables or expressions in A1 and A2 place in (1).

Problem2: if we cannot add the y with (1), we need to add the column for y in (2). However, y is not in the objective, if we use (2) and set obj(0) for y, I feel like we will change the formulation and y is in the objective with coefficient 0. Am I right? It seems that this problem does not matter. However, if we want to get the dual, then it does matter. At first, when only x is the objective variable, dual is only related with c1 and c2. However, when y is add with (2), I feel that the c3 also has to be counted into the dual issue, since y now is in the objective variable although coefficient is 0. This is my worry.

Can any one help me figure this point out? Thank you very much.

Best,

Wang Yu