generate.gms : 무작위이지만 구조화된 GDX 파일을 생성

설명

이 모델은 대규모 다차원 희소 생성을 위한 몇 가지 수단을 제공합니다.
기호를 작성하여 GDX 파일에 덤프합니다.

먼저 일부 도메인 세트는 i 10 j 20 일부 쌍을 기반으로 생성됩니다(예:
i0 /i1*i10/, i1 /j1*j20/), 일부 단일 숫자 5 10 20(예: i0 /1*5/,
i1 /1*10/, i2 /1*20/) 또는 최소 정보 3 50(예: i0 /1*50/, i1 /1*50/,
i2 /1*50/) mkdom $batInclude를 통해.

다음으로, 인수 기호 유형(매개변수, 집합, ...)이 있는 $batInclude mksym,
기호 이름, 기호 차원, 데이터 밀도(0<=density<=1) 및 추가 항목
논쟁. 기호 유형이 설정된 경우 추가 인수는 무작위인지 여부를 나타냅니다.
요소 텍스트는 설정된 레코드와 함께 저장되어야 합니다. 다른 모든 기호 유형의 경우
추가 인수는 임의의 값이나 고정 값(값
추가 인수의.

파일 하단에는 생성 방법을 보여주는 세 가지 사례가 제공됩니다.
다른 GDX 파일.

기고자: Michael Bussieck, 2022년 12월

소형 모델 유형 :슬롯 게임


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


메인 파일 : generate.gms

$title '임의이지만 구조화된 GDX 파일 생성' (생성,SEQ=63)

$onText
이 모델은 대규모 다차원 희소를 생성하는 몇 가지 수단을 제공합니다. 
기호를 작성하여 GDX 파일에 덤프합니다. 

먼저 일부 도메인 세트는 i 10 j 20 일부 쌍을 기반으로 생성됩니다(예: 
i0 /i1*i10/, i1 /j1*j20/), 일부 단일 숫자 5 10 20(예: i0 /1*5/, 
i1 /1*10/, i2 /1*20/) 또는 최소 정보 3 50(예: i0 /1*50/, i1 /1*50/,
i2 /1*50/) mkdom $batInclude를 통해.

다음으로, 인수 기호 유형(매개변수, 집합, ...)이 있는 $batInclude mksym, 
기호 이름, 기호 차원, 데이터 밀도(0<=density<=1) 및 추가 항목 
논쟁. 기호 유형이 설정된 경우 추가 인수는 무작위인지 여부를 나타냅니다.
요소 텍스트는 설정된 레코드와 함께 저장되어야 합니다. 다른 모든 기호 유형의 경우 
추가 인수는 임의의 값이나 고정 값(값 
추가 인수의.

파일 하단에는 생성 방법을 보여주는 세 가지 사례가 제공됩니다. 
다른 GDX 파일.

기고자: Michael Bussieck, 2022년 12월

$offText

$onEchoV > mkdom.gms
* mkdom 유형 dom0 dom1 dom2 ...의 구문 | 은돔 은딤
* type=pair domN을 문자열과 숫자의 쌍으로 지정하면 "%string%1*%string%%number%"가 생성됩니다.
* 문자열은 모든 DOM에서 고유해야 합니다.
* type=single domN을 숫자로 지정하면 "1*%number%"가 생성됩니다.
* type=min ndom 인덱스 도메인 i0 ... i(ndom-1)을 각각 레이블 1*%ndim%로 지정
$세트유형% 1
$shift
$setdimtmp 0
$set 카드 1
$setGlobal 디마드 1
$setGlobal 딤렌 
$label loopdim
$ifThenI %type%==쌍
$set char "%1" 세트 번호 %2
i%dimtmp% / %char%1*%char%%2 / 설정;
$eval 카드 %cardi%+카드(i%dimtmp%)
$shift 시프트
$elseIfI %type%==싱글
i%dimtmp% / 1*%1 / 설정;
$shift
$elseIfI %type%==min
i%dimtmp% / 1*%2 / 설정;
$ifE %dimtmp%+1=%1 $shift 시프트
$else
$error 알 수 없는 유형=%type%
$endIf
$setGlobal Dimadd %dimadd%,%cardi%
$eval 카드X 카드(i%dimtmp%)
$if not x%dimlen%==x $setGlobal Dimlen %dimlen%,%cardX%
$if x%dimlen%==x $setGlobal 희미한 %cardX%
$eval dimtmp %dimtmp%+1
$if not x%1==x $goTo loopdim
$gdxOut dom.gdx
$언로드
$gdx아웃
$offEcho

$onEchoV > mksym.gms
* 구문 mksym 유형 이름 희미 밀도 havetext
* type=set: "havetext" <> '' 또는 0인 경우 일부 요소 텍스트를 작성하고, 그렇지 않으면 요소 텍스트가 비어 있게 됩니다.
* type<>set:for "havetext" <> '' 또는 0이면 저장할 숫자 값으로 "havetext"를 사용합니다(var 및 equ의 경우 L에 있음).
* 그렇지 않으면 임의의 숫자 값을 생성합니다. 
$setArgs Symtype Symname 희미한 밀도 Havetext
$if x%havetext%==x $setLocal havetext 0

* 선언
$ifThen.domloop %dim%==0
%symtype% %symname% '%symname%의 텍스트';
$else.domloop
$set 돔 i0
$set 딤티프 1
$라벨 루프1
$if.idxloop %dimtmp%==%dim% $goTo done1
$세트 돔 %dom%,i%dimtmp%
$eval dimtmp %dimtmp%+1 
$goTo 루프1
$라벨 완료1
%symtype% %symname%(%dom%) '%symname%에 대한 텍스트';
$endIf.domloop
* 정의
$ifThen.domloop %dim%==0
$if %havetext% == 0 $eval rvalue 균일(1e-9,1)
$if not %havetext% == 0 $set rvalue %havetext%
$ifI.symtype %symtype%==매개변수 스칼라 %symname% / %rvalue% /;
$ifI.symtype은 %symtype%==매개변수 %symtype% %symname% / L %rvalue% /;
$else.domloop
$onEmbeddedCode 파이썬:
numpy를 np로 가져오기
itertool 가져오기
슬롯 게임core.gdx를 gdx로 가져오기
슬롯 게임core.numpy를 gnp로 가져오기
수입 차단
무작위로 가져오기
문자열 가져오기 ascii_lowercase, 숫자에서
수입 시간

def cartesian_product(*배열):
    la = len(배열)
    dtype = np.result_type(*배열)
    arr = np.empty((la, *map(len, 배열)), dtype=dtype)
    idx = 슬라이스(없음), *itertools.repeat(없음, la)
    i의 경우 열거(배열)의 경우:
        arr[i, ...] = a[idx[: la - i]]
    arr.reshape(la, -1).T를 반환합니다.

system_directory = r'%슬롯 게임sysdir% '.rstrip()
희미한 추가 = [%dimadd%]
희미한_렌 = [%dimlen%]
stype = '설정': gdx.GMS_DT_SET, '매개변수': gdx.GMS_DT_PAR, '변수': gdx.GMS_DT_VAR, '방정식': gdx.GMS_DT_EQU