# How to treat variable as binary in some points of model?

I have a decision variable PRODAMOUNT and it is of Int type. I need it as binary in some points of the model, like here in the objective function second PRODAMOUNT should be used as 1 when there is a positive value in it otherwise is should be 0 (as it is)

``````        @objective(
premex,
Min,
sum((u["cap"] - PRODAMOUNT[op_k, u_k, t] * _PRODUCTs_ALL[op["product"]]["bagSize"]) * u["util_cost1"]
+ sum(t / _ORDERs_ALL[op["order"]]["details"]["deadline"] * PRODAMOUNT[op_k, u_k, t] * 10000
for (op_k, op) in _ORDER_PRODUCTs_ALL, (u_k, u) in UNITS, t in TIME)
)
``````

I am not sure if I understand the question, do you have a variable that should be a continuous or integer variable in the constraints, but in the objective function it should only matter if it has a positive value or not?

If I guessed right, one solution is: create a second variable, `PRODAMOUNT_IS_POSITIVE`, it is equal to `PRODAMOUNT` except it is binary, in the formulation add the constraint `PRODAMOUNT_IS_POSITIVE >= PRODAMOUNT/MAX_VALUE_PRODAMOUNT_CAN_ASSUME`. If `PRODAMOUNT` assumes any positive value, then `PRODAMOUNT_IS_POSITIVE` that is binary will be forced to assume value 1, if you do not divide `PRODAMOUNT` by the maximum value `PRODAMOUNT` may assume then the model may become unfeasible (as the binary variable cannot assume values higher than one). Use `PRODAMOUNT_IS_POSITIVE` in the objective function (and keep `PRODAMOUNT` in the constraints as it already is).

2 Likes

thank you for your answer, but I don’t know max value of PRODAMOUNT because that is the goal of the model itself. I will try to eliminate all dependent variables from the model and change the logic behind it. BTW I am working on the model that was already created as it is.

Note that if you do not know the max value of `PRODAMOUNT` you can try using the tighter upper bound you have.