Download
language ESSENCE 1.2.0
$ prob039.essence: Rehearsal Problem
$ Problem details available at http://www.csplib.org/Problems/prob039/
$ 07 September 2007
$

given n_pieces, n_players : int(1..)

letting Piece be domain int(1..n_pieces),
        Index be domain int(1..n_pieces),
        Player be domain int(1..n_players)

given duration : function (total) Piece --> int(1..),
      plays_in : relation of (Player*Piece)

find order : function (total, bijective) Index --> Piece,
     arrive, leave : function (total) Player --> Index

maximising
    sum p : Player .
        sum([duration(order(i)) | i : Index, i <= arrive(p) ]) +
        sum([duration(order(i)) | i : Index, i >= leave(p)
                                           , i <= n_pieces  ])

such that
    forAll p : Player . plays_in(p,arrive(p)),
    forAll p : Player . plays_in(p,leave(p)),
    forAll p : Player .
        forAll i : Index
            , plays_in(p,order(i))
            . arrive(p) <= i /\ leave(p) >= i