Dataset con versione del simulatore con 100 posizioni, 249 risultati validi nel modello e 151 slot vuoti o rifiutati (400 valutati). Deriva da una cache fisica deterministica versionata, non da uno studio di successo sul tavolo reale.
Metodologia
L'artefatto pubblicato è generato dalla cache versionata del solutore. Profilo del motore, impronta del sorgente, conteggi e SHA-256 sono registrati per una verifica indipendente. Ogni risultato è un output del simulatore, non una probabilità di successo sul tavolo reale.
Dati del simulatore con versione
- Contratto del motore
3ball-carom-match-v2 / physics 2.0.0 / solver 4.2.0- SHA-256 del dataset
7b3c2ea3fa893244cbd9ab0ba83314df99b399a41b3aea382b043effd9b3211e- risultati validi
- 249
- slot vuoti o rifiutati
- 151
- Stato di revisione
machine-assisted-reviewed
Dizionario dei campi
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.
Verificare i download pubblici
La verifica controlla integrità e conteggi. Non riproduce il motore, non convalida indipendentemente un tiro e non dimostra accuratezza sul tavolo reale. L’ambiente completo di generazione non è distribuito pubblicamente.
Salva il testo seguente come verify_3ball.py ed eseguilo con Python 3. Usa solo la libreria standard e scarica JSON pubblici da 3ball.app; non servono account o copia del progetto.
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'])Ambito e limiti
È un dataset deterministico del simulatore, non uno studio di successo sul tavolo reale. La cache usa il profilo V2 congelato. Physics V3 attende ancora misure indipendenti. Margine e robustezza sono diagnostiche del modello, non probabilità reali.
Licenza e privacy
Il download contiene solo coordinate calcolate e output del solutore; nessuna foto, identificazione account, testo libero o dato personale. Licenza CC BY 4.0.
Posizioni di esempio
| Posizione | Modalità | Palle | Colpi del solutore | Margine migliore |
|---|---|---|---|---|
3cushion::white::r2.130,0.710|w0.710,0.528|y0.710,0.710 | tre sponde | 3 | 3 | 1.15 |
freecarom::white::r2.130,0.710|w0.710,0.528|y0.710,0.710 | carambola libera | 3 | 1 | 1.32 |
3cushion::yellow::r2.130,0.710|w0.710,0.528|y0.710,0.710 | tre sponde | 3 | 1 | 0.94 |
freecarom::yellow::r2.130,0.710|w0.710,0.528|y0.710,0.710 | carambola libera | 3 | 1 | 1.36 |
3cushion::white::r2.550,0.500|w0.300,0.300|y2.500,1.100 | tre sponde | 3 | 4 | 0.28 |
freecarom::white::r2.550,0.500|w0.300,0.300|y2.500,1.100 | carambola libera | 3 | 4 | 0.50 |
3cushion::yellow::r2.550,0.500|w0.300,0.300|y2.500,1.100 | tre sponde | 3 | 2 | 0.97 |
freecarom::yellow::r2.550,0.500|w0.300,0.300|y2.500,1.100 | carambola libera | 3 | 4 | 2.13 |
3cushion::white::r0.550,0.300|w1.420,0.710|y1.950,1.100 | tre sponde | 3 | 1 | 1.47 |
freecarom::white::r0.550,0.300|w1.420,0.710|y1.950,1.100 | carambola libera | 3 | 2 | 1.50 |
3cushion::yellow::r0.550,0.300|w1.420,0.710|y1.950,1.100 | tre sponde | 3 | 1 | 0.24 |
freecarom::yellow::r0.550,0.300|w1.420,0.710|y1.950,1.100 | carambola libera | 3 | 2 | 0.92 |
Scarica il dataset completo
Il dataset completo leggibile da macchina è scaricabile e riutilizzabile gratuitamente con attribuzione.
Come utilizzarlo
Imposta una posizione con le coordinate d’esempio e l’identità della battente. Il risultato V2 congelato può differire dal replay V3 attuale; annota la versione del motore nel confronto.
Apri il trainer
Imposta una posizione con le coordinate d’esempio e l’identità della battente. Il risultato V2 congelato può differire dal replay V3 attuale; annota la versione del motore nel confronto.
Apri il trainer →