Пример #1
0
class TestCase(unittest.TestCase):
    def setUp(self):
        self.config = SPSConfig()
        self.modulefactory = ModuleFactory(self.config)

    def tests3rfail(self):
        results = []
        s3r = self.modulefactory.s3rmodule()
        logger.info("===============built===============")
        for t in range(4, 5):
            self.config.setParam("SCREEN_THICKNESS", t)
            ps = []
            xs = []
            std_xs = []
            for v in [BoundedVariable("day", i) for i in interval(1, 365 * YEAR, 1)]:
                dose = v.get_value() / 365.0 * (s3r.getConstant("S3R_K").get_value() /
                                                self.config.getParam("SCREEN_THICKNESS").get_value())
                # 阈值电压漂移
                xs.append(dose)
                x = s3r.getConstant("S3R_DELTAV_THRESHOLD").get_value() / (
                    s3r.getConstant("S3R_B").get_value() * exp(s3r.getConstant("S3R_B").get_value() * dose))
                std_x = (x - s3r.getConstant("S3R_A_MU").get_value()) / s3r.getConstant("S3R_A_SIGMA").get_value()
                p = 1 - pcf(std_x)
                ps.append(p)
                std_xs.append(std_x)
            logger.info("thickness={}, p_max={}".format(t, ps[-1]))
            results.append(ps)

        return results

    def get_parsed(self):
        constructor = ModelConstructor()
        model = constructor._parse("../../prism_model/smalltest.prism")
        return model

    # 测试同样的数据for parsed model
    def testparsing(self):
        parsed = self.get_parsed()
        days = range(1, YEAR * 365 + 1)
        s3r_mdl = parsed.get_module("S3R")
        results = []
        logger.info("===============parsed===============")
        for thickness in range(4, 5):
            probs = []
            parsed.setConstant("SCREEN_THICKNESS", thickness)
            for d in days:
                parsed.setVariable("day", d)
                fail_prob = s3r_mdl.commands["s3r_fail_cmd"].prob()
                probs.append(fail_prob)
            results.append(probs)
            logger.info("thickness={}, p_max={}".format(thickness, probs[-1]))
        return results

    def test_final(self):
        results_built = self.tests3rfail()[0]
        results_parsed = self.testparsing()[0]
        assert len(results_built) == len(results_parsed), "results array length not equal. "
        precision = 1e-6
        for index, (v1, v2) in enumerate(zip(results_parsed, results_built)):
            assert fabs(v1 - v2) <= precision, "day={}, v1={}, v2={}".format(index+1, v1, v2)
Пример #2
0
class TestCase(unittest.TestCase):
    def setUp(self):
        self.config = SPSConfig()

    def testExport2PRISM(self):
        prismfileaddr = "/Users/bitbook/Documents/PostGradCourses/docrepo/hkht/NN/proj/prism_model/SYS.prism"
        self.config.export2prism(prismfileaddr)
Пример #3
0
def check():
    config = SPSConfig()
    built = get_built_model()
    parsed = get_parsed_model()
    rslt1 = []
    rslt2 = []
    thickness = range(1, 10, 4)
    for t in thickness:
        config.setParam(THICKNESS, Constant(THICKNESS, t))
        parsed.setConstant(THICKNESS, t)
        checker1 = get_checker(built, ltl, DURATION)
        checker2 = get_checker(parsed, ltl, DURATION)
        rslt1.append(checker1.run())
        rslt2.append(checker2.run())

    precision = 2e-2
    for v1, v2 in zip(rslt1, rslt2):
        assert fabs(v1 - v2) < precision, "v1:{}, v2:{}".format(v1, v2)
