33 for (
int player = 0; player < 2; ++player)
36 std::deque<verti> winning;
37 for (
verti v = 0; v < V; ++v)
43 assert(solved.
count(v) == 0);
51 for ( std::deque<verti>::const_iterator it = winning.begin();
52 it != winning.end(); ++it ) solved.
insert(*it);
54 solved, winning, strategy );
60 std::vector<verti> unsolved;
62 std::vector<verti> submap;
63 std::unique_ptr<ParityGameSolver> subsolver;
71 strategy = subsolver->solve();
74 if (solved.
size() != V)
80 unsolved.reserve(num_unsolved);
81 for (
verti v = 0; v < V; ++v)
83 if (solved.
count(v) == 0) unsolved.push_back(v);
85 assert(!unsolved.empty() && unsolved.size() == num_unsolved);
95 subsolver.reset(
pgsf_.
create(subgame, &submap[0], submap.size()));
99 subsolver.reset(
pgsf_.
create(subgame, &unsolved[0], unsolved.size()));
103 substrat = subsolver->solve();
104 if (!substrat.empty())
115 const verti *vertex_map,
verti vertex_map_size )
std::size_t verti
type used to number vertices
void merge_vertex_maps(ForwardIterator begin, ForwardIterator end, const verti *old_map, verti old_map_size)
void merge_strategies(std::vector< verti > &strategy, const std::vector< verti > &substrat, const std::vector< verti > &vertex_map)
void make_attractor_set(const ParityGame &game, ParityGame::Player player, SetT &vertices, StrategyT &strategy)
ParityGameSolverFactory & pgsf_
Factory used to create subsolvers.
ParityGameSolver * create(const ParityGame &game, const verti *vertex_map, verti vertex_map_size)
Create a new DeloopSolver instance.
DeloopSolver(const ParityGame &game, ParityGameSolverFactory &pgsf, const verti *vmap, verti vmap_size)
ParityGame::Strategy solve()
const verti * vmap_
Current vertex map.
const verti vmap_size_
Size of vertex map.
ParityGameSolverFactory & pgsf_
Solver factory to use.
size_type count(const Key &k) const
std::pair< iterator, bool > insert(const Key &k)
virtual ParityGameSolver * create(const ParityGame &game, const verti *vertex_map=NULL, verti vertex_map_size=0)=0
const ParityGame & game_
Game being solved.
priority_t priority(verti v) const
void make_subgame(const ParityGame &game, ForwardIterator vertices_begin, ForwardIterator vertices_end, bool proper, StaticGraph::EdgeDirection edge_dir=StaticGraph::EDGE_NONE)
Player player(verti v) const
const StaticGraph & graph() const
std::vector< verti > Strategy
void deref() const
Decrement reference count and delete the object if it becomes zero.
void ref() const
Increment reference count.
const_iterator succ_begin(verti v) const
edgei outdegree(verti v) const
#define mCRL2log(LEVEL)
mCRL2log(LEVEL) provides the stream used to log.