示例#1
0
	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)
示例#2
0
    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)
示例#3
0
    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)
示例#4
0
	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)