Пример #4
0
class ModelFactory(object):
    module_factory = ModuleFactory(SPSConfig())
    model_constructor = ModelConstructor()

    @classmethod
    def get_built(cls):
        def failurecondition(vs, cs):
            sb_status = vs['sb_status'].get_value()
            s3r_status = vs['s3r_status'].get_value()
            bcr_status = vs['bcr_status'].get_value()
            bdr_status = vs['bdr_status'].get_value()
            return (sb_status + s3r_status + bcr_status + bdr_status) < 4

        labels = {}
        labels['failure'] = failurecondition

        model = ModulesFile(ModelType.DTMC,
                            failureCondition=failurecondition,
                            stopCondition=failurecondition,
                            modules=[
                                cls.module_factory.timermodule(),
                                cls.module_factory.s3rmodule(),
                                cls.module_factory.sbmodule(),
                                cls.module_factory.bcrmodule(),
                                cls.module_factory.bdrmodule()
                            ],
                            labels=labels)
        model._constants[
            'SCREEN_THICKNESS'] = cls.module_factory.config.getParam(
                'SCREEN_THICKNESS')
        model.duration = 730
        return model

    @classmethod
    def setParam(cls, name, value):
        if name not in cls.module_factory.config.params.keys():
            return
        cls.module_factory.config.setParam(name, value)

    @classmethod
    def get_parsed(cls, duration=730):
        sep = get_sep()
        mdl_dir = sep.join((get_proj_dir(), 'prism_model', 'smalltest.prism'))
        model = cls.model_constructor._parse(mdl_dir)
        model.duration = duration
        return model
Пример #5
0
class ModelFactory(object):
    module_factory = ModuleFactory(SPSConfig())

    @classmethod
    def get_built(cls):
        def failurecondition(vs, cs):
            result = vs['sb_status'] == 0 or vs['s3r_status'] == 0 or vs[
                "bcr_status"] == 0 or vs["bdr_status"] == 0
            return result

        def upcondition(vs, cs):
            return not failurecondition(vs, cs)

        labels = {}
        labels['failure'] = failurecondition
        labels['up'] = upcondition

        model = ModulesFile(ModelType.DTMC,
                            failureCondition=failurecondition,
                            stopCondition=failurecondition,
                            modules=[
                                cls.module_factory.timermodule(),
                                cls.module_factory.s3rmodule(),
                                cls.module_factory.sbmodule(),
                                cls.module_factory.bcrmodule(),
                                cls.module_factory.bdrmodule()
                            ],
                            labels=labels)
        model.constants[
            'SCREEN_THICKNESS'] = cls.module_factory.config.getParam(
                'SCREEN_THICKNESS')
        return model

    @staticmethod
    def get_parsed():
        sep = get_sep()
        mdl_dir = sep.join((get_proj_dir(), 'prism_model', 'smalltest.prism'))
        return ModelConstructor().parseModelFile(mdl_dir)
Пример #6
0
 def setUp(self):
     self.config = SPSConfig()
     self.modulefactory = ModuleFactory(self.config)
Пример #7
0
timer_turn = Variable('timer_turn', True, set([True, False]), bool, True)
timer.addVariable(day)
timer.addVariable(timer_turn)


def incdayaction(vs, cs):
    vs['day'].setValue(vs['day'].getValue() + 1)
    vs['timer_turn'].setValue(False)


inc_day = Command(
    'inc day', lambda vs, cs: vs['timer_turn'] == True and vs['day'] <= timer.
    getConstant('TIME_LIMIT').getValue(), incdayaction, timer, 1.0)
timer.addCommand(inc_day)

config = SPSConfig()

# solar battery module of the system
sb = Module("solar battery module")

# set initial value None to denote uncertainty
screenthick = Constant('SCREEN_THICKNESS', None)
sb.addConstant(screenthick)
# the dose of one year: dose = K_SB * thickness
sb.addConstant(config.getParam("SB_K"))
sb.addConstant(config.getParam("SB_B"))
sb.addConstant(config.getParam("SB_P_THRESHOLD"))
sb.addConstant(config.getParam("SB_A_MU"))
sb.addConstant(config.getParam("SB_A_SIGMA"))

# variables
Пример #8
0
 def setUp(self):
     if not hasattr(self, 'model'):
         self.model = ModelFactory(ModuleFactory(SPSConfig())).get_built()
     self.paths = 120
     self.length = 730
Пример #9
0
 def setUp(self):
     self.config = SPSConfig()