caro5 / shared /dataset /types.ts
Pedro de Carvalho
Add shared checks
ea1fe68
Raw
History Blame Contribute Delete
3.33 kB
import type { GameRules } from '../types.ts'
import type { PuctTranspositionTable } from '../bot/PuctTranspositionTable.ts'
import type { PolicyValueEvaluator } from '../bot/PuctSearch.ts'
export type PlayerColor = 0 | 1
export type Swap2Phase = 'swap2_phase0' | 'swap2_phase1' | 'swap2_phase2' | 'play'
export type Swap2Phase1Decision = 'offer' | 'player1' | 'player2'
export type Swap2ColorDecision = 'player1' | 'player2'
export interface PolicyPlacement {
x: number
y: number
probability: number
}
export interface PolicyTarget {
placements: PolicyPlacement[]
specialActions?: {
choosePlayer1?: number
choosePlayer2?: number
offerTwo?: number
}
}
export interface MctsTarget {
phase: Swap2Phase
moveNumber?: number
actorBotId: string
actorBotParams: Record<string, number | string | boolean>
player: PlayerColor
actorSeat?: PlayerColor
actorColor?: PlayerColor
stoneColor?: PlayerColor
playerToMove?: PlayerColor
selectedMove?: { x: number; y: number }
decision?: Swap2Phase1Decision | Swap2ColorDecision
policyTarget: PolicyTarget
mctsValue: number
temperature: number
}
export interface DatasetMove {
moveNumber: number
x: number
y: number
player: PlayerColor
botId: string
botParams: Record<string, number | string | boolean>
}
export interface DatasetOpeningStone {
moveNumber: number
x: number
y: number
player: PlayerColor
placedByBotId: string
placedByBotParams: Record<string, number | string | boolean>
}
export interface SelfPlayDatasetRecord {
schemaVersion: 1
id: string
seed: number
rules: GameRules & { boardSize: 15; swap2: true; noOverlines: true }
bots: {
openerBotId: string
chooserBotId: string
player1BotId: string
player2BotId: string
}
opening: {
phase1Decision: Swap2Phase1Decision
phase1BotId: string
phase1BotParams: Record<string, number | string | boolean>
phase2Decision: Swap2ColorDecision | null
phase2BotId: string | null
phase2BotParams: Record<string, number | string | boolean> | null
stones: DatasetOpeningStone[]
}
result: 'win' | 'draw'
winner: PlayerColor | null
moveCount: number
moves: DatasetMove[]
mctsOpening: MctsTarget[]
mctsPlay: MctsTarget[]
durationMs: number
createdAt: string
}
export interface PredefinedOpeningStone {
x: number
y: number
player: PlayerColor
}
export type PredefinedOpening = PredefinedOpeningStone[]
export interface OpeningDatasetRecord {
schemaVersion: 3
id: string
seed: number
opening: {
id: string
coordinateSystem: 'center-relative'
stones: PredefinedOpeningStone[]
}
rules: GameRules & { boardSize: 15; swap2: false; noOverlines: true }
bots: {
player1BotId: string
player2BotId: string
}
result: 'win' | 'draw'
winner: PlayerColor | null
moveCount: number
moves: DatasetMove[]
mctsPlay: MctsTarget[]
durationMs: number
createdAt: string
}
export type GeneratedDatasetRecord = SelfPlayDatasetRecord | OpeningDatasetRecord
export interface GenerateDatasetOptions {
games: number
seed: number
startIndex?: number
puctTranspositionTable?: PuctTranspositionTable
puctGeneration?: number
modelEvaluator?: PolicyValueEvaluator
outFile?: string
openerBotId?: string
chooserBotId?: string
openings?: PredefinedOpening[]
}