I started using Edge-valued Multi-valued Decision Diagrams (EVMDDs) [CS02] a bit more than a year ago while working on AI planning with state-dependent action costs [GKM15]. Throughout 2015, we were happy using the wonderful EVMDD library MEDDLY by Junaid Babar and Andrew Miner more or less as a black box. This worked very well for us, both because MEDDLY is stable and efficient, and because it is written in C++, just like the PROST planner in which we employed EVMDDs and MEDDLY.
But now we are planning to release a small tool that translates tasks formulated in a state-dependent action cost extension of PDDL into tasks formulated in PDDL with state-independent action costs. Since this tool will be based on the Fast Downward translator (written in Python) and we want to avoid introducing too many external dependencies, I considered writing my own EVMDD implementation in Python. Besides that, two more things motivated me to implement such a library: first, I wanted to have an EVMDD playground that is easy to play on, ideally with a function that simply takes an arithmetic term written in infix notation, a variable order, and the domain sizes of the variables, and returns a figure of the corresponding reduced ordered EVMDD. Second, I wanted to understand how EVMDDs work internally, in particular, how the basic arithmetic operations are implemented on EVMDDs.
Finally, I was looking for a small programming project to practice my Python software development skills for a while, anyway. So, I used the winter holidays of 2015/2016 to write a first version of the EVMDD Library for Python (pyevmdd).
Today, I can proudly announce the initial release of the myND planner for fully and partially observable nondeterministic planning tasks.
The code as well as some rudimentary documentation in the form of a wiki can be found at Bitbucket.
More technical and detailed descriptions of how the planner works algorithmically can be found in a number of conference publications. They mostly focus on the heuristics used to guide the search, but a brief description of the search algorithm is also given [MOHB10]. The earlier publications [BM08, BM09, MOHB10] deal with fully observable problems, whereas the most recent one [OM13] deals with partial observability. Regarding the heuristics used to guide the search, one publication [BM08] is about a delete-relaxation approach, whereas the others [BM09, MOHB10, OM13] use abstraction heuristics.