dicex.gms : 비추이적 주사위 디자인 - 강화됨

설명

Robert A Bosch는 최근 Optima 뉴스레터에서 확장 기능을 제안했습니다.
원래 슬롯 게임(SEQ=176) 모델: 얼굴의 각 숫자가 나타날 수 있습니다.
단 한 번만. 이는 0/1 변수 fmap을 추가하여 공식화되었습니다.
및 방정식 eq4(면에 대한 값 매핑 정의)
및 eq5(이 매핑을 고유하게 만들기 위해). 다음의 중요성에 주목하세요.
방정식 eq1에 '=e='를 입력하고 eq3의 거듭제곱을 입력합니다.

확률적 주사위 - 비전이적 관계의 예입니다.
우리는 각 면에 정수가 있는 주사위 세트를 디자인하고 싶습니다.
평균적으로 dice1이 dice2를 이기고 평균적으로 dice2가 이깁니다.
dice3 등이 있지만 diceN은 dice1을 이겨야 합니다.

대형 모델 유형 :MIP


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


메인 파일 : dicex.gms

$title 비전이적 주사위 디자인 - 강화(DICEX,SEQ=272)

$onText
Robert A Bosch는 최근 Optima 뉴스레터에서 확장 기능을 제안했습니다.
원래 슬롯 게임(SEQ=176) 모델: 얼굴의 각 숫자가 나타날 수 있습니다.
단 한 번만. 이는 0/1 변수 fmap을 추가하여 공식화되었습니다.
및 방정식 eq4(면에 대한 값 매핑 정의)
및 eq5(이 매핑을 고유하게 만들기 위해). 다음의 중요성에 주목하세요.
방정식 eq1에 '=e='를 입력하고 eq3의 거듭제곱을 입력합니다.

확률적 주사위 - 비전이적 관계의 예입니다.
우리는 각 면에 정수가 있는 주사위 세트를 디자인하고 싶습니다.
평균적으로 dice1이 dice2를 이기고 평균적으로 dice2가 이깁니다.
dice3 등이 있지만 diceN은 dice1을 이겨야 합니다.

마틴 가드너(Martin Gardner), 거대한 수학 책, WW Norton, New
요크, 뉴욕, 2001.

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 /
   d '주사위 개수' / dice1*dice3 /;

매개변수
   wn '최소 승리 필요'
   fnum(d,f) '할당된 액면가'
   큰 '빅엠';

wn = 바닥(0.5*sqr(카드(f))) + 1;
fnum(d,f) = 카드(f)*(ord(d) - 1) + ord(f);
빅 = 카드(d)*카드(f);

별칭 (f,fp), (d,dp);

변수
   wnx '승리 횟수'
   fval(d,f) '주사위 값 - 정수가 됩니다'
   comp(d,f,fp) 'f가 fp를 이기면 1'
   fmap(d,f,dp,fp) '주사위 면에 값을 할당합니다';

바이너리 변수 comp, fmap;

fval.lo(d,f) = 1;
fval.up(d,f) = 카드(d)*카드(f);

fval.fx(d,f)$(ord(d) = 1 및 ord(f) = 1) = 1;

방정식
   eq1(d) '승리 횟수 계산'
   eq2(d,f,fp) '비추이 관계 정의'
   eq3(d,f) '단일 주사위에 대한 서로 다른 액면가'
   eq4(d,f) '얼굴에 값 할당'
   eq5(d,f) '얼굴 할당을 고유하게 만듭니다';

eq1(d).. sum((f,fp), comp(d,f,fp)) =e= wnx;

eq2(d,f,fp).. fval(d,f) + big*(1 - comp(d,f,fp)) =g= fval(d++1,fp) + 1;

eq3(d,f-1).. fval(d,f-1) + 1 =l= fval(d,f);

eq4(d,f).. sum((dp,fp), fnum(dp,fp)*fmap(d,f,dp,fp)) =e= fval(d,f);

eq5(dp,fp).. sum((d,f), fmap(d,f,dp,fp)) =e= 1;

모델 diceU '모든 얼굴은 고유합니다' / eq1, eq2, eq3, eq4, eq5 /;

$if set nosolve $exit

옵션 resLim = 100, optCr = 0.0, optCa = 0.99;

wnx를 최대화하는 mip를 사용하여 diceU를 해결합니다.

옵션 fval:0;
wn, fval.l을 표시합니다.

$eval NN 카드(d)*카드(f)

Vals '가능한 액면가' 설정 / 1*%NN% /;

매개변수
   rep1 '다음 상대에게 승리할 확률'
   chk(값)
   fv(d,f) '계산된 액면가';

if(diceU.modelStat = %modelStat.optimal% 또는 diceU.modelStat = %modelStat.integerSolution%,
   rep1(d,f) = 100*sum(fp, comp.l(d,f,fp))/card(f);
   담당자1(d,'기회') = 합계(f, 담당자1(d,f))/카드(f);

   옵션 담당자1:0;
   담당자1 표시;

   fv(d,f) = round(fval.l(d,f));
   abort$(card(fv) <> card(vals)) '일관되지 않는 액면가';

   chk(발) = 1;
   loop((d,f)$fv(d,f), chk(vals)$[ord(vals) = fv(d,f)] = chk(vals) - 1;);
   if(card(chk),execute_unload 'diceDebug';);
   abort$(card(chk)) '고유하지 않은 액면가가 발견되었습니다', chk, fv;
);