stablem.gms : 안정 결혼 문제

설명

n명의 남자와 n명의 여자가 주어졌을 때, 각각 쌍으로 결혼하십시오.
남자는 여자를 선호하는 순서대로 1부터 n까지 순위를 매겼습니다.
w_1,...,w_n 그리고 각 여성도 마찬가지로 m_1,...,m_n을 수행했습니다. 만약
결과 결혼 세트에는 m_i,w_j 형식의 쌍이 포함되어 있지 않습니다.
m_k,w_l m_i는 w_j보다 w_l을 선호하고 w_l은 m_k보다 m_i를 선호합니다.
결혼생활은 안정적이라고 합니다. Gale과 Shapley(1962)는 다음을 보여주었습니다.
어떤 순위를 선택하든 안정적인 결혼이 존재합니다(Skiena 1990,
p. 245). 미국에서는 Gale과 Shapley의 알고리즘이
(1962)는 병원을 의료 인턴과 연결하는 데 사용됩니다(Skiena 1990,
p. 245).

이 모델은 MIP 컷을 도입하여 다중/전체 솔루션을 생성합니다.
MIP를 해결합니다.

소형 모델 유형 :MIP


카테고리 : 슬롯 모델 라이브러리


메인 파일 : stablem.gms

$title 안정적인 결혼 문제 (STABLEM,SEQ=389)

$onText
n명의 남자와 n명의 여자가 주어졌을 때, 각각 쌍으로 결혼하십시오.
남자는 여자를 선호하는 순서대로 1부터 n까지 순위를 매겼습니다.
w_1,...,w_n 그리고 각 여성도 마찬가지로 m_1,...,m_n을 수행했습니다. 만약
결과 결혼 세트에는 m_i,w_j 형식의 쌍이 포함되어 있지 않습니다.
m_k,w_l m_i는 w_j보다 w_l을 선호하고 w_l은 m_k보다 m_i를 선호합니다.
결혼생활은 안정적이라고 합니다. Gale과 Shapley(1962)는 다음을 보여주었습니다.
어떤 순위를 선택하든 안정적인 결혼이 존재합니다(Skiena 1990,
p. 245). 미국에서는 Gale과 Shapley의 알고리즘이
(1962)는 병원을 의료 인턴과 연결하는 데 사용됩니다(Skiena 1990,
p. 245).

이 모델은 MIP 컷을 도입하여 다중/전체 솔루션을 생성합니다.
MIP를 해결합니다.

Gale, D 및 Shapley, LS, 대학 입학 및 안정성
결혼. 미국 수학 월간지 69, 1(1962), 9-15.

Gusfield, D 및 Irving, RW, 안정적인 결혼 문제: 구조
그리고 알고리즘. MIT 출판부, 케임브리지, 매사추세츠, 미국, 1989.

스키에나, S, 6.4.4. 안정적인 결혼. 이산 수학 구현에서:
Mathematica를 이용한 조합론 및 그래프 이론. 애디슨-웨슬리 롱먼
Publishing Co., Inc., 보스턴, 매사추세츠, 미국, 1991.

Weisstein, E W, 안정적인 결혼 문제. MathWorld-A Wolfram 웹에서
자원. http://mathworld.wolfram.com/StableMarriageProblem.html

Sethuraman, V J 및 Teo, C P, 선형 프로그래밍은 결혼 생활을 가져옵니다
행복. 수학 메들리, 싱가포르 수학 학회 25, 2
(1998).

키워드: 혼합정수선형계획법, 결혼 문제, 매칭
$offText

* 게임 사용 ... --data=xxx
$데이터를 설정하지 않은 경우 $set 데이터 사전 설정
$maxsol을 설정하지 않은 경우 $set maxsol 100

$ifThenI %data% == 초기
세트
   m / 앨런, 밥, 칼, 댄 /
   w / 앨리스, 브렌다, 신디, 데비 /;

테이블 wp(w,m) '여성 선호도'
           앨런 밥 칼 댄
   앨리스 3 4 2 1
   브렌다 3 4 1 2
   신디 3 2 1 4
   데비 4 2 3 1;

테이블 mp(m,w) '남자 선호도'
          앨리스 브렌다 신디 데비
   앨런 2 4 1 3
   밥 1 4 2 3
   칼 3 4 2 1
   단 3 2 1 4;

