示例#1
0
def solve_r_iterate(dp0, r1, F, S, trace):

    LF = LowerSets(F)
    if do_extra_checks():
        LF.belongs(S)
    F2 = F[1]
    converged = set()  # subset of solutions for which they converged
    nextit = set()
    # find the set of all r2s

    for fa in S.maximals:
        hr = dp0.solve_r_trace((r1, fa[1]), trace)

        for fb in hr.maximals:
            # valid = R.leq(ra, rb) # ra <= rb
            valid = F.leq(fb, fa)  # fb <= fa

            if valid:
                nextit.add(fb)

                feasible = F2.leq(fa[1], fb[1])
                if feasible:
                    converged.add(fb)

    nextit = F.Ls(poset_maxima(nextit, F.leq))
    converged = F.Ls(poset_maxima(converged, F.leq))

    return nextit, converged
示例#2
0
def solve_r_iterate(dp0, r1, F, S, trace):
    
    LF = LowerSets(F)
    if do_extra_checks():
        LF.belongs(S)
    F2 = F[1]
    converged = set()  # subset of solutions for which they converged
    nextit = set()
    # find the set of all r2s

    for fa in S.maximals:
        hr = dp0.solve_r_trace((r1, fa[1]), trace)

        for fb in hr.maximals:
            # valid = R.leq(ra, rb) # ra <= rb
            valid = F.leq(fb, fa) # fb <= fa 

            if valid:
                nextit.add(fb)

                feasible = F2.leq(fa[1], fb[1])
                if feasible:
                    converged.add(fb)

    nextit = F.Ls(poset_maxima(nextit, F.leq))
    converged = F.Ls(poset_maxima(converged, F.leq))

    return nextit, converged
示例#3
0
文件: dp_catalogue.py 项目: rusi/mcdp
    def solve_r(self, r):
        R = self.R
        F = self.F
        options_f = []
        for _name, f_max, r_min in self.entries:
            if R.leq(r_min, r):
                options_f.append(f_max)

        rs = poset_maxima(options_f, F.leq)
        return F.Ls(rs)
示例#4
0
文件: dp_catalogue.py 项目: rusi/mcdp
    def evaluate(self, i):
        if do_extra_checks():
            self.I.belongs(i)
        options_r = []
        options_f = []

        for name, f_max, r_min in self.entries:
            if name != i:
                continue

            options_f.append(f_max)
            options_r.append(r_min)

        rs = poset_minima(options_r, self.R.leq)
        fs = poset_maxima(options_f, self.F.leq)
        ur = UpperSet(rs, self.R)
        lf = LowerSet(fs, self.F)
        return lf, ur
示例#5
0
def eval_lfunction_anyoffun(lf, context):
    from .eval_constant_imp import eval_constant
    from mcdp_posets import FiniteCollectionsInclusion
    from mcdp_dp import LimitMaximals
    from mcdp_posets import FiniteCollection

    assert isinstance(lf, CDP.AnyOfFun)
    constant = eval_constant(lf.value, context)
    if not isinstance(constant.unit, FiniteCollectionsInclusion):
        msg = 'I expect that the argument to any-of evaluates to a finite collection.'
        raise_desc(DPSemanticError, msg, constant=constant)
    assert isinstance(constant.unit, FiniteCollectionsInclusion)
    P = constant.unit.S

    assert isinstance(constant.value, FiniteCollection)
    elements = set(constant.value.elements)
    maximals = poset_maxima(elements, P.leq)
    if len(elements) != len(maximals):
        msg = 'The elements are not maximals.'
        raise_desc(DPSemanticError, msg, elements=elements, maximals=maximals)

    dp = LimitMaximals(values=maximals, F=P)
    return create_operation_lf(context, dp=dp, functions=[])
示例#6
0
    def evaluate(self, m):
        from mcdp_posets.category_product import get_product_compact
        _, _, unpack = get_product_compact(self.M0, self.F2, self.R2)
        m0, _f2, _r2 = unpack(m)

        LF0, UR0 = self.dp1.evaluate(m0)
        assert isinstance(LF0, LowerSet), (LF0, self.dp1)
        assert isinstance(UR0, UpperSet), (UR0, self.dp1)

        # now extract first components f1 and r1
        f1s = set()
        for fi in LF0.maximals:
            fi1, _ = fi
            f1s.add(fi1)
        f1s = poset_maxima(f1s, self.F.leq)
        LF = self.F.Ls(f1s)
        r1s = set()
        for ri in UR0.minimals:
            ri1, _ = ri
            r1s.add(ri1)
        r1s = poset_minima(r1s, self.F.leq)
        UR = self.R.Us(r1s)
        return LF, UR
示例#7
0
    def evaluate(self, m):
        from mcdp_posets.category_product import get_product_compact
        _, _, unpack = get_product_compact(self.M0, self.F2, self.R2)
        m0, _f2, _r2 = unpack(m)

        LF0, UR0 = self.dp1.evaluate(m0)
        assert isinstance(LF0, LowerSet), (LF0, self.dp1)
        assert isinstance(UR0, UpperSet), (UR0, self.dp1)

        # now extract first components f1 and r1
        f1s = set()
        for fi in LF0.maximals:
            fi1, _ = fi
            f1s.add(fi1)
        f1s = poset_maxima(f1s, self.F.leq)
        LF = self.F.Ls(f1s)
        r1s = set()
        for ri in UR0.minimals:
            ri1, _ = ri
            r1s.add(ri1)
        r1s = poset_minima(r1s, self.F.leq)
        UR = self.R.Us(r1s)
        return LF, UR
示例#8
0
def eval_lfunction_anyoffun(lf, context):
    from .eval_constant_imp import eval_constant
    from mcdp_posets import FiniteCollectionsInclusion
    from mcdp_dp import LimitMaximals
    from mcdp_posets import FiniteCollection
    
    assert isinstance(lf, CDP.AnyOfFun)
    constant = eval_constant(lf.value, context)
    if not isinstance(constant.unit, FiniteCollectionsInclusion):
        msg = 'I expect that the argument to any-of evaluates to a finite collection.'
        raise_desc(DPSemanticError, msg, constant=constant)
    assert isinstance(constant.unit, FiniteCollectionsInclusion)
    P = constant.unit.S

    assert isinstance(constant.value, FiniteCollection)
    elements = set(constant.value.elements)
    maximals = poset_maxima(elements, P.leq)
    if len(elements) != len(maximals):
        msg = 'The elements are not maximals.'
        raise_desc(DPSemanticError, msg, elements=elements, maximals=maximals)

    dp = LimitMaximals(values=maximals, F=P)
    return create_operation_lf(context, dp=dp, functions=[],
                               name_prefix='_anyof')