Comprehensive Luck vs Skill Study Across All Warp Factors
Publication-Quality Experimental Design
Goal: Quantify skill ceiling degradation across domino set sizes (Warp 1–18+) and fleet sizes (2–maxFleet) with statistical rigor suitable for peer-reviewed publication.
1. Experimental Design
1.1 Independent Variables
Factor 1: Warp Factor (Domino Set Size)
- W1 (double-blank, 1 tile) — degenerate baseline
- W3 (double-three, 10 tiles) — minimal viable
- W6 (double-six, 28 tiles) — “standard dominoes”
- W9 (double-nine, 55 tiles)
- W12 (double-twelve, 91 tiles) — IWGF rated
- W15 (double-fifteen, 136 tiles)
- W18 (double-eighteen, 190 tiles)
- (Optional: W21, W24 if engine supports)
Factor 2: Fleet Size (Player Count)
- Each Warp Factor: 2 players → maxFleet (per deal rules)
- W1-W3: 2p only (insufficient tiles)
- W6: 2–4 players
- W9: 2–6 players
- W12: 2–8 players (official maximum)
- W15: 2–10 players
- W18: 2–18 players (theoretical maximum)
Factor 3: Objective
- Points (primary analysis)
- Go-out (secondary, if resources permit)
1.2 Dependent Variables (Metrics)
Primary Metrics (per-game aggregates):
avgLegalMoves— branching factoravgUniqueTrains— train availabilityavgConstrainedTileFraction— single-train constraint %avgUniquePips— hand diversityavgMaxCluster— pip clustering abilityavgHandEntropy— Shannon entropy (bits)avgMoveValueSpread— best - worst move pipsavgNearOptimalFraction— % moves within 90% of bestavgOwnTrailPlayRate— strategic planning %avgShieldsDownRate— blocking frequency %
Derived Metrics:
- Skill Index (0-4): Count of indicators exceeding thresholds
- High constraints (>50%)
- Low entropy (<3.0 bits)
- Wide spread (>15 pips)
- High own-trail (>40%)
Skill Sensitivity (validation):
- Commander vs Ensign win rate delta (Δ from 1/N baseline)
1.3 Sample Sizes (Publication Standards)
Per configuration (Warp factor × fleet size × objective):
- Metrics collection: 500 games (sufficient for stable aggregates)
- Skill sensitivity: 1000 games (detect ≥3pp win rate differences with α=0.05, power=0.80)
Estimated total games:
- W1-W3: 2 configs × 500 = 1,000
- W6: 3 configs × 500 = 1,500
- W9: 5 configs × 500 = 2,500
- W12: 7 configs × 500 = 3,500
- W15: 9 configs × 500 = 4,500
- W18: 17 configs × 500 = 8,500
- Total (points only): ~22,000 games
- With go-out: ~44,000 games
Skill sensitivity subset (10 key configs × 1000g): 10,000 games
Grand total: ~54,000 games for full study
2. Hypotheses
H1: Monotonic Skill Degradation with Set Size
At fixed fleet size (e.g., 4p), skill index decreases monotonically from W6 → W18.
Prediction:
- W6 @ 4p: Skill index = 4/4
- W9 @ 4p: 3-4/4
- W12 @ 4p: 3-4/4 (empirical baseline)
- W15 @ 4p: 2-3/4
- W18 @ 4p: 0-2/4
H2: Monotonic Skill Degradation with Fleet Size
At fixed Warp factor (e.g., W12), skill index decreases monotonically from 2p → maxFleet.
Prediction (W12):
- 2p: 4/4
- 4p: 3-4/4
- 6p: 2-3/4
- 8p: 0-2/4
H3: Interaction Effect
Skill degradation accelerates with both factors: W18 @ 18p is purely luck-dominated (0/4), while W6 @ 2p is maximally skill-dominated (4/4).
H4: Skill Sensitivity Correlation
Skill index (0-4) correlates strongly (r > 0.7) with Commander win rate delta (% above 1/N baseline).
Prediction:
- 4/4 configs: Δ ≥ +15pp
- 2/4 configs: Δ ≈ +5-10pp
- 0/4 configs: Δ < +3pp
H5: W9 vs W12
W9 @ 4p has equal or higher skill index than W12 @ 4p (smaller sets are tighter games).
3. Experimental Protocol
3.1 Infrastructure Requirements
Engine modifications:
- ✅ Metrics collection already implemented (
luck-skill-metrics.ts) - ✅ Self-play harness supports arbitrary maxPip (
playSelfPlayGame) - ⚠️ Need multi-Warp-factor Omega models (or use Commander heuristics)
- ⚠️ Need deal rules for W1-W3, W15, W18+ (hand sizes)
Decision: Use Commander heuristics (not Omega) for all Warp factors. This:
- Ensures consistent policy across all sets
- Avoids training 7 separate Omega models (expensive)
- Tests skill ceiling of the game, not AI training difficulty
Commander suitability: Commander heuristics (pip dump, trail pressure) transfer reasonably across Warp factors—the analysis tests game structure, not superhuman play.
3.2 Implementation Steps
Step 1: Extend Deal Rules
Add to libs/engine/src/lib/constants/setup.ts:
export function getHandSize(maxPip: number, playerCount: number): number {
// Standard multi-trail hand sizing across all Warp factors
if (playerCount <= 4) return 15;
if (playerCount <= 6) return 12;
if (playerCount <= 8) return 10;
// Extended for large sets
if (playerCount <= 12) return 8;
return 6; // 13+ players (W18 only)
}
export function getMaxFleetSize(maxPip: number): number {
const tiles = ((maxPip + 1) * (maxPip + 2)) / 2;
if (maxPip <= 3) return 2; // Not enough tiles
if (maxPip <= 6) return 4;
if (maxPip <= 9) return 6;
if (maxPip <= 12) return 8;
if (maxPip <= 15) return 10;
return Math.min(18, Math.floor(tiles / 6)); // At least 6 tiles/hand
}
Step 2: Batch Collection Script
Create tools/nn/collect-luck-skill-comprehensive.ts:
import { writeFileSync } from 'node:fs';
import { benchOmegaVsCommander } from '../../libs/engine/src/lib/ai/bench-omega.ts';
import { createWarpAiPlayer } from '../../libs/engine/src/lib/ai/create-warp-ai.ts';
import { runSelfPlayMatch } from '../../libs/engine/src/lib/ai/self-play.ts';
import { getMaxFleetSize } from '../../libs/engine/src/lib/constants/setup.ts';
const WARP_FACTORS = [3, 6, 9, 12, 15, 18];
const GAMES_PER_CONFIG = 500;
const OBJECTIVE = 'points';
const results = [];
for (const maxPip of WARP_FACTORS) {
const maxFleet = getMaxFleetSize(maxPip);
for (let playerCount = 2; playerCount <= maxFleet; playerCount++) {
console.error(`\n=== Warp ${maxPip}, ${playerCount}p ===`);
// Use Commander self-play with metrics
const seats = Array.from({ length: playerCount }, (_, i) => ({
id: String.fromCharCode(97 + i),
displayName: `Commander-${i}`,
player: createWarpAiPlayer({
skill: getWarpSkillProfile('commander', OBJECTIVE, playerCount),
objective: OBJECTIVE,
lookahead: resolveWarpLookahead('commander', OBJECTIVE, playerCount),
rng: mulberry32(9001 + i),
}),
}));
const result = runSelfPlayMatch(
(gameIndex) => seats,
{
games: GAMES_PER_CONFIG,
seed: 9001,
objective: OBJECTIVE,
maxPip,
collectMetrics: true, // <<< KEY FLAG
}
);
// Aggregate metrics across games
const gameMetrics = result.games
.map(g => g.metrics)
.filter(Boolean);
const summary = summarizeLuckSkillMetrics(
gameMetrics,
playerCount,
maxPip,
OBJECTIVE
);
results.push({
maxPip,
playerCount,
objective: OBJECTIVE,
games: GAMES_PER_CONFIG,
...summary,
});
console.error(` Skill index: ${computeSkillIndex(summary)}/4`);
}
}
writeFileSync(
'tools/nn/data/luck-skill-comprehensive.json',
JSON.stringify(results, null, 2)
);
console.error('\n✓ Collection complete. Results saved.');
Step 3: Skill Sensitivity Validation
Create tools/nn/validate-skill-sensitivity.ts:
// For key configs, run Commander vs Ensign
const KEY_CONFIGS = [
{ maxPip: 6, playerCount: 4 },
{ maxPip: 9, playerCount: 4 },
{ maxPip: 12, playerCount: 4 },
{ maxPip: 12, playerCount: 8 },
{ maxPip: 15, playerCount: 4 },
{ maxPip: 18, playerCount: 4 },
{ maxPip: 18, playerCount: 18 },
];
const SENSITIVITY_GAMES = 1000;
for (const config of KEY_CONFIGS) {
// Run Commander vs Ensign (seats rotated)
// Measure win rate delta from 1/N baseline
// Save to tools/nn/data/skill-sensitivity.json
}
3.3 Compute Requirements
Single-threaded estimates:
- W12 @ 4p: ~100ms/game
- Full study: 54,000 games × 100ms = 5,400s = 1.5 hours
With parallelization (15 workers):
- ~6-10 minutes for full study
Storage:
- Per-game metrics: ~2KB/game × 54,000 = 108MB raw
- Aggregated results: ~50KB JSON
4. Analysis Plan
4.1 Statistical Tests
H1 (monotonic set size):
- Spearman rank correlation: Warp factor vs skill index (at 4p)
- Expected: ρ < -0.8, p < 0.01
H2 (monotonic fleet size):
- Spearman rank correlation: fleet size vs skill index (at W12)
- Expected: ρ < -0.9, p < 0.01
H3 (interaction):
- 2-way ANOVA: Warp factor × fleet size → skill index
- Expected: significant interaction term F > 10, p < 0.001
H4 (validation):
- Pearson correlation: skill index vs Commander Δ win rate
- Expected: r > 0.7, p < 0.01
H5 (W9 vs W12):
- Paired t-test on individual metrics at 4p
- Bonferroni correction: α = 0.05/10 = 0.005
4.2 Visualizations (for paper)
Figure 1: Heatmap — Skill index (0-4) by Warp factor (rows) × fleet size (cols)
- Color scale: red (0) → yellow (2) → green (4)
- Diagonal degradation pattern expected
Figure 2: Line plot — Each metric (10 lines) vs Warp factor at 4p
- Shows which specific metrics degrade first
Figure 3: Scatter plot — Skill index vs Commander win Δ (validation)
- Each point = one config; trendline with 95% CI
Figure 4: Small multiples — W6/W9/W12/W15/W18 skill index vs fleet size
- Shows fleet degradation rate differs by Warp factor
Figure 5: Box plots — Distribution of hand entropy across Warp factors
- Demonstrates variance increase with set size
4.3 Tables (LaTeX for paper)
Table 1: Full results matrix (supplement)
- All 42+ configs, all 10 metrics, skill index
Table 2: Key comparisons (main text)
- W6/W9/W12/W15/W18 @ 4p only, condensed metrics
Table 3: Skill sensitivity validation (main text)
- 7 key configs, Commander vs Ensign Δ, correlation with skill index
5. Execution Plan
Phase 1: Infrastructure (1-2 days)
- Extend deal rules for all Warp factors
- Update
playSelfPlayGameto acceptmaxPipparameter - Test W3/W6/W15/W18 self-play completes without crashes
- Verify metrics collection works at W18 @ 18p
Phase 2: Pilot Study (1 day)
- Run 100 games each at W6/W9/W12/W15/W18 @ 4p
- Verify metrics show expected trends (W18 worse than W12)
- Validate JSON output format
- Estimate compute time for full study
Phase 3: Full Collection (1 day, parallelized)
- Run comprehensive collection script (22,000 games)
- Monitor for crashes/hangs
- Save intermediate results every 1000 games
Phase 4: Skill Sensitivity (1 day)
- Run 10 key configs @ 1000 games Commander vs Ensign
- Extract win rate deltas
- Correlate with skill index
Phase 5: Analysis (2-3 days)
- Statistical tests (H1-H5)
- Generate all figures
- Build LaTeX tables
- Write results narrative
Phase 6: Integration (1 day)
- Draft Section 8 for paper
- Add figures to manuscript
- Update abstract/contributions
- Proofread
Total timeline: 7-10 days from start to paper-ready
6. Publication Standards
6.1 Statistical Rigor
- Report effect sizes (Cohen’s d, η²) not just p-values
- Bonferroni correction for multiple comparisons
- 95% confidence intervals on all point estimates
- Power analysis confirms N=500/1000 sufficient
6.2 Reproducibility
- Open data: publish
luck-skill-comprehensive.json - Open code:
collect-luck-skill-comprehensive.tsin repo - Seed documented: 9001 for all runs
- Engine version tagged:
warp12-engine@0.4.25
6.3 Validation
- Skill sensitivity confirms metric validity (H4)
- Cross-objective (go-out) as robustness check
- Ablation: repeat W12 @ 4p with Omega vs Commander (should match)
6.4 Limitations Section
- Commander heuristics not superhuman
- No human player data (engine-only)
- Points objective primary (go-out is supplementary)
- Focuses on IWGF Official Warp rules (no house-rule sweep)
7. Expected Outcomes
7.1 Novel Contributions
- First comprehensive luck/skill study across domino set sizes
- Quantitative validation of IWGF rating policy (W12 only)
- Interaction effect between set size and fleet size (not just linear)
- Skill ceiling validation via AI win rate sensitivity
- Predictive model for untested configs (e.g., W21, W24)
7.2 Practical Impact
- Guides future domino game design (set size sweet spot)
- Informs rating system decisions for other games
- Provides benchmark for evaluating AI training ROI
- Supports casual vs competitive mode separation
7.3 Academic Impact
- Fills gap in imperfect-information game AI literature
- Demonstrates metrics-based skill quantification beyond win rates
- Shows game complexity is multidimensional (not just state space size)
8. Quick Start Commands
Run pilot study:
cd /Volumes/Code/Warp12
yarn build:engine
# Extend deal rules first (manual edit)
# Then:
node --loader tsx tools/nn/collect-luck-skill-pilot.ts
Run full study:
COMPREHENSIVE_GAMES=500 \
COMPREHENSIVE_WORKERS=15 \
node --loader tsx tools/nn/collect-luck-skill-comprehensive.ts \
2>&1 | tee tools/nn/data/comprehensive-collection.log
Analyze results:
node --loader tsx tools/nn/analyze-luck-skill.ts
# Outputs: figures/, tables/, stats-summary.md
9. Timeline to Submission
Assuming 2-week sprint:
Week 1:
- Day 1-2: Infrastructure + pilot
- Day 3-4: Full collection
- Day 5: Skill sensitivity validation
Week 2:
- Day 6-7: Statistical analysis
- Day 8-9: Figures + tables
- Day 10: Write Section 8
- Day 11-12: Integrate into paper, proofread
- Day 13-14: Internal review, final polish
Submission-ready: 14 days from start
10. Budget Estimate
Compute:
- Free (runs on your M4 Max)
Researcher time:
- 2 weeks full-time or 4 weeks part-time
Expected output:
- 1 journal-quality section (~10 pages)
- 5 publication-quality figures
- 3 data tables
- 1 open dataset (~100MB)
- Code artifact for reproducibility
ROI: High — this would be a landmark empirical study in domino game AI, potentially citation-worthy on its own.