Skip to main content

Position Analysis

DoubleCube.gg provides position evaluation and move analysis features.

Evaluators

Heuristic Evaluator

A built-in fast evaluator using traditional backgammon heuristics:

  • Pip count advantage
  • Home board strength
  • Blot exposure
  • Anchor positions
  • Bearing off race

GNU Backgammon Evaluator

Integration with GNU Backgammon for expert-level analysis:

  • World-class neural network evaluation
  • Rollout capability
  • Cube decision analysis

See GNU Backgammon Setup for configuration.

Analysis Features

Position Evaluation

Get win/gammon/backgammon probabilities:

const evaluation = await connection.invoke('AnalyzePosition', gameId, 'heuristic');

console.log('Win probability:', evaluation.winProbability);
console.log('Gammon probability:', evaluation.gammonProbability);
console.log('Backgammon probability:', evaluation.backgammonProbability);

Best Move Analysis

Find the best moves for a position:

const analysis = await connection.invoke('FindBestMoves', gameId, 'gnubg');

analysis.rankedMoves.forEach((move, i) => {
console.log(`${i+1}. ${move.notation} - Equity: ${move.equity}`);
});

Analysis Mode

The analysis board allows free position manipulation:

// Create an analysis session
const sessionId = await connection.invoke('CreateAnalysisSession');

// Set custom dice
await connection.invoke('SetDice', 3, 1);

// Move checkers freely
await connection.invoke('MoveCheckerDirectly', 24, 21);

// Change whose turn
await connection.invoke('SetCurrentPlayer', 'White');

Import/Export Positions

// Export current position
const sgf = await connection.invoke('ExportPosition');

// Import a position
await connection.invoke('ImportPosition', sgfData);

// Export full game with move history
const gameSgf = await connection.invoke('ExportGameSgf');

Game History Replay

Replay completed games move by move:

const history = await connection.invoke('GetGameHistory', gameId);

history.turns.forEach((turn) => {
console.log(`Turn ${turn.turnNumber}:`);
console.log(` Dice: ${turn.die1}, ${turn.die2}`);
turn.moves.forEach(m => console.log(` Move: ${m.from}${m.to}`));
});

Evaluator Selection

Different evaluators suit different needs:

EvaluatorSpeedAccuracyUse Case
HeuristicFastGoodReal-time hints
GNU BackgammonSlowExcellentPost-game analysis

API Reference

AnalyzePosition

AnalyzePosition(gameId: string, evaluatorType?: string): Promise<PositionEvaluation>

FindBestMoves

FindBestMoves(gameId: string, evaluatorType?: string): Promise<BestMovesAnalysis>

GetGameHistory

GetGameHistory(gameId: string): Promise<GameHistory | null>

ParseGameSgf

ParseGameSgf(sgf: string): Promise<GameHistory | null>