Naar inhoud

Driebanden Solver-Dataset — Open Carambole-Positiedata

100 posities; 249 modelgeldige resultaten en 151 lege/verworpen slots, met manifest en gratis JSON.

Auteur: Setviva Engineering 500 woorden 3 min leestijd

Versioneerde simulatordataset met 100 posities, 249 modelgeldige resultaten en 151 lege of verworpen slots (400 beoordeeld). Afkomstig uit een geversioneerde deterministische physics-cache; geen successtudie aan een echte tafel.

100
posities
249
geldige solverresultaten
151
lege of afgewezen resultaatplaatsen
400
beoordeelde resultaatslots
50
driebanden
50
vrij spel

Methodologie

Het gepubliceerde bestand wordt uit de versiegebonden solvercache gemaakt. Engineprofiel, bronfingerprint, aantallen en SHA-256 worden vastgelegd voor onafhankelijke controle. Een resultaat is uitsluitend een simulatoruitkomst en geen kans op succes aan een echte tafel.

Simulatordata met versie

Enginecontract
3ball-carom-match-v2 / physics 2.0.0 / solver 4.2.0
Dataset-SHA-256
256a8ec7e7e9a66d907bd43f5fdd6b87628dc067fd9621f2d2ebd2472c3e43ed
geldige solverresultaten
249
lege of afgewezen resultaatplaatsen
151
Beoordelingsstatus
machine-assisted-reviewed

Manifest downloaden

Veldwoordenboek

position: cueIdx, mode, firstIdx, balls, shots · ball: color, p.x, p.y · shots[]: shot {angle, power, sideSpin, topSpin}, label, length, margin, pct, tol, perturbPct, cushions.

Openbare downloads controleren

De controle toetst bestandsintegriteit en aantallen. Ze reproduceert de fysica-engine niet, valideert geen stoot onafhankelijk en bewijst geen nauwkeurigheid op een echte tafel. De volledige generatieomgeving wordt niet openbaar verspreid.

Sla de onderstaande tekst op als verify_3ball.py en voer hem uit met Python 3. Alleen de standaardbibliotheek en openbare JSON van 3ball.app zijn nodig; geen account of projectkopie.

import hashlib, json, urllib.request

BASE = 'https://3ball.app/'
ALLOWED = {'data/solutions_cache.json', 'data/solutions_cache_v3.json'}
def download(path):
    with urllib.request.urlopen(BASE + path, timeout=30) as response:
        return response.read(2_000_001)

manifest = json.loads(download('data/research-manifest.json'))
for key in ('source', 'portfolioBeta'):
    record = manifest if key == 'source' else manifest[key]
    source = record['source']
    assert source['path'] in ALLOWED, 'Unexpected dataset path'
    raw = download(source['path'])
    assert len(raw) == source['bytes'], 'File size mismatch'
    assert hashlib.sha256(raw).hexdigest() == source['sha256'], 'Hash mismatch'
    data = json.loads(raw)
    positions = list(data['positions'].values())
    assert len(positions) == record['counts']['positions'], 'Position count mismatch'
    if key == 'source':
        shots = [s for p in positions for s in p['shots']]
        assert sum(s is not None for s in shots) == record['counts']['validShots']
        assert sum(s is None for s in shots) == record['counts']['rejectedSlots']
    else:
        continuations = list(data['continuations'].values())
        assert len(continuations) == record['counts']['continuations']
        solutions = [s for p in positions + continuations for s in p['solutions']]
        assert sum(s is not None for s in solutions) == record['counts']['solutions']
    print(source['path'], 'OK', record['counts'])

Reikwijdte en beperkingen

Dit is een deterministische simulatordataset, geen succesonderzoek aan een echte tafel. De cache gebruikt het bevroren V2-profiel. Physics V3 wacht nog op onafhankelijke meting. Marge en robuustheid zijn modeldiagnoses, geen echte kansen.

Licentie en privacy

De download bevat alleen berekende tafelcoördinaten en solveruitvoer; geen foto’s, account-ID’s, vrije tekst of persoonsgegevens. Licentie CC BY 4.0.

Voorbeeldposities

PositieModusBallenSolver-stotenBeste marge
3cushion::white::r2.130,0.710|w0.710,0.528|y0.710,0.710driebanden331.15
freecarom::white::r2.130,0.710|w0.710,0.528|y0.710,0.710vrij spel311.32
3cushion::yellow::r2.130,0.710|w0.710,0.528|y0.710,0.710driebanden310.94
freecarom::yellow::r2.130,0.710|w0.710,0.528|y0.710,0.710vrij spel311.36
3cushion::white::r2.550,0.500|w0.300,0.300|y2.500,1.100driebanden340.28
freecarom::white::r2.550,0.500|w0.300,0.300|y2.500,1.100vrij spel340.50
3cushion::yellow::r2.550,0.500|w0.300,0.300|y2.500,1.100driebanden320.97
freecarom::yellow::r2.550,0.500|w0.300,0.300|y2.500,1.100vrij spel342.13
3cushion::white::r0.550,0.300|w1.420,0.710|y1.950,1.100driebanden311.47
freecarom::white::r0.550,0.300|w1.420,0.710|y1.950,1.100vrij spel321.50
3cushion::yellow::r0.550,0.300|w1.420,0.710|y1.950,1.100driebanden310.24
freecarom::yellow::r0.550,0.300|w1.420,0.710|y1.950,1.100vrij spel320.92

Download de volledige dataset

De volledige machineleesbare dataset is gratis te gebruiken met bronvermelding.

JSON downloaden

Hoe te gebruiken

Plaats een positie met de voorbeeldcoördinaten en de identiteit van de speelbal. Het bevroren V2-resultaat kan verschillen van een actuele V3-herhaling; noteer de engineversie bij vergelijking.

Open de trainer

Plaats een positie met de voorbeeldcoördinaten en de identiteit van de speelbal. Het bevroren V2-resultaat kan verschillen van een actuele V3-herhaling; noteer de engineversie bij vergelijking.

Open de trainer →