Zum Inhalt springen

Dreiband-Solver-Datensatz — Offene Karambol-Positionsdaten

100 Positionen; 249 modellgültige Ergebnisse und 151 leere oder verworfene Plätze mit Manifest und kostenlosem JSON.

Autor: Setviva Engineering 480 Wörter 3 Min. Lesezeit

Versionierter Simulatordatensatz mit 100 Positionen, 249 im Modell gültigen Ergebnissen und 151 leeren oder verworfenen Plätzen (400 geprüft). Grundlage ist ein versionierter deterministischer Physik-Cache, keine Real-Tisch-Erfolgsstudie.

100
Positionen
249
gültige Solver-Ergebnisse
151
leere oder verworfene Ergebnisplätze
400
ausgewertete Ergebnisplätze
50
Dreiband
50
Freie Partie

Methodik

Das veröffentlichte Artefakt wird aus dem versionierten Solver-Cache erzeugt. Engine-Profil, Quell-Fingerprint, Zählwerte und SHA-256 sind dokumentiert, damit der Download unabhängig prüfbar ist. Ein Ergebnis ist ein Simulationsresultat und keine Erfolgswahrscheinlichkeit am realen Tisch.

Versionierte Simulatordaten

Engine-Vertrag
3ball-carom-match-v2 / physics 2.0.0 / solver 4.2.0
Datensatz-SHA-256
256a8ec7e7e9a66d907bd43f5fdd6b87628dc067fd9621f2d2ebd2472c3e43ed
gültige Solver-Ergebnisse
249
leere oder verworfene Ergebnisplätze
151
Prüfstatus
machine-assisted-reviewed

Manifest herunterladen

Feldverzeichnis

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.

Öffentliche Downloads prüfen

Die Prüfung kontrolliert Dateiintegrität und Anzahlen. Sie erzeugt die Physikengine nicht neu, bestätigt keinen Stoß unabhängig und beweist keine Genauigkeit am echten Tisch. Die vollständige Generierungsumgebung wird nicht öffentlich verteilt.

Speichere den folgenden Text als verify_3ball.py und führe ihn mit Python 3 aus. Er nutzt nur die Standardbibliothek und öffentliche JSON-Dateien von 3ball.app; Konto und Projektkopie sind unnötig.

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'])

Umfang und Grenzen

Dies ist ein deterministischer Simulatordatensatz, keine Erfolgsstudie am realen Tisch. Der Cache nutzt das eingefrorene V2-Profil. Physics V3 wartet auf unabhängige Messung. Margin und Robustheit sind Modelldiagnosen, keine realen Wahrscheinlichkeiten.

Lizenz und Datenschutz

Der Download enthält nur berechnete Tischkoordinaten und Solver-Ausgaben; keine Fotos, Kontokennungen, Freitexte oder personenbezogenen Daten. Lizenz CC BY 4.0.

Beispielpositionen

PositionModusBälleSolver-StößeBeste Marge
3cushion::white::r2.130,0.710|w0.710,0.528|y0.710,0.710Dreiband331.15
freecarom::white::r2.130,0.710|w0.710,0.528|y0.710,0.710Freie Partie311.32
3cushion::yellow::r2.130,0.710|w0.710,0.528|y0.710,0.710Dreiband310.94
freecarom::yellow::r2.130,0.710|w0.710,0.528|y0.710,0.710Freie Partie311.36
3cushion::white::r2.550,0.500|w0.300,0.300|y2.500,1.100Dreiband340.28
freecarom::white::r2.550,0.500|w0.300,0.300|y2.500,1.100Freie Partie340.50
3cushion::yellow::r2.550,0.500|w0.300,0.300|y2.500,1.100Dreiband320.97
freecarom::yellow::r2.550,0.500|w0.300,0.300|y2.500,1.100Freie Partie342.13
3cushion::white::r0.550,0.300|w1.420,0.710|y1.950,1.100Dreiband311.47
freecarom::white::r0.550,0.300|w1.420,0.710|y1.950,1.100Freie Partie321.50
3cushion::yellow::r0.550,0.300|w1.420,0.710|y1.950,1.100Dreiband310.24
freecarom::yellow::r0.550,0.300|w1.420,0.710|y1.950,1.100Freie Partie320.92

Vollständigen Datensatz herunterladen

Der vollständige maschinenlesbare Datensatz ist mit Quellenangabe kostenlos nutzbar.

JSON herunterladen

So verwendest du ihn

Platziere eine Position anhand der Beispielkoordinaten und der Spielballidentität im Trainer. Eingefrorene V2-Ergebnisse können vom aktuellen V3-Replay abweichen; notiere die Engineversion beim Vergleich.

Trainer öffnen

Platziere eine Position anhand der Beispielkoordinaten und der Spielballidentität im Trainer. Eingefrorene V2-Ergebnisse können vom aktuellen V3-Replay abweichen; notiere die Engineversion beim Vergleich.

Trainer öffnen →