I'm building an insulated box in which I have about 5-6 liters of water which will be cooled/warmed by a Peltiers, driven by variable current. 
The setpoint will vary between 16 and 26 degrees C, and it will change gradually during a 24 hours cycle. The disturbance of the system is the outside temperature, in which the box will be placed. It is a room temperature, which change very slowly, mostly seasonally (almost no day/night change) between 19 and 29 degrees. 
So as you can see, when the outside temperature is in between the inside temperature borders the Peltiers will need to switch directions from cooling to heating or oposite.

Another point that should be mentioned is that the Peltiers are more efficient (at cooling) when driven with lower current. Which means that when cooling it is not efficient to get to the setpoint fast and then stay there keeping the temperature. Also overshooting is not efficient too.

So my question is - what algorithm should I use in order to control the temperature in most energy efficient way?

Is it appropriate to change the setpoint in some short intervals, let say 5-10 minutes and use PID? 
Or to measure somehow the speed of temperature change at the given power, then predicting if it enough to meet the setpoint at the needed time and correcting it if not.

Any advice will be appreciated