Vai al contenuto

Dataset di Ricerca sul Biliardo a Tre Sponde

100 posizioni; 249 risultati validi nel modello e 151 slot vuoti/rifiutati, con manifest e JSON gratuito.

Autore: Setviva Engineering 565 parole 3 min di lettura

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.

100
posizioni
249
risultati validi
151
slot vuoti o rifiutati
400
slot di risultato valutati
50
tre sponde
50
carambola libera

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

Scarica il manifest

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

PosizioneModalitàPalleColpi del solutoreMargine migliore
3cushion::white::r2.130,0.710|w0.710,0.528|y0.710,0.710tre sponde331.15
freecarom::white::r2.130,0.710|w0.710,0.528|y0.710,0.710carambola libera311.32
3cushion::yellow::r2.130,0.710|w0.710,0.528|y0.710,0.710tre sponde310.94
freecarom::yellow::r2.130,0.710|w0.710,0.528|y0.710,0.710carambola libera311.36
3cushion::white::r2.550,0.500|w0.300,0.300|y2.500,1.100tre sponde340.28
freecarom::white::r2.550,0.500|w0.300,0.300|y2.500,1.100carambola libera340.50
3cushion::yellow::r2.550,0.500|w0.300,0.300|y2.500,1.100tre sponde320.97
freecarom::yellow::r2.550,0.500|w0.300,0.300|y2.500,1.100carambola libera342.13
3cushion::white::r0.550,0.300|w1.420,0.710|y1.950,1.100tre sponde311.47
freecarom::white::r0.550,0.300|w1.420,0.710|y1.950,1.100carambola libera321.50
3cushion::yellow::r0.550,0.300|w1.420,0.710|y1.950,1.100tre sponde310.24
freecarom::yellow::r0.550,0.300|w1.420,0.710|y1.950,1.100carambola libera320.92

Scarica il dataset completo

Il dataset completo leggibile da macchina è scaricabile e riutilizzabile gratuitamente con attribuzione.

Scarica JSON

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 →