설명
확률적 주사위 - 비전이적 관계의 예.
우리는 각 면에 정수가 있는 주사위 세트를 디자인하고 싶습니다.
평균적으로 dice1이 dice2를 이기고 평균적으로 dice2가 이깁니다.
dice3 등이 있지만 diceN은 dice1을 이겨야 합니다.
MIP 코드는 이러한 문제에 대해 매우 비정상적으로 동작하며 약간의
재구성은 성능에 극적인 변화를 가져올 수 있습니다.
예를 들어 변수 fval을 정수로 만들면 성능이 바뀔 수 있습니다.
그래서 우리는 fval을 비워두고 두 번째 해결을 수행하여 정수 값을 얻습니다.
Gardner, M, Scientific American.
Robert A Bosch, Mindsharpener, Optima, MP Society 뉴스레터, Vol 70,
2003년 6월, 8-9페이지
Robert A Bosch, 단색 사각형, Optima, MP Society 뉴스레터,
71권, 2004년 3월, 6-7페이지
키워드: 혼합 정수 선형 계획법, 주사위 설계, 수학,
비전이적 주사위
대형 모델 유형 :MIP
카테고리 : 슬롯 게임 모델 라이브러리
메인 파일 : 슬롯 게임gms
$title 비추이적 주사위 디자인(슬롯 게임SEQ=176)
$onText
확률적 주사위 - 비전이적 관계의 예입니다.
우리는 각 면에 정수가 있는 주사위 세트를 디자인하고 싶습니다.
평균적으로 dice1이 dice2를 이기고 평균적으로 dice2가 이깁니다.
dice3 등이 있지만 diceN은 dice1을 이겨야 합니다.
MIP 코드는 이러한 문제에 대해 매우 비정상적으로 동작하며 약간의
재구성은 성능에 극적인 변화를 가져올 수 있습니다.
예를 들어 변수 fval을 정수로 만들면 성능이 바뀔 수 있습니다.
그래서 우리는 fval을 비워두고 두 번째 해결을 수행하여 정수 값을 얻습니다.
Gardner, M, Scientific American.
Robert A Bosch, Mindsharpener, Optima, MP Society 뉴스레터, Vol 70,
2003년 6월, 8-9페이지
Robert A Bosch, 단색 사각형, Optima, MP Society 뉴스레터,
71권, 2004년 3월, 6-7페이지
키워드: 혼합 정수 선형 계획법, 주사위 설계, 수학,
비전이적 주사위
$offText
세트
f '주사위 위의 얼굴' / face1*face6 /
주사위 '주사위 개수' / dice1*dice3 /;
스칼라
flo '최저 액면가' / 1 /
ㅋㅋㅋ '최고액면가'
wn '승리 필요 - 가능한 한계';
fup = 카드(주사위)*카드(f);
wn = 바닥(0.5*sqr(카드(f))) + 1;
별칭(f,fp), (주사위,dicep);
변수
wnx '승리 횟수'
fval(슬롯 게임f) '주사위의 액면가 - 분수일 수 있음'
comp(슬롯 게임f,fp) '1은 f가 fp를 이긴다는 것을 의미합니다.';
바이너리 변수 comp;
fval.lo(주사위,f) = flo;
fval.up(슬롯 게임f) = fup;
fval.fx("dice1","face1") = flo;
방정식
eq1(슬롯 게임) '승리 횟수 계산'
eq3(슬롯 게임f,fp) '비추이 관계 정의'
eq4(슬롯 게임f) '단일 주사위에 대해 서로 다른 액면가';
eq1(주사위).. sum((f,fp), comp(슬롯 게임f,fp)) =e= wnx;
eq3(주사위,f,fp).. fval(주사위,f) + (fup - flo + 1)*(1 - comp(슬롯 게임f,fp)) =g= fval(슬롯 게임++1,fp) + 1;
eq4(주사위,f-1).. fval(주사위,f - 1) + 1 =l= fval(주사위,f);
모델 xdice / 모두 /;
$if set nosolve $exit
xdice.resLim = 30;
* 이 공식이 분수 fval의 해를 허용하는지 의심된다면,
* 아래 변수 수정의 주석 처리를 제거하세요.
* fval.fx("dice3","face1") = 3.75;
mip max wnx를 사용하여 xdice를 해결합니다.
abort$[xdice.solvestat <> %solveStat.normalCompletion%] "예기치 않은 솔버 상태";
중단$[(xdice.modelstat <> %modelStat.optimal%)
and (xdice.modelstat <> %modelStat.integerSolution%)] "예기치 않은 모델 상태";
* 이 문제를 해결한 후 지배 관계는 좋지만 이유가 없습니다.
* fval은 정수여야 합니다. 관련 모델의 두 번째 해석으로 이를 수정할 수 있습니다.
변수 z '액면가의 합';
방정식 zdef;
zdef..sum(주사위,f), fval(주사위,f) =e= z;
모델 Facecomp / zdef, eq3, eq4 /;
comp.fx(주사위,f,fp) = round(comp.l(주사위,f,fp));
rMIP min z를 사용하여 Facecomp를 해결합니다.
abort$[facecomp.solvestat <> %solveStat.normalCompletion%] "예기치 않은 솔버 상태";
abort$[facecomp.modelstat <> %modelStat.optimal%] "예기치 않은 모델 상태";
* 반올림하면 정수 액면가가 제공됩니다.
* 예상 총 승리 수를 얻었는지 확인합니다.
매개변수
fv(슬롯 게임f) '정수 액면가'
win(슬롯 게임f,fp) '액면가를 사용하여 승리를 계산합니다'
winTot(슬롯 게임) '계산된 승리 총계'
;
fv(주사위,f) = round(fval.l(주사위,f));
win(주사위,f,fp) = [fv(주사위,f) >= fv(주사위++1,fp) + 1];
winTot(주사위) = sum(f,fp), win(주사위,f,fp);
abort$[smindice, round(winTot(슬롯 게임) - wnx.L) < 0] '승리는 어디로 갔나요??', winTot, wnx.L;
옵션 fv:0;
wn, wnx.L, fv를 표시합니다.
매개변수 rep1 '다음 상대의 승리 확률';
rep1(주사위,f) = 100*sum(fp, win(주사위,f,fp))/card(f);
rep1(주사위,'기회') = sum(f, rep1(주사위,f))/card(f);
옵션 담당자1:0;
담당자1 표시;