Hi,
I have faced with a similar problem but I cannot understand the difference between these two options:
1 - This case works fine in ampl as it is defined as a predefined var:
var Unit_quality_mix_in{l in MassBalancesWithQuality, loc in ClustersOfLayer[l], u in MB_Units[l,loc], c in MBQ_components[l], t in Time: u in UnitsOfTime[t] and Units_flowrate_in[l,u,t] > 0} =
if (Units_demand[l,u,t] > 0)
then (Unit_quality_mix_pf[l,loc,u,c,t]/Units_demand[l,u,t])
else (Units_quality_out[l,u,c,t]);
2 - But if I do the above as a constraint, (I would like to do it this way because I can have my constraint working also with glpsol, as glpsol doesn't have the predefined var) ampl give the error of not convex quadratic:
var Unit_quality_mix_in{l in MassBalancesWithQuality, loc in ClustersOfLayer[l], u in MB_Units[l,loc], c in MBQ_components[l], t in Time: u in UnitsOfTime[t] and Units_flowrate_in[l,u,t] > 0};
subject to cstr_Unit_quality_mix_in{l in MassBalancesWithQuality, loc in ClustersOfLayer[l], u in MB_Units[l,loc], c in MBQ_components[l], t in Time: u in UnitsOfTime[t] and Units_flowrate_in[l,u,t] > 0}:
Unit_quality_mix_in[l,loc,u,c,t] <=
if (Units_demand[l,u,t] > 0)
then (Unit_quality_mix_pf[l,loc,u,c,t]/Units_demand[l,u,t])
else (Units_quality_out[l,u,c,t]);
Just to mention that "Unit_quality_mix_pf" and "Units_demand" are variables and "Units_quality_out" and "Units_flowrate_in" are parameters.
Why would ampl treat these two statements differently?
Thanks,
Maziar