Exemple #1
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
Exemple #2
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)
Exemple #3
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)
 def setUp(self):
     self.config = SPSConfig()
     self.modulefactory = ModuleFactory(self.config)
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
Exemple #6
0
 def setUp(self):
     if not hasattr(self, 'model'):
         self.model = ModelFactory(ModuleFactory(SPSConfig())).get_built()
     self.paths = 120
     self.length = 730
Exemple #7
0
 def setUp(self):
     self.config = SPSConfig()