mcp11.gms : 확장된 무료 슬롯 게임 문제에 대한 한계 테스트

설명

상상할 수 있는 가장 간단한 무료 슬롯 게임 모델로 시작하십시오:
   f(x) := x-c, x >= 0
   이 모델의 경우 f.lo = c.

c==0일 때 퇴화 사례를 무시하면 다음과 같습니다.
  A) c > 0: 암시
     x = c는 해입니다. f.l == f.lo, f.m = x.l = c
  B) c < 0: 의미
     x = 0은 해입니다. f.l == 0, f.m = x.l = 0, x.m = (-c)

각 사례 A)와 B)에 대해 변수와 방정식의 스케일링을 고려합니다.
총 4가지 경우에 대해.

기고자: Steve Dirkse, 2016년 5월

소형 모델 유형 :무료 슬롯 게임


카테고리 : 무료 슬롯 게임 테스트 라이브러리


메인 파일 : mcp11.gms

$title 확장된 무료 슬롯 게임 문제에 대한 테스트 한계(MCP11,SEQ=696)

$onText
상상할 수 있는 가장 간단한 무료 슬롯 게임 모델로 시작하십시오.
   f(x) := x-c, x >= 0
   이 모델의 경우 f.lo = c.

c==0일 때 퇴화 사례를 무시하면 다음과 같습니다.
  A) c > 0: 암시
     x = c는 해입니다. f.l == f.lo, f.m = x.l = c
  B) c < 0: 의미
     x = 0은 해입니다. f.l == 0, f.m = x.l = 0, x.m = (-c)

각 사례 A)와 B)에 대해 변수와 방정식의 스케일링을 고려합니다.
총 4가지 경우에 대해.

기고자: Steve Dirkse, 2016년 5월
$offText

$설정되지 않은 경우 TESTTOL $set TESTTOL 1e-6
스칼라 tol / %TESTTOL% /;
스칼라 c;
양의 변수 x;
방정식 f,
         fNeg 'f 곱하기 -1';
f.. x =G= c;
fNeg.. -x =L= -c;
모델 m / f.x /;
모델 mNeg / -fNeg.x /;

세트
  케이스 / cpos, cneg /
  값 / 'f.F', 'f.m', 'x.L', 'x.m' /
  ;
매개변수
  unscaled(case,val) '크기 조정이 없는 결과'
  scaledX(case,val) 'x 크기 조정된 결과'
  deltaX(case,val) '크기 조정되지 않음 - scaledX'
  scaledF(case,val) 'f 스케일링 결과'
  deltaF(case,val) '크기 조정되지 않음 - scaledF'
  ;

* 사례 A c > 0
c = 2;
무료 슬롯 게임를 사용하여 m을 해결합니다.
abort$[abs(f.l-c) > tol] 'bad f.l==c', f.l, c;
abort$[abs(f.m-c) > tol] 'bad f.m==c', f.m, c;
abort$[abs(x.l-c) > tol] 'bad x.l==c', x.l, c;
abort$[abs(x.m-0) > tol] 'bad x.m==0', x.m;
unscaled('cpos','f.F') = round(f.L - f.lo, 5);
unscaled('cpos','f.m') = round(f.m, 5);
unscaled('cpos','x.L') = round(x.L, 5);
unscaled('cpos','x.m') = round(x.m, 5);

무료 슬롯 게임를 사용하여 mNeg를 해결합니다.
abort$[abs(fNeg.l+f.l) > tol] 'bad fNeg.l ==-f.l', fNeg.l,f.l;
abort$[abs(fNeg.up+f.lo) > tol] 'bad fNeg.up==-f.lo', fNeg.up,f.lo;
abort$[abs(fNeg.lo+f.up) > tol] 'bad fNeg.lo==-f.up', fNeg.lo,f.up;

* 사례 B c < 0
c = -4;
무료 슬롯 게임를 사용하여 m을 해결합니다.
abort$[abs(f.l-0) > tol] 'bad f.l==0', f.l;
abort$[abs(f.m-0) > tol] 'bad f.m==0', f.m;
abort$[abs(x.l-0) > tol] '나쁜 x.l==0', x.l;
abort$[abs(x.m+c) > tol] 'bad x.m==-c', x.m, c;
unscaled('cneg','f.F') = round(f.L - f.lo, 5);
unscaled('cneg','f.m') = round(f.m, 5);
unscaled('cneg','x.L') = round(x.L, 5);
unscaled('cneg','x.m') = round(x.m, 5);

