def test_logicizer_env(): g = TransitionSystem() g.vars['x'] = 'bool' g.owner = 'env' g.add_edge(0, 1, x=True) g.add_edge(1, 2, formula="x'") g.add_edge(2, 1) (env_init, env_act, sys_init, sys_act) = logicizer._graph_to_formulas(g, nodevar='k', ignore_initial=True, self_loops=True) s = stx.conj(env_act) e1 = "(((((k = 0)) => (((x <=> True)) /\ ((k' = 1)))) \n" e2 = "(((((k = 0)) => (((k' = 1)) /\ ((x <=> True)))) \n" assert s.startswith(e1) or s.startswith(e2), s e3 = ("/\ (((k = 1)) => ((x') /\ ((k' = 2))))) \n" "/\ (((k = 2)) => ((k' = 1)))) \/ (k' = k)") assert s.endswith(e3), s # test automaton aut = logicizer.graph_to_logic(g, nodevar='k', ignore_initial=True) assert 'x' in aut.vars, aut.vars assert 'k' in aut.vars, aut.vars xtype = aut.vars['x']['type'] ktype = aut.vars['k']['type'] assert xtype == 'bool', xtype assert ktype == 'int', ktype
def semi_symbolic(): """Example using a semi-enumerated state machine. Instructive variants: - `formula = "x'"` - `self_loops = True` - `aut.moore = False` """ g = TransitionSystem() g.owner = 'sys' g.vars = dict(x='bool') g.env_vars.add('x') nx.add_path(g, range(11)) g.add_edge(10, 10) g.add_edge(10, 0, formula="x") # symbolic aut = logicizer.graph_to_logic(g, 'nd', ignore_initial=True, self_loops=False) aut.init['env'] = 'nd = 1' aut.win['<>[]'] = aut.bdds_from(' ~ x') aut.win['[]<>'] = aut.bdds_from('nd = 0') aut.qinit = '\A \A' aut.moore = True aut.plus_one = True print(aut) # compile to BDD z, yij, xijk = gr1.solve_streett_game(aut) gr1.make_streett_transducer(z, yij, xijk, aut) # print t.bdd.to_expr(t.action['sys'][0]) r = aut.action['sys'] # aut.bdd.dump('bdd.pdf', roots=[r]) g = enumerate_controller(aut) h, _ = sym_enum._format_nx(g) pd = nx.drawing.nx_pydot.to_pydot(h) pd.write_pdf('game_states.pdf') print('Enumerated strategy has {n} nodes.'.format(n=len(g))) print(('Winning set:', aut.bdd.to_expr(z))) print('{n} BDD nodes in total'.format(n=len(aut.bdd)))
def semi_symbolic(): """Example using a semi-enumerated state machine. Instructive variants: - `formula = "x'"` - `self_loops = True` - `aut.moore = False` """ g = TransitionSystem() g.owner = 'sys' g.vars = dict(x='bool') g.env_vars.add('x') g.add_path(range(11)) g.add_edge(10, 10) g.add_edge(10, 0, formula="x") # symbolic aut = logicizer.graph_to_logic( g, 'nd', ignore_initial=True, self_loops=False) aut.init['env'] = 'nd = 1' aut.win['<>[]'] = aut.bdds_from(' ~ x') aut.win['[]<>'] = aut.bdds_from('nd = 0') aut.qinit = '\A \A' aut.moore = True aut.plus_one = True print(aut) # compile to BDD z, yij, xijk = gr1.solve_streett_game(aut) gr1.make_streett_transducer(z, yij, xijk, aut) # print t.bdd.to_expr(t.action['sys'][0]) r = aut.action['sys'] # aut.bdd.dump('bdd.pdf', roots=[r]) g = enumerate_controller(aut) h, _ = sym_enum._format_nx(g) pd = nx.drawing.nx_pydot.to_pydot(h) pd.write_pdf('game_states.pdf') print('Enumerated strategy has {n} nodes.'.format( n=len(g))) print(('Winning set:', aut.bdd.to_expr(z))) print('{n} BDD nodes in total'.format( n=len(aut.bdd)))