예제 #1
0
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)
예제 #2
0
파일: prob.py 프로젝트: alnurali/cvxstoc
    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
예제 #3
0
    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
예제 #4
0
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)
예제 #5
0
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)