Download
language Essence 1.3
$ prob031.essence: Rack Configuration Problem
$ Problem details available at http://www.csplib.org/Problems/prob031/
$ n_models: the number of rack models
$ n_types: the number of card types
$ n_cards: the number of cards being plugged in
$ n_racks: the number of racks to use
given n_models, n_types, n_cards, n_racks : int(1..)
$ Model: a rack model is represented as an integer between 1 and n_models
$ Type: a card type is represented as an integer between 1 and n_types
$ Card:
$ Rack: ...
letting Model be domain int(1..n_models),
Type be domain int(1..n_types),
Card be domain int(1..n_cards),
Rack be new type of size n_racks
$ max_power: the maximum power a rack model can supply
$ max_connects : the maximum number of connections a rack model can accomodate
$ price: the price of a rack model
$ req_power: the amount of power required by a particular card type
$ ctype: the type of a particular card
given max_power : function (total) Model --> int(1..),
max_connects : function (total) Model --> int(1..),
price : function (total) Model --> int(1..),
req_power : function (total) Type --> int(1..),
ctype : function (total) Card --> Type
$ model: the model of each rack
$ plugged: the set of cards plugged in to a particular rack
find model : function Rack --> Model,
$ The size of each set returned by plugged is <= some value returned by max_connects (given)
plugged : function Rack --> set (maxSize max(range(max_connects))) of Card
$ minimise the total rack price
minimising sum r in defined(model) . price(model(r))
$ every card is plugged in to at least one rack
such that
forAll c : Card .
exists r in defined(model) .
c in plugged(r)
$ no card is plugged in to more than one rack
such that
forAll r1, r2 in defined(model)
, r2 > r1
. |plugged(r1) intersect plugged(r2)| = 0
$ the power demand placed on a rack does not exceed the maximum it can supply
such that
forAll r in defined(model) .
(sum c in plugged(r) . (req_power(ctype(c))))
<= max_power(model(r))
$ the number of cards plugged in to a rack does not exceed the number of slots available
such that
forAll r in defined(model) .
|plugged(r)| <= max_connects(model(r))