무료 슬롯 게임를 사용하여 mNeg를 해결합니다.
abort$[abs(fNeg.l+f.l) > tol] 'bad fNeg.l ==-f.l', fNeg.l,f.l;
abort$[abs(fNeg.up+f.lo) > tol] 'bad fNeg.up==-f.lo', fNeg.up,f.lo;
abort$[abs(fNeg.lo+f.up) > tol] 'bad fNeg.lo==-f.up', fNeg.lo,f.up;

m.scaleopt = 1;
mNeg.scaleopt = 1;

* ========== 행 크기 조정 ==========
f.척도 = 10;
fNeg.scale = 10;
* 사례 A c > 0
c = 2;
무료 슬롯 게임를 사용하여 m을 해결합니다.
scaledF('cpos','f.F') = round(f.L - f.lo, 5);
scaledF('cpos','f.m') = round(f.m, 5);
scaledF('cpos','x.L') = round(x.L, 5);
scaledF('cpos','x.m') = round(x.m, 5);

무료 슬롯 게임를 사용하여 mNeg를 해결합니다.
abort$[abs(fNeg.l+f.l) > tol] 'bad fNeg.l ==-f.l', fNeg.l,f.l;
abort$[abs(fNeg.up+f.lo) > tol] 'bad fNeg.up==-f.lo', fNeg.up,f.lo;
abort$[abs(fNeg.lo+f.up) > tol] 'bad fNeg.lo==-f.up', fNeg.lo,f.up;

* 사례 B c < 0
c = -4;
무료 슬롯 게임를 사용하여 m을 해결합니다.
scaledF('cneg','f.F') = round(f.L - f.lo, 5);
scaledF('cneg','f.m') = round(f.m, 5);
scaledF('cneg','x.L') = round(x.L, 5);
scaledF('cneg','x.m') = round(x.m, 5);

무료 슬롯 게임를 사용하여 mNeg를 해결합니다.
abort$[abs(fNeg.l+f.l) > tol] 'bad fNeg.l ==-f.l', fNeg.l,f.l;
abort$[abs(fNeg.up+f.lo) > tol] 'bad fNeg.up==-f.lo', fNeg.up,f.lo;
abort$[abs(fNeg.lo+f.up) > tol] 'bad fNeg.lo==-f.up', fNeg.lo,f.up;

f.scale = 1;
fNeg.scale = 1;

* ========== 열 크기 조정 ==========
x.규모 = 100;
* 사례 A c > 0
c = 2;
무료 슬롯 게임를 사용하여 m을 해결합니다.
scaledX('cpos','f.F') = round(f.L - f.lo, 5);
scaledX('cpos','f.m') = round(f.m, 5);
scaledX('cpos','x.L') = round(x.L, 5);
scaledX('cpos','x.m') = round(x.m, 5);

무료 슬롯 게임를 사용하여 mNeg를 해결합니다.
abort$[abs(fNeg.l+f.l) > tol] 'bad fNeg.l ==-f.l', fNeg.l,f.l;
abort$[abs(fNeg.up+f.lo) > tol] 'bad fNeg.up==-f.lo', fNeg.up,f.lo;
abort$[abs(fNeg.lo+f.up) > tol] 'bad fNeg.lo==-f.up', fNeg.lo,f.up;

* 사례 B c < 0
c = -4;
무료 슬롯 게임를 사용하여 m을 해결합니다.
scaledX('cneg','f.F') = round(f.L - f.lo, 5);
scaledX('cneg','f.m') = round(f.m, 5);
scaledX('cneg','x.L') = round(x.L, 5);
scaledX('cneg','x.m') = round(x.m, 5);

무료 슬롯 게임를 사용하여 mNeg를 해결합니다.
abort$[abs(fNeg.l+f.l) > tol] 'bad fNeg.l ==-f.l', fNeg.l,f.l;
abort$[abs(fNeg.up+f.lo) > tol] 'bad fNeg.up==-f.lo', fNeg.up,f.lo;
abort$[abs(fNeg.lo+f.up) > tol] 'bad fNeg.lo==-f.up', fNeg.lo,f.up;

x.규모 = 1;

deltaX(case,val) = unscaled(case,val) - scaledX(case,val);
deltaF(case,val) = unscaled(case,val) - scaledF(case,val);
deltaX(case,val) = round(deltaX(case,val), 5);
deltaF(case,val) = round(deltaF(case,val), 5);

실행_언로드 'rrrr';

abort$((card(deltaX) + card(deltaF)) > 0) '** 실패, 자세한 내용은 rrrr.gdx 파일을 확인하세요 **';