@@ -278,23 +278,44 @@ def next(
278278 getLogger (__name__ ).critical ("Search space is empty" )
279279 self .year += time_period
280280 return None
281- decision = self ._compute_objective (demand , search_space , technologies , market )
281+
282+ # Filter technologies according to the search space, forecast year and region
283+ techs = self .filter_input (
284+ technologies ,
285+ technology = search_space .replacement ,
286+ year = self .forecast_year ,
287+ ).drop_vars ("technology" )
288+
289+ # Reduce dimensions of the demand array
290+ reduced_demand = demand .sel (
291+ {
292+ k : search_space [k ]
293+ for k in set (demand .dims ).intersection (search_space .dims )
294+ }
295+ )
296+
297+ # Filter prices according to the region
298+ prices = self .filter_input (market .prices )
299+
300+ # Compute the objective
301+ decision = self ._compute_objective (
302+ technologies = techs , demand = reduced_demand , prices = prices
303+ )
282304
283305 self .year += time_period
284306 return xr .Dataset (dict (search_space = search_space , decision = decision ))
285307
286308 def _compute_objective (
287309 self ,
288- demand : xr .DataArray ,
289- search_space : xr .DataArray ,
290310 technologies : xr .Dataset ,
291- market : xr .Dataset ,
311+ demand : xr .DataArray ,
312+ prices : xr .DataArray ,
292313 ) -> xr .DataArray :
293- objectives = self .objectives (self , demand , search_space , technologies , market )
314+ objectives = self .objectives (
315+ technologies = technologies , demand = demand , prices = prices
316+ )
294317 decision = self .decision (objectives )
295- nobroadcast_dims = [d for d in decision .dims if d not in search_space .dims ]
296- decision = xr .broadcast (decision , search_space , exclude = nobroadcast_dims )[0 ]
297- return decision .sel ({k : search_space [k ] for k in search_space .dims })
318+ return decision
298319
299320 def add_investments (
300321 self ,
0 commit comments