language Essence 1.2.0
$ prob056.essence: SONET Configuration
$ A SONET communication network comprises a number of rings, each joining a
$ a number of nodes. A node is installed on a ring using an add-drop multiplexer
$ (ADM) and there is a capacity bound on the number of ADMs that can be
$ installed on a ring. Each node can be installed on more than one ring.
$ Communication can be routed between a pair of nodes only if both are installed
$ on a common ring. Given the capacity bound and a specification of which pairs
$ of nodes must communicate, allocate a set of nodes to each ring so that the
$ given communication demands are met. The objective is to minimise the number
$ of ADMs used. (This is a common simplification of the full SONET problem.)
$ 03 September 2007

given nnodes, nrings, capacity : int(1..)

letting Nodes be domain int(1..nnodes)

given demand : set of set (size 2) of Nodes

find network : mset (size nrings) of set (maxSize capacity) of Nodes

minimising sum ring in network . |ring|

such that 

forAll pair in demand . 
    exists ring in network . 
        pair subsetEq ring