def setUp(self): self.net_ref = pn.case118() self.net_datamodel = pn.case118() # initialize constant stuff self.max_it = 10 self.tol = 1e-8 # tolerance for the solver self.tol_test = 1e-5 # tolerance for the test (2 matrices are equal if the l_1 of their difference is less than this) # initialize and use converters self.model = init(self.net_datamodel)
def setUp(self): self.net = pn.case118() self.last_real_bus = self.net.bus.shape[0] pp.create_bus(self.net, vn_kv=self.net.bus["vn_kv"][0]) self.net.bus["in_service"][self.last_real_bus] = False self.net_ref = copy.deepcopy(self.net) self.net_datamodel = copy.deepcopy(self.net) self.n_bus = self.net.bus.shape[0] self.model = init(self.net) self.model.deactivate_bus(self.last_real_bus) self.max_it = 10 self.tol = 1e-8 # tolerance for the solver self.tol_test = 1e-5 # tolerance for the test (2 matrices are equal if the l_1 of their difference is less than this)
def setUp(self): self.net_ref = pn.case118() self.net_datamodel = pn.case118() with warnings.catch_warnings(): warnings.filterwarnings("ignore") pp.runpp(self.net_datamodel) # initialize constant stuff self.max_it = 10 self.tol = 1e-8 # tolerance for the solver self.tol_test = 1e-5 # tolerance for the test (2 matrices are equal if the l_1 of their difference is less than this) # initialize and use converters with warnings.catch_warnings(): warnings.filterwarnings("ignore") self.model = init(self.net_datamodel)
def copy(self): mygrid = self._grid self._grid = None inippbackend = self.init_pp_backend._grid self.init_pp_backend._grid = None res = copy.deepcopy(self) res._grid = init(inippbackend) #TODO I need a c++ method that would just copy the state of the grid (bus connection, powerlines connected etc.) # TODO this could be done in a "get_action_to_set_me" and use to update obsenv for example! self._grid = mygrid self.init_pp_backend._grid = inippbackend # res.apply_action(self.get_action_to_set()) _action_to_set_act = self.get_action_to_set() _action_to_set = self._backend_action_class() _action_to_set += _action_to_set_act res.apply_action(_action_to_set) return res
def load_grid(self, path=None, filename=None): # if self.init_pp_backend is None: self.init_pp_backend.load_grid(path, filename) self._grid = init(self.init_pp_backend._grid) self.available_solvers = self._grid.available_solvers() if SolverType.KLU in self.available_solvers: # use the faster KLU is available self._grid.change_solver(SolverType.KLU) if self.__current_solver_type is None: self.__current_solver_type = copy.deepcopy( self._grid.get_solver_type()) self.n_line = self.init_pp_backend.n_line self.n_gen = self.init_pp_backend.n_gen self.n_load = self.init_pp_backend.n_load self.n_sub = self.init_pp_backend.n_sub self.sub_info = self.init_pp_backend.sub_info self.dim_topo = self.init_pp_backend.dim_topo self.load_to_subid = self.init_pp_backend.load_to_subid self.gen_to_subid = self.init_pp_backend.gen_to_subid self.line_or_to_subid = self.init_pp_backend.line_or_to_subid self.line_ex_to_subid = self.init_pp_backend.line_ex_to_subid self.load_to_sub_pos = self.init_pp_backend.load_to_sub_pos self.gen_to_sub_pos = self.init_pp_backend.gen_to_sub_pos self.line_or_to_sub_pos = self.init_pp_backend.line_or_to_sub_pos self.line_ex_to_sub_pos = self.init_pp_backend.line_ex_to_sub_pos self.prod_pu_to_kv = self.init_pp_backend.prod_pu_to_kv self.load_pu_to_kv = self.init_pp_backend.load_pu_to_kv self.lines_or_pu_to_kv = self.init_pp_backend.lines_or_pu_to_kv self.lines_ex_pu_to_kv = self.init_pp_backend.lines_ex_pu_to_kv self.name_gen = self.init_pp_backend.name_gen self.name_load = self.init_pp_backend.name_load self.name_line = self.init_pp_backend.name_line self.name_sub = self.init_pp_backend.name_sub self._compute_pos_big_topo() self.nb_bus_total = self.init_pp_backend._grid.bus.shape[0] self.thermal_limit_a = copy.deepcopy( self.init_pp_backend.thermal_limit_a) # deactive the buses that have been added nb_bus_init = self.init_pp_backend._grid.bus.shape[0] // 2 for i in range(nb_bus_init): self._grid.deactivate_bus(i + nb_bus_init) self.__nb_powerline = self.init_pp_backend._grid.line.shape[0] self.__nb_bus_before = self.init_pp_backend.get_nb_active_bus() self._init_bus_load = 1.0 * self.init_pp_backend._grid.load[ "bus"].values self._init_bus_gen = 1.0 * self.init_pp_backend._grid.gen["bus"].values self._init_bus_lor = 1.0 * self.init_pp_backend._grid.line[ "from_bus"].values self._init_bus_lex = 1.0 * self.init_pp_backend._grid.line[ "to_bus"].values t_for = 1.0 * self.init_pp_backend._grid.trafo["hv_bus"].values t_fex = 1.0 * self.init_pp_backend._grid.trafo["lv_bus"].values self._init_bus_lor = np.concatenate( (self._init_bus_lor, t_for)).astype(int) self._init_bus_lex = np.concatenate( (self._init_bus_lex, t_fex)).astype(int) self._init_bus_load = self._init_bus_load.astype(int) self._init_bus_gen = self._init_bus_gen.astype(int) tmp = self._init_bus_lor + self.__nb_bus_before self._init_bus_lor = np.concatenate( (self._init_bus_lor.reshape(-1, 1), tmp.reshape(-1, 1)), axis=-1) tmp = self._init_bus_lex + self.__nb_bus_before self._init_bus_lex = np.concatenate( (self._init_bus_lex.reshape(-1, 1), tmp.reshape(-1, 1)), axis=-1) tmp = self._init_bus_load + self.__nb_bus_before self._init_bus_load = np.concatenate( (self._init_bus_load.reshape(-1, 1), tmp.reshape(-1, 1)), axis=-1) tmp = self._init_bus_gen + self.__nb_bus_before self._init_bus_gen = np.concatenate( (self._init_bus_gen.reshape(-1, 1), tmp.reshape(-1, 1)), axis=-1) self._big_topo_to_obj = [(None, None) for _ in range(self.dim_topo)] # set up the "lightsim grid" accordingly self._grid.set_n_sub(self.__nb_bus_before) self._grid.set_load_pos_topo_vect(self.load_pos_topo_vect) self._grid.set_gen_pos_topo_vect(self.gen_pos_topo_vect) self._grid.set_line_or_pos_topo_vect( self.line_or_pos_topo_vect[:self.__nb_powerline]) self._grid.set_line_ex_pos_topo_vect( self.line_ex_pos_topo_vect[:self.__nb_powerline]) self._grid.set_trafo_hv_pos_topo_vect( self.line_or_pos_topo_vect[self.__nb_powerline:]) self._grid.set_trafo_lv_pos_topo_vect( self.line_ex_pos_topo_vect[self.__nb_powerline:]) self._grid.set_load_to_subid(self.load_to_subid) self._grid.set_gen_to_subid(self.gen_to_subid) self._grid.set_line_or_to_subid( self.line_or_to_subid[:self.__nb_powerline]) self._grid.set_line_ex_to_subid( self.line_ex_to_subid[:self.__nb_powerline]) self._grid.set_trafo_hv_to_subid( self.line_or_to_subid[self.__nb_powerline:]) self._grid.set_trafo_lv_to_subid( self.line_ex_to_subid[self.__nb_powerline:]) nm_ = "load" for load_id, pos_big_topo in enumerate(self.load_pos_topo_vect): self._big_topo_to_obj[pos_big_topo] = (load_id, nm_) nm_ = "gen" for gen_id, pos_big_topo in enumerate(self.gen_pos_topo_vect): self._big_topo_to_obj[pos_big_topo] = (gen_id, nm_) nm_ = "lineor" for l_id, pos_big_topo in enumerate(self.line_or_pos_topo_vect): self._big_topo_to_obj[pos_big_topo] = (l_id, nm_) nm_ = "lineex" for l_id, pos_big_topo in enumerate(self.line_ex_pos_topo_vect): self._big_topo_to_obj[pos_big_topo] = (l_id, nm_) self.prod_p = 1.0 * self.init_pp_backend._grid.gen["p_mw"].values self.next_prod_p = 1.0 * self.init_pp_backend._grid.gen["p_mw"].values # for shunts self.n_shunt = self.init_pp_backend.n_shunt self.shunt_to_subid = self.init_pp_backend.shunt_to_subid self.name_shunt = self.init_pp_backend.name_shunt self.shunts_data_available = self.init_pp_backend.shunts_data_available # number of object per bus, to activate, deactivate them self.nb_obj_per_bus = np.zeros(2 * self.__nb_bus_before, dtype=np.int) self.topo_vect = np.ones(self.dim_topo, dtype=np.int) if self.shunts_data_available: self.shunt_topo_vect = np.ones(self.n_shunt, dtype=np.int) self.p_or = np.full(self.n_line, dtype=dt_float, fill_value=np.NaN) self.q_or = np.full(self.n_line, dtype=dt_float, fill_value=np.NaN) self.v_or = np.full(self.n_line, dtype=dt_float, fill_value=np.NaN) self.a_or = np.full(self.n_line, dtype=dt_float, fill_value=np.NaN) self.p_ex = np.full(self.n_line, dtype=dt_float, fill_value=np.NaN) self.q_ex = np.full(self.n_line, dtype=dt_float, fill_value=np.NaN) self.v_ex = np.full(self.n_line, dtype=dt_float, fill_value=np.NaN) self.a_ex = np.full(self.n_line, dtype=dt_float, fill_value=np.NaN) self.load_p = np.full(self.n_load, dtype=dt_float, fill_value=np.NaN) self.load_q = np.full(self.n_load, dtype=dt_float, fill_value=np.NaN) self.load_v = np.full(self.n_load, dtype=dt_float, fill_value=np.NaN) self.prod_p = np.full(self.n_gen, dtype=dt_float, fill_value=np.NaN) self.prod_q = np.full(self.n_gen, dtype=dt_float, fill_value=np.NaN) self.prod_v = np.full(self.n_gen, dtype=dt_float, fill_value=np.NaN) self._count_object_per_bus() self.__me_at_init = self._grid.copy() self.__init_topo_vect = np.ones(self.dim_topo, dtype=np.int) self.__init_topo_vect[:] = self.topo_vect
def load_grid(self, path=None, filename=None): # if self.init_pp_backend is None: self.init_pp_backend.load_grid(path, filename) self._grid = init(self.init_pp_backend._grid) self.n_line = self.init_pp_backend.n_line self.n_gen = self.init_pp_backend.n_gen self.n_load = self.init_pp_backend.n_load self.n_sub = self.init_pp_backend.n_sub self.sub_info = self.init_pp_backend.sub_info self.dim_topo = self.init_pp_backend.dim_topo self.load_to_subid = self.init_pp_backend.load_to_subid self.gen_to_subid = self.init_pp_backend.gen_to_subid self.line_or_to_subid = self.init_pp_backend.line_or_to_subid self.line_ex_to_subid = self.init_pp_backend.line_ex_to_subid self.load_to_sub_pos = self.init_pp_backend.load_to_sub_pos self.gen_to_sub_pos = self.init_pp_backend.gen_to_sub_pos self.line_or_to_sub_pos = self.init_pp_backend.line_or_to_sub_pos self.line_ex_to_sub_pos = self.init_pp_backend.line_ex_to_sub_pos self.prod_pu_to_kv = self.init_pp_backend.prod_pu_to_kv self.load_pu_to_kv = self.init_pp_backend.load_pu_to_kv self.lines_or_pu_to_kv = self.init_pp_backend.lines_or_pu_to_kv self.lines_ex_pu_to_kv = self.init_pp_backend.lines_ex_pu_to_kv self.name_gen = self.init_pp_backend.name_gen self.name_load = self.init_pp_backend.name_load self.name_line = self.init_pp_backend.name_line self.name_sub = self.init_pp_backend.name_sub self._compute_pos_big_topo() self.nb_bus_total = self.init_pp_backend._grid.bus.shape[0] self.thermal_limit_a = self.init_pp_backend.thermal_limit_a # deactive the buses that have been added nb_bus_init = self.init_pp_backend._grid.bus.shape[0] // 2 for i in range(nb_bus_init): self._grid.deactivate_bus(i + nb_bus_init) self.__nb_powerline = self.init_pp_backend._grid.line.shape[0] self.__nb_bus_before = self.init_pp_backend.get_nb_active_bus() self._init_bus_load = 1.0 * self.init_pp_backend._grid.load[ "bus"].values self._init_bus_gen = 1.0 * self.init_pp_backend._grid.gen["bus"].values self._init_bus_lor = 1.0 * self.init_pp_backend._grid.line[ "from_bus"].values self._init_bus_lex = 1.0 * self.init_pp_backend._grid.line[ "to_bus"].values t_for = 1.0 * self.init_pp_backend._grid.trafo["hv_bus"].values t_fex = 1.0 * self.init_pp_backend._grid.trafo["lv_bus"].values self._init_bus_lor = np.concatenate( (self._init_bus_lor, t_for)).astype(np.int) self._init_bus_lex = np.concatenate( (self._init_bus_lex, t_fex)).astype(np.int) self._big_topo_to_obj = [(None, None) for _ in range(self.dim_topo)] nm_ = "load" for load_id, pos_big_topo in enumerate(self.load_pos_topo_vect): self._big_topo_to_obj[pos_big_topo] = (load_id, nm_) nm_ = "gen" for gen_id, pos_big_topo in enumerate(self.gen_pos_topo_vect): self._big_topo_to_obj[pos_big_topo] = (gen_id, nm_) nm_ = "lineor" for l_id, pos_big_topo in enumerate(self.line_or_pos_topo_vect): self._big_topo_to_obj[pos_big_topo] = (l_id, nm_) nm_ = "lineex" for l_id, pos_big_topo in enumerate(self.line_ex_pos_topo_vect): self._big_topo_to_obj[pos_big_topo] = (l_id, nm_) self.prod_p = 1.0 * self.init_pp_backend._grid.gen["p_mw"].values self.next_prod_p = 1.0 * self.init_pp_backend._grid.gen["p_mw"].values # for shunts self.n_shunt = self.init_pp_backend.n_shunt self.shunt_to_subid = self.init_pp_backend.shunt_to_subid self.name_shunt = self.init_pp_backend.name_shunt self.shunts_data_available = self.init_pp_backend.shunts_data_available # number of object per bus, to activate, deactivate them self.nb_obj_per_bus = np.zeros(2 * self.__nb_bus_before, dtype=np.int) self.topo_vect = np.ones(self.dim_topo, dtype=np.int) if self.shunts_data_available: self.shunt_topo_vect = np.ones(self.n_shunt, dtype=np.int) self.p_or = np.full(self.n_line, dtype=dt_float, fill_value=np.NaN) self.q_or = np.full(self.n_line, dtype=dt_float, fill_value=np.NaN) self.v_or = np.full(self.n_line, dtype=dt_float, fill_value=np.NaN) self.a_or = np.full(self.n_line, dtype=dt_float, fill_value=np.NaN) self.p_ex = np.full(self.n_line, dtype=dt_float, fill_value=np.NaN) self.q_ex = np.full(self.n_line, dtype=dt_float, fill_value=np.NaN) self.v_ex = np.full(self.n_line, dtype=dt_float, fill_value=np.NaN) self.a_ex = np.full(self.n_line, dtype=dt_float, fill_value=np.NaN) self.load_p = np.full(self.n_load, dtype=dt_float, fill_value=np.NaN) self.load_q = np.full(self.n_load, dtype=dt_float, fill_value=np.NaN) self.load_v = np.full(self.n_load, dtype=dt_float, fill_value=np.NaN) self.prod_p = np.full(self.n_gen, dtype=dt_float, fill_value=np.NaN) self.prod_q = np.full(self.n_gen, dtype=dt_float, fill_value=np.NaN) self.prod_v = np.full(self.n_gen, dtype=dt_float, fill_value=np.NaN) self._count_object_per_bus() _init_action_to_set = self.get_action_to_set() self._backend_action_class = _BackendAction.init_grid(self) self._init_action_to_set = self._backend_action_class() self._init_action_to_set += _init_action_to_set