Class Tree
Description A simplified version of the hydraulic system on a space shuttle consists of a directed graph, G, such that:

* Nodes of this graph are labeled as tanks,jets, or junctions.
* Every link between two nodes is labeled by a valve.
* There are no paths in G between any two tanks.
* For every jet there always is a path in G from a tank to this jet.

Tanks can be full or empty. Valves can be open or closed. Some of the valves can be stuck in the close position.
A state of G is specified by the set of full tanks, the set of open valves, and the set of valves stuck in the closed position.

A node of G is called pressurized in state S if it is a full tank or if there exists a path from some full tank of G to this node such that all the valves on the edges of this path are open.

We assume that in a state S a shuttle controller can open a valve V2 corresponding to a directed link <N1,N2> only if N1 is pressurized and not stuck.

Problem: Given a graph G together with an initial state and a jet j, a shuttle controller needs to find a shortest sequential plan to pressurize j. Write a program which automates this process.

We assume that your program will contain the following input and output atoms:

Input atoms

The graph should be described by the collection of ground atoms:

* tank(t): t is a tank
* jet(j): j is a jet
* junction(p): p is a junction
* valve(v): v is a valve
* link(n1,n2,v): v is the valve on the pipe connecting node n1 and n2.
* numValves(n): n is the total number of valves in the graph

The state description uses atoms:

* full(t) iff tank t is full. A tank is empty if it is not mentioned to be full in the input.
* stuck(v): valve v is stuck

The goal to achieve:

* goal(j): jet j needs to be pressurized

Output atoms

A sequence of atoms of the form

switchon(v,t).

which means an action to open valve v at time step t where t is a number.

All the actions should be consecutive and start from time step 0. E.g., a sequence

* switchon(v1,1). switchon(v2,0). is fine.
* switchon(v1,2). switchon(v2,1). is not allowed.
* switchon(v1,0). switchon(v2,3). is not allowed too.

Authors: Michael Gelfond, Ricardo Morales and Yuanlin Zhang.
Encodings
1 - 2 of 2