def _make_splitting(self): from Hybrid.Support_Expander import stochiometric_split from Hybrid.Support_Expander import positions from model import Model if self._X == None: self._X = np.zeros((self._N_s,1)) self._X[:,0] = self.model.initial_state self._w = np.zeros((1,)) self._w[0] = 1.0 self.V = [] for i in range(self._N_r): self.V.append(np.array(self.model.transitions[i])) # make new_stochiometry self._V_d, self._V_s, self._stoc_positions, self._new_prop_s = stochiometric_split(self.V, self.model.propensities, self.deter_vector) self._new_model = Model( propensities = self._new_prop_s, transitions= self._V_s, shape= self.model.shape, initial_state= self.model.initial_state) # initialising the expander. self._expander = self.__HNE(self._new_model,self.stoc_vector,self.model.transitions,self.model.propensities,1.0,1e-6) self.domain_enum = Hybrid.state_enum.StateEnum(self._X,self.stoc_vector) self._valid, self._position = positions(self._X, self._V_s, self.stoc_vector, self.domain_enum)
def set_initial_values(self, domain_states, p, t=0.0): """ initialise the hybrid solver with the OFSP state space and probabiltiy. The function will automatically do the projection. Parameters ---------------------- domain_states : numpy.ndarray shape = (num of species x num of states) p : numpy.ndarray shape = (num of states,) t : numpy.ndarray Default = 0.0 """ from Hybrid.Support_Expander import positions # We project them down from Hybrid.proj import project_to_Hybrid as POH from statistics import expectation clean = p > 1e-9 domain_states = domain_states[:, clean] p = p[clean] self.t = t self._X, self._w = POH(domain_states, p, self.stoc_vector) if self.model_name == "HL": self._X[self.deter_vector, :] = expectation( (domain_states, p))[self.deter_vector, np.newaxis] # These are the key hashing components needed to find adjacent states. self.domain_enum = Hybrid.state_enum.StateEnum(self._X, self.stoc_vector) self._valid, self._position = positions(self._X, self._V_s, self.stoc_vector, self.domain_enum)
def _make_splitting(self): from Hybrid.Support_Expander import stochiometric_split from Hybrid.Support_Expander import positions from model import Model if self._X == None: self._X = np.zeros((self._N_s, 1)) self._X[:, 0] = self.model.initial_state self._w = np.zeros((1, )) self._w[0] = 1.0 self.V = [] for i in range(self._N_r): self.V.append(np.array(self.model.transitions[i])) # make new_stochiometry self._V_d, self._V_s, self._stoc_positions, self._new_prop_s = stochiometric_split( self.V, self.model.propensities, self.deter_vector) self._new_model = Model(propensities=self._new_prop_s, transitions=self._V_s, shape=self.model.shape, initial_state=self.model.initial_state) # initialising the expander. self._expander = self.__HNE(self._new_model, self.stoc_vector, self.model.transitions, self.model.propensities, 1.0, 1e-6) self.domain_enum = Hybrid.state_enum.StateEnum(self._X, self.stoc_vector) self._valid, self._position = positions(self._X, self._V_s, self.stoc_vector, self.domain_enum)
def set_initial_values(self,domain_states,p,t = 0.0): """ initialise the hybrid solver with the OFSP state space and probabiltiy. The function will automatically do the projection. Parameters ---------------------- domain_states : numpy.ndarray shape = (num of species x num of states) p : numpy.ndarray shape = (num of states,) t : numpy.ndarray Default = 0.0 """ from Hybrid.Support_Expander import positions # We project them down from Hybrid.proj import project_to_Hybrid as POH from statistics import expectation clean = p > 1e-9 domain_states = domain_states[:,clean] p = p[clean] self.t = t self._X, self._w = POH(domain_states,p,self.stoc_vector) if self.model_name == "HL": self._X[self.deter_vector,:] = expectation((domain_states,p))[self.deter_vector,np.newaxis] # These are the key hashing components needed to find adjacent states. self.domain_enum = Hybrid.state_enum.StateEnum(self._X,self.stoc_vector) self._valid, self._position = positions(self._X, self._V_s, self.stoc_vector, self.domain_enum)