Posts: 21

Threads: 8

Joined: Mar 2012

I have an emissions counter for LULUCF emissions (GHGmLULUCF). It is negative in 2010. The normal COMBAL equation, for com_lim = 'UP', is:

_EQE_COMBAL(UK.2010.GHGmLULUCF.ANNUAL)#8172:

- VAR_COMNET(UK.2010.GHGmLULUCF.ANNUAL)#3205

- 439.288824543984 VAR_FLO(UK.2010.2010.ALU00.ALAND.ANNUAL)#4728

= 0

I tried to disable the COMBAL equation by setting com_lim to 'N', but this then changed the COMBAL equation to:

_EQE_COMBAL(UK.2010.GHGmLULUCF.ANNUAL)#8172:

- VAR_COMNET(UK.2010.GHGmLULUCF.ANNUAL)#3205

+ VAR_COMPRD(UK.2010.GHGmLULUCF.ANNUAL)#3493

= 0

This latter equation caused an infeasibility. Yet I was not expecting an equation to be created when using 'N'. Can you explain this to me?

(Further notes: the first COMBAL equation does not produce an infeasibility as long as COM_BNDNET is set to a large negative value, so the model is working. But I'm interested to know what the 'N' option is doing. Both equations are from the CPLEX writelp option.)

Posts: 296

Threads: 17

Joined: May 2010

There are multiple unclear issues in your question:

1. You say that the first equation was a "normal" equation generated with COM_LIM=UP. However, COM_LIM=UP is used for unlimited renewables, for which no commodity balance is to be generated. The normal commodity balance equation is generated with COM_LIM=LO, and it is of type >= (EQG_COMBAL) Your equation is of equality type (EQE_COMBAL), and so the equation is definitively neither normal, nor one that you should get when using COM_LIM=UP.

2. You say that the second equation is generated by setting com_lim to 'N'. When COM_LIM=N, no commodity balances will be generated, unless you explicitly request that it should nonetheless be generated, by defining a bound or a cost on the corresponding VAR_COMNET variable, or referring to the VAR_COMNET in a user constraint. In that case, the equation type will be EQE_COMBAL, and the VAR_COMNET variable is activated. I believe you thus must have requested the generation of such a commodity balance, by referring to the VAR_COMNET variable in one way or another.

If you can reproduce the issue with the DEMO model, I would be happy to look at it more closely.

Posts: 21

Threads: 8

Joined: Mar 2012

For (1), my mistake - the commodity balance was generated with the default COM_LIM=LO, as you say it should be. It was set to the default ENV COM_LIM.

For (2), a COM_BNDNET was defined for the commodity. However, removing this and leaving only COM_AGG and FLO_EMIS defined for the commodity does not change the behaviour. It looks like an EQE_COMPRD equation is created to produce VAR_COMPRD, which is equal to VAR_COMNET in the COMBAL equation. However, since COMPRD must be greater than zero by default, and the emissions are negative, this causes an infeasibility. So I think it might work if the emissions are positive, but not if they are negative.

Posts: 296

Threads: 17

Joined: May 2010

I believe you are also using COM_AGG for the this LULUCF emission.

COM_AGG aggregates VAR_COMNET into the target commodity, if COM_LIM=LO.

But if COM_LIM=FX or COM_LIM=N, it aggregates VAR_COMPRD into the target commodity (this seems a natural convention to me, because if the user does not want to have the VAR_COMNET variables, what else than VAR_COMPRD can we then aggregate)?

That would explain the VAR_COMPRD in your commodity balance, when COM_LIM=N.

Obviously, if you are indeed using COM_AGG, you must have either VAR_COMNET or VAR_COMPRD active. And surely you would want also the negative emissions aggregated into the target, no?

Therefore, the solution would be to set the lower bound of either variable to -INF.

Posts: 21

Threads: 8

Joined: Mar 2012

Thanks for the explanation, Antti. We did indeed solve the issue by setting COM_BNDNET to a large negative number.

Just as an aside (and admittedly off-forum but related to your answer), is it possible to set -INF in VEDA? It was ignored when I tried it for COM_BNDNET for this commodity.

Posts: 296

Threads: 17

Joined: May 2010

You can set the lower bound of VAR_COMNET/COMPRD to -INF by setting as follows (NET case):

COM_BNDNET(r,t,c,'ANNUAL','N') = -1 (for period t), or

COM_BNDNET(r,'0',c,'ANNUAL','N') = -1 (for all periods).

Hope that helps.

Posts: 21

Threads: 8

Joined: Mar 2012

Great, thanks Antti, it certainly does. I have it working. I'm learning a few new tricks today :-)