설명
기사가 좌표가 1,2인 루트-5 길이의 이동을 하는 것처럼, 파이브리퍼(fiveleaper)는 길이 5유닛의 이동을 하는 일반화된 기사의 일종이며, 좌표가 0,5 또는 3,4입니다. 두 경우 모두 유클리드 거리 이동한 거리는 5칸입니다. 무료 슬롯 게임를 진행하려면 Fiveleaper가 보드의 모든 사각형을 한 번씩 방문해야 합니다. 합법적인 움직임만을 사용합니다. 시작 및 종료 사각형은 로 구분되어야 합니다. 합법적인 움직임과 fiveleaper는 이 마지막 움직임을 통해 무료 슬롯 게임를 종료할 수 있습니다. NROW, NCOL(체스판 크기, 기본값 8x8) 및 MAXCUT 매개변수를 사용하여 실행합니다. (하위 무료 슬롯 게임 제거 컷의 최대 수, 기본값은 500). 예를 들어, 게임 fiveleap --NROW=10 --NCOL=10 --MAXCUT=1000 https://dx.doi.org/10.1287/ited.4.1.78에서 도약자에 대한 자세한 내용을 확인하세요.
대형 모델 유형 :MIP
카테고리 : 무료 슬롯 게임 모델 라이브러리
메인 파일 : fiveleap.gms
$title Five Leaper 무료 슬롯 게임 문제(FIVELEAP,SEQ=268)
$onText
기사가 좌표가 1,2인 루트-5 길이의 이동을 하는 것과 마찬가지로
파이브리퍼(fiveleaper)는 길이 5유닛의 이동을 하는 일반화된 기사의 일종이며,
좌표가 0,5 또는 3,4입니다. 두 경우 모두 유클리드 거리
이동한 거리는 5칸입니다.
무료 슬롯 게임를 진행하려면 Fiveleaper가 보드의 모든 사각형을 한 번씩 방문해야 합니다.
합법적인 움직임만을 사용합니다. 시작 및 종료 사각형은 로 구분되어야 합니다.
합법적인 움직임과 fiveleaper는 이 마지막 움직임을 통해 무료 슬롯 게임를 종료할 수 있습니다.
NROW, NCOL(체스판 크기, 기본값 8x8) 및 MAXCUT 매개변수를 사용하여 실행합니다.
(하위 무료 슬롯 게임 제거 컷의 최대 수, 기본값은 500). 예를 들어,
게임 fiveleap --NROW=10 --NCOL=10 --MAXCUT=1000
도약에 대한 자세한 내용은 https://dx.doi.org/10.1287/ited.4.1.78을 참조하세요.
Chlond, M J, Daniel, RC 및 Heipcke, S, 도약하는 Fiveleapers.
https://dx.doi.org/10.1287/ited.4.1.78
Gueret, C, Prins, C 및 Sevaux, M, Xpress-MP를 통한 최적화 응용,
Susanne Heipcke가 번역하고 개정했습니다. 대시 최적화, 2002.
키워드: 혼합 정수 선형 계획법, 하위 무료 슬롯 게임 제거, 수학 게임,
fiveleaper 무료 슬롯 게임 문제
$offText
$eolCom //
$NCOL이 설정되지 않은 경우 $set NCOL 8
$설정되지 않은 경우 NROW $set NROW 8
$설정되지 않은 경우 MAXCUT $set MAXCUT 500
세트
r '행' / 1*%NCOL% /
c '열' / 1*%NROW% /
ss(r,c) '제곱 시작' / '1'.'1' /
m(r,c,r,c) '합법적인 움직임';
별칭 (r,rp), (c,cp);
변수
xm(r,c,r,c) '무료 슬롯 게임의 이동'
nm(r,c) '이동 횟수'
z '더미 목적 변수';
바이너리 변수 xm;
양의 변수 nm;
세트
nn '서브무료 슬롯 게임 제거 컷' / 1*%MAXCUT% /
t(nn,r,c,r,c) '하위 무료 슬롯 게임'
n(nn) '활성 컷';
매개변수
l(nn) '하위 무료 슬롯 게임 길이';
방정식
obj '더미 목표'
deffrom(r,c) '각 사각형이 서로 앞에 옵니다.'
defto(r,c) '각 사각형 앞에는 다른 사각형이 옵니다.'
deforder(r,c,r,c) '이동 순서'
defsecut(nn) '하위 무료 슬롯 게임 제거 제약 조건';
obj.. z =e= sum(m, xm(m));
deffrom(r,c).. sum(m(r,c,rp,cp), xm(m)) =e= 1;
defto(rp,cp).. sum(m(r,c,rp,cp), xm(m)) =e= 1;
deforder(m(r,c,rp,cp))$(ss(rp,cp) 아님).. nm(r,c) - nm(rp,cp) =l= %NCOL%*%NROW%*(1 - xm(m)) - 1;
defsecut(n).. sum(t(n,m), xm(m)) =l= l(n)-1;
모델
리퍼 '5리퍼의 폐쇄형 제형' / obj, deffrom, defto, deforder /
leaperSE '서브무료 슬롯 게임 제거 공식' / obj, deffrom, defto, defsecut /;
m(r,c,rp,cp) = sqr(ord(r) - ord(rp)) + sqr(ord(c) - ord(cp)) = 25; // 가능한 이동
NoExit(r,c) "이동을 허용하지 않는 사각형"을 설정하십시오.
NoExit(r,c) = sum(m(r,c,rp,cp),1) = 0;
중단$카드(NoExit) NoExit;
매개변수
LeaperTour(r,c) '리퍼 솔루션'
SolRep '솔루션 타이밍 보고서';
옵션 solPrint = 꺼짐, limRow = 0, limCol = 0, t:0:0:1, leaperTour:0:1:1;
SolRep('%NCOL%x%NROW%','#Moves') = 카드(m);
nm.fx(ss) = 1; // 시작 사각형 = 1,1에서 도약 무료 슬롯 게임를 시작합니다.
leaper.resLim = 120; // 최대 120초 동안 폐쇄형 리퍼 공식을 실행합니다.
mip를 사용하여 z를 최소화하는 리퍼를 해결합니다.
if(leaper.modelStat = %modelStat.optimal% 또는
Leaper.modelStat = %modelStat.integerSolution%, // 정수 해를 찾았나요?
leaperTour(r,c) = nm.l(r,c);
SolRep('Closed','Time') = leaper.resUsd;
'Closed Formula Tour', leeperTour를 표시합니다.
그렇지 않으면
SolRep('닫음','시간') = na;
'폐쇄형 도약 모델에 대한 솔루션 없음'을 표시합니다.
);
세트
(r,c)에서
to(r,c) '무료 슬롯 게임 검색 세트'
nl(nn) '마지막 활성 컷'
Visited(r,c) '무료 슬롯 게임 검색에서 방문한 광장';
스칼라
ntours '현재 솔루션의 무료 슬롯 게임 수'
ttours '총 무료 슬롯 게임 횟수' / 0 /;
SolRep('SubTour','시간') = 0;
leaperSE.solPrint = %solPrint.quiet%; // 솔버 출력을 제공하지 않음
* 하위 무료 슬롯 게임 제거 데이터 구조 초기화
nl('1') = 예;
n(nn) = 아니오;
t(nn,m) = 아니요;
l(nn) = 0;
반복하다
mip를 사용하여 z를 최소화하는 leaperSE를 해결합니다.
중단$(leaperSE.modelStat <> %modelStat.optimal% 및
LeaperSE.modelStat <> %modelStat.integerSolution% ) '정수 솔루션을 찾을 수 없습니다!', t;
SolRep('SubTour','시간') = SolRep('SubTour','시간') + leaperSE.resUsd;
xm.l(m) = round(xm.l(m));
ntours = 0;
방문함(r,c) = 아니오;
loop((r,c)$(not Visited(r,c)), // 방문하지 않은 모든 사각형을 반복합니다.
ntours = ntours + 1;
nl(nn) = nl(nn - 1);
n(nl) = 예;
l(nl) = 0;
(r,c) = 예; // (하위)무료 슬롯 게임 시작
반복하다
방문(from) = 예;
to(rp,cp) = sum(m(from,rp,cp), xm.l(m)); // 이동은 어디로 가는가
t(nl,from,to) = 예;
l(nl) = l(nl) + 1;
에서(rp,cp) = 에서(rp,cp); // 이동 대상은 다음과 같습니다.
// 다음 이동의 원점
sum(방문(to),1)까지;
(r,c) = 아니오;
);
ttours = ttours + ntours;
abort$(ttours > 카드(nn)) 'Cut set nn이 너무 작습니다.', t, n;
ntours = 1이 될 때까지;
SolRep('SubTour','Iterations') = leaperSE.number;
SolRep('SubTour','#SubTours') = ttours;
* 도약 무료 슬롯 게임 구축
스칼라 nmove '이동 횟수' / 0 /;
에서(ss) = 예;
반복하다
nmove = nmove + 1;
to(rp,cp) = sum(m(from,rp,cp), xm.l(m));
LeaperTour(from) = nmove;
에서(r,c) = 에서(r,c);
to('1','1')까지;
'SubTour 제거 무료 슬롯 게임' 표시, leaperTour, SolRep;