Generic constraints between inputs and outputs of a unit
Current equations q_outputRatioFixed and q_outputRatioConstrained allow to constraint two outputs (e.g. CHP unit). However, the formulation is not generic - it's not possible to add third output or to mix with inputs. Also, there are no constants that could be applied.
How to do this: Any number of units v_gen can be added to a constraint. Each of them has a co-efficient. In the simple case the co-efficients fix the relation between outputs.
Q_unitConstraintFix(unit, constraint, ft(f, t)) .. sum[input_output, v_gen(grid, input_output, unit, f, t) * p_unitConstraintCoEff(grid, input_output, unit, constraint)] + p_unitConstraintConstant(unit, constraint) =E= 0
E.g. CHP unit has co-efficient of 1 for electricity (stays in the left hand side of the equation) and a co-efficient of -0.8 for heat (goes to right hand side). In this case increasing electricity output with 1 forces to also increase heat output by 1.25.
One should also be able to use greater than or less than constraints. And they should include possibility for a constant.
In addition we need to consider reserves. For units that have fixed ratio between two outputs, reserve implies that the non-electrical output has to change if the unit will provide reserve. The user implicitly allows this when setting a reserve for such units. In the case of units with non-equality constraint, then there is an area where the unit is allowed to operate. In principle reserve can be offered up to the highest electrical output in this area - however, other outputs might need to change to get there. Another alternative is to say that the unit can only change the electrical output when providing reserves, which gives a more restricted operating range for the reserve. In principle both are valid forms of operation, but it can be bit complicated to understand (in picture below, the unit has a bit complicated operating area where red shows the reserve potential if not allowed to change heat output and green shows the reserve potential if allowed).
A note about the current situation: We have 'conversionFactor' and 'cV' which both are kind of doing the same thing, but neither does it properly.
- 'conversionFactor' is used in two constraints that fix or constrain two outputs, but it does not affect reserve provision.
- 'cV' on the other hand appears in q_maxUpward and q_maxDownward and is used to constraint reserve provision, but it is not used elsewhere.