$elseIfI %data% == 미니징크
세트
   m / m1*m5 /
   w / w1*w5 /;

테이블 wp(w,m) '여성 선호도'
       m1 m2 m3 m4 m5
   w1 1 2 4 3 5
   w2 3 5 1 2 4
   파3 5 4 2 1 3
   파4 1 3 5 4 2
   파5 4 2 3 5 1;

테이블 mp(m,w) '남자 선호도'
       w1 w2 w3 w4 w5
   m1 5 1 2 4 3
   m2 4 1 3 2 5
   m3 5 3 2 4 1
   m4 1 5 4 3 2
   m5 4 3 2 1 5;

$elseIfI %data% == 5
세트
   m / 조, 브라이언, 조지, 매트, 짐 /
   w / 에이미, 사라, 수잔, 켈리, 다이앤 /;

테이블 wp(w,m) '여성 선호도'
           조 브라이언 조지 매트 짐
   에이미 1 2 4 3 5
   사라 3 5 1 2 4
   수잔 5 4 2 1 3
   켈리 1 3 5 4 2
   다이앤 4 2 3 5 1;

테이블 mp(m,w) '남자 선호도'
           에이미 사라 수잔 켈리 다이앤
   조 5 1 2 4 3
   브라이언 4 1 3 2 5
   조지 5 3 2 4 1
   매트 1 5 4 3 2
   짐 4 3 2 1 5;

$elseIfI %data% == 수학세계
세트
   m / m1*m9 /
   w / w1*w9 /;

테이블 wp(w,m) '여성 선호도'
       m1 m2 m3 m4 m5 m6 m7 m8 m9
   파1 3 9 3 8 6 2 9 6 8
   w2 1 4 1 7 9 4 3 3 2
   파3 5 8 8 5 2 5 8 2 6
   파4 2 1 9 3 5 1 2 1 4
   파5 8 7 5 2 1 6 7 8 9
   파6 7 6 4 6 4 8 5 4 1
   파7 6 3 2 4 7 3 4 5 3
   파8 9 2 6 9 3 9 6 9 7
   파9 4 5 7 1 8 7 1 7 5;

테이블 mp(m,w) '남자 선호도'
       w1 w2 w3 w4 w5 w6 w7 w8 w9
   m1 7 5 4 9 2 2 1 5 6
   m2 3 4 8 7 6 7 6 6 1
   m3 8 8 3 4 4 8 2 9 4
   m4 9 3 9 2 9 6 3 1 7
   m5 6 1 7 5 8 5 8 2 5
   m6 4 2 5 8 7 3 5 8 8
   m7 2 6 6 3 5 4 4 4 3
   m8 1 7 1 1 1 1 9 3 9
   m9 5 9 2 6 3 9 7 7 2;

$else
$abort 데이터세트 "%data%"가 존재하지 않습니다. premer,five,minizinc를 사용하세요.
$endIf

별칭(m,mm), (w,ww);

이진변수 match(w,m);

가변 순위;

방정식 onem(w), onew(m), stable(w,m), defrank;

defrank.. 순위 =e= sum((w,m), wp(w,m)*match(w,m));

onem(w)..sum(m, match(w,m)) =e= 1;

onew(m)..sum(w, match(w,m)) =e= 1;

stable(w,m).. sum(mm$(wp(w,mm) > wp(w,m)), match(w,mm))
            + sum(ww$(mp(m,ww) > mp(m,w)), match(ww,m)) =l= 1;

모델 sm / 모두 /;

mip 최소화 순위를 사용하여 sm을 해결합니다.

세트
   nn '해의 수' / sol-1*sol-%maxsol% /
   엔(nn)
   솔(nn,w,m);

방정식 cut(nn);

cut(n).. sum(sol(n,w,m), match(w,m)) =l= 카드(w) - 1;

모델 신품/sm, 컷/;

new.modelStat = sm.modelStat;
옵션 limRow = 0, limCol = 0, solPrint = 꺼짐, optCr = 0,solvLink = 5;

루프(nn$(new.modelStat = 1),
   n(nn) = 예;
   sol(nn,w,m) = round(match.l(w,m));
   밉 최소화 순위를 사용하여 새로운 문제를 해결합니다.
);
옵션 sol:0:0:1;
디스플레이 솔;