An OPL model of the Stable Marriages Problem


enum Women=...;
enum Men=...;

int rankWomen[Women,Men] = ...;
int rankMen[Men,Women] = ...;

var Women wife[Men];
var Men husband[Women];
solve {
     forall(m in Men)
        husband[wife[m]] = m;
     forall(w in Women)
        wife[husband[w]] = w;

     forall(m in Men & o in Women)
        rankMen[m,o] < rankMen[m,wife[m]] => rankWomen[o,husband[o]] < rankWomen[o,m];
     forall(w in Women & o in Men)
        rankWomen[w,o] < rankWomen[w,husband[w]] rankMen[o,wife[o]] < rankMen[o,w];
};



this model appears in: Pascal Van Hentenryck. The OPL Optimization Programming Language.
MIT Press, January 1999.