バージョン付きシミュレーターデータ:100配置、モデル内で有効な249結果、空または却下された151枠(評価総数400)。バージョン管理された決定論的物理キャッシュの出力で、実台成功率の研究ではありません。
方法論
公開データはバージョン管理されたソルバーキャッシュから生成されます。独立検証のため、エンジンプロファイル、ソース指紋、件数、SHA-256を記録しています。各結果はシミュレーター内の出力であり、実台での成功確率ではありません。
バージョン付きシミュレーターデータ
- エンジン契約
3ball-carom-match-v2 / physics 2.0.0 / solver 4.2.0- データセットSHA-256
256a8ec7e7e9a66d907bd43f5fdd6b87628dc067fd9621f2d2ebd2472c3e43ed- 有効なソルバー結果
- 249
- 空または却下された結果枠
- 151
- レビュー状態
machine-assisted-reviewed
フィールド辞書
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.
公開ダウンロードを検査する
検査対象はファイルの整合性と件数です。物理エンジンの再生成、ショットの独立検証、実台精度の証明ではありません。生成環境の全体は公開配布していません。
以下をverify_3ball.pyとして保存しPython 3で実行します。標準ライブラリだけで3ball.appの公開JSONを取得し、アカウントやプロジェクトの取得は不要です。
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'])対象範囲と限界
これは決定論的シミュレーターデータであり、実台の成功率調査ではありません。公開キャッシュは固定V2プロファイルを使用します。Physics V3は独立実測待ちです。マージンと堅牢性はモデル診断値で、現実の確率ではありません。
ライセンスとプライバシー
ダウンロードには計算座標とソルバー出力のみが含まれ、写真、アカウント識別子、自由記述、個人データは含まれません。CC BY 4.0です。
サンプル配置
| 配置 | モード | 球 | ソルバーのショット | 最良マージン |
|---|---|---|---|---|
3cushion::white::r2.130,0.710|w0.710,0.528|y0.710,0.710 | スリークッション | 3 | 3 | 1.15 |
freecarom::white::r2.130,0.710|w0.710,0.528|y0.710,0.710 | フリーゲーム | 3 | 1 | 1.32 |
3cushion::yellow::r2.130,0.710|w0.710,0.528|y0.710,0.710 | スリークッション | 3 | 1 | 0.94 |
freecarom::yellow::r2.130,0.710|w0.710,0.528|y0.710,0.710 | フリーゲーム | 3 | 1 | 1.36 |
3cushion::white::r2.550,0.500|w0.300,0.300|y2.500,1.100 | スリークッション | 3 | 4 | 0.28 |
freecarom::white::r2.550,0.500|w0.300,0.300|y2.500,1.100 | フリーゲーム | 3 | 4 | 0.50 |
3cushion::yellow::r2.550,0.500|w0.300,0.300|y2.500,1.100 | スリークッション | 3 | 2 | 0.97 |
freecarom::yellow::r2.550,0.500|w0.300,0.300|y2.500,1.100 | フリーゲーム | 3 | 4 | 2.13 |
3cushion::white::r0.550,0.300|w1.420,0.710|y1.950,1.100 | スリークッション | 3 | 1 | 1.47 |
freecarom::white::r0.550,0.300|w1.420,0.710|y1.950,1.100 | フリーゲーム | 3 | 2 | 1.50 |
3cushion::yellow::r0.550,0.300|w1.420,0.710|y1.950,1.100 | スリークッション | 3 | 1 | 0.24 |
freecarom::yellow::r0.550,0.300|w1.420,0.710|y1.950,1.100 | フリーゲーム | 3 | 2 | 0.92 |
全データセットをダウンロード
完全な機械可読データセットは、帰属表示のもと無料で利用・再利用できます。
使い方
例の座標と手球の識別情報を使い、練習ツールに配置してください。固定されたV2結果は現在のV3再生と異なる場合があります。比較時はエンジン版を記録してください。