Understanding summed_min and summed_max (i.e. full_load_hours_max, full_load_hours_min)

Dear all,

I am currently in the process of optimizing a very large problem and am running into very unexpected “infeasible” errors, which only occur after adjusting the summed_min parameters for different technologies.
It is possible for me to solve the model when I do not have any summed_min values set, but that causes my heat pumps to only be used in the summer and never in the winter, which is something that I try to avoid by adjusting my summed_min. However, anything above a certain threshold (currently around 1200 hours) causes an infeasibility.
I really can’t understand this, since it was my understanding that summed_min and summed_max merely tell the solver that if it is cost-optimal to build certain technologies (i.e. heat pumps), then the summed_min and summed_max values apply. However, what seems to be happening is that if I have summed_min and summed_max values set, then the model is somehow forced to build those technologies and can’t adjust itself to accomodate for the given full load hour settings.
Could anyone perhaps enlighten me as to whether:
a) my interpretation is wrong for summed_min and summed_max
b) there is a workaround (maybe an additional constraint) that could force technologies, once built to be used in every timestep?

Thanks in advance and all the best,

Mo

Hello Moritz,

the cause of your problem is hard to tell, but it sounds like your introducing contradictory constraints into your model when defining summed_min and summed_max, which have been renamed to full_load_time_min and full_load_time_max by the way. I assume this to be the consequence of an input data-related problem: E.g. you might violate an emissions constraint if you “force” the flow via setting full_load_time_min and not having enough low carbon generators available in your system. This is just an example. It can have many reasons like this.

Concerning the difference between a dispatch and an investment model, there is not really a difference in what full_load_time_min and full_load_time_max do. They are either multiplied with the nominal_value you define in a dispatch model or the Investment object - which is assigned to the nominal_value attribute in the investment case. If it is not cost-efficient to invest into a technology, this value will be zero and your constraint will always be fulfilled, so there is no actual forcing.

I don’t assume you to work with a multi-period model. If you were, you should be aware that full_load_time_min and full_load_time_max are not defined on a per period basis, but accross all periods. This could in principle be altered in the implementation in case it is perceived more sensible.

What I’d recommend is:

  • to have a closer look on your input data and perform some sanity checks on it and/or
  • to run your model in debug mode and ensure the relevant values are set properly.
  • Also you might consider updating to a newer oemof.solph version. This most likely won’t resolve your specific problem, but you get bug fixes and new features that might be useful.

I hope this helps at least a little and best regards,
Johannes

Hi Johannes,

thank you for quick reply and sorry for my delayed response!
Concerning the everything after the first paragraph that is definitely helpful, and the impact of an emission constraint is something I hadn’t considered so that is something I have to try out and report back!

All the best,

Mo