Hi !

I’m looking for another possibility to implement my elseif loop for my linear program.

The goal is to implement the following:

```
if q_out >= 9
eff == 0.75
elseif 7 <= q_out < 9
eff == 1
else
eff == 0.5
end
```

I have already implemented these lines of code (see an extract below).

```
set_optimizer_attribute(model, "NonConvex",2)
M = 10^(10) # parameter to select my binary variable
# definition of the variables
@variable(model, 0 <= q_out <= 15)
@variable(model, 0 <= eff <= 1)
@variable(model, 0 <= z_1 <= 1, binary=true)
@variable(model, 0 <= z_2 <= 1, binary=true)
# constraints
@constraint(model, q_out <= 7-0.1*10^(-1) + M * (1 - z_1))
@constraint(model, q_out >= 7-0.1*10^(-1) - M * z_1)
@constraint(model, q_out <= 9-0.1*10^(-1) + M * (1 - z_2))
@constraint(model, q_out >= 9-0.1*10^(-1) - M * z_2)
@constraint(model, eff == 0.75 * (1-z_2) + 1*z_2 + (0.5-1)*z_1 )
```

But I’m not convinced of its result.

When `q_out`

approaches the limit 9, for example `q_out = 8.989999389648451`

, my binary value `z_2=0.9999999999999933`

is no longer binary, which is problematic for the variable `eff`

.

Has somebody an idea of other possibilities to write my code to avoid this kind of problem?

Thank you in advance for your help!