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
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)
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
def setUp(self): if not hasattr(self, 'model'): self.model = ModelFactory(ModuleFactory(SPSConfig())).get_built() self.paths = 120 self.length = 730
def setUp(self): self.config = SPSConfig()