def construct_det_equiv(expr): rvs2samples, rvs = clamp_or_sample_rvs(expr, rvs2samples={}, want_de=True, want_mf=False, num_samples=0, num_burnin_samples=0) if not rvs2samples.keys(): return expr else: combs = get_all_poss_combs_of_rv_realizations(rvs) num_combs = combs.shape[0] mul_exprs = [] for s in range(num_combs): expr_copy = replace_rand_vars(expr) expr_copy_realized = clamp_or_sample_rvs(expr_copy, rvs2samples, want_de=True, want_mf=False, sample_idxes=combs[s,:]) prob = 1 for i, rv in enumerate(rvs): idx = int(combs[s,i]) prob *= rv._metadata["probs"][idx] mul_exprs.append(prob*expr_copy_realized) return sum(mul_exprs)
def value(self): constr_rearranged = self.constr.args[0] - self.constr.args[1] true_cnt = 0.0 rvs2samples, ignore = clamp_or_sample_rvs(constr_rearranged, rvs2samples={}, want_de=False, want_mf=False, num_samples=self.num_samples, num_burnin_samples=0) for s in range(self.num_samples): constr_rearranged_copy = replace_rand_vars(constr_rearranged) constr_rearranged_copy_rlzd = clamp_or_sample_rvs(constr_rearranged_copy, rvs2samples, want_de=False, want_mf=False, sample_idx=s) if constr_rearranged_copy_rlzd.value <= 0: true_cnt += 1.0 return true_cnt / self.num_samples
def value(self): constr_rearranged = self.constr.args[0] - self.constr.args[1] true_cnt = 0.0 rvs2samples, ignore = clamp_or_sample_rvs(constr_rearranged, rvs2samples={}, want_de=False, want_mf=False, num_samples=self.num_samples, num_burnin_samples=0) for s in range(self.num_samples): constr_rearranged_copy = replace_rand_vars(constr_rearranged) constr_rearranged_copy_rlzd = clamp_or_sample_rvs( constr_rearranged_copy, rvs2samples, want_de=False, want_mf=False, sample_idx=s) if constr_rearranged_copy_rlzd.value <= 0: true_cnt += 1.0 return true_cnt / self.num_samples
def construct_saa(expr, num_samples, num_burnin_samples): # Get samples of each RandomVariable in expr. rvs2samples, ignore = clamp_or_sample_rvs(expr, rvs2samples={}, want_de=False, want_mf=False, num_samples=num_samples, num_burnin_samples=num_burnin_samples) # If expr contained no RandomVariables, we're done. if not rvs2samples.keys(): return expr # Else expr contained RandomVariables. else: mul_exprs = [] for s in range(num_samples-num_burnin_samples): expr_copy = replace_rand_vars(expr) # Deep copy expr (num_samples times) expr_copy_realized = clamp_or_sample_rvs(expr_copy, rvs2samples, want_de=False, want_mf=False, sample_idx=s) # Plug in a realization of each RandomVariable prob = 1.0/(num_samples-num_burnin_samples) mul_exprs.append(prob*expr_copy_realized) # Return an AddExpression using all the realized deep copies to the caller. return sum(mul_exprs)
def construct_mean_field(expr): rvs2samples, rvs = clamp_or_sample_rvs(expr, rvs2samples={}, want_de=False, want_mf=True, num_samples=0, num_burnin_samples=0) return clamp_or_sample_rvs(replace_rand_vars(expr), rvs2samples, want_de=False, want_mf=True, num_samples=0, num_burnin_samples=0)