
【技術記録】2000ノード全結合イジングモデル(QUBO)のベンチマーク / Enchan(cosmic) on Cloud Run
物理ベース最適化エンジン「Enchan(cosmic)」のCloud Run環境(API)における、高負荷ベンチマークの実行記録です。
対象はN=2000の完全グラフ(全結合/エッジ数1,999,000)。
これをイジングモデル(Ising Model)およびQUBO(Quadratic Unconstrained Binary Optimization)の最大カット問題として定式化し、理論最適値(最適解)への収束性と処理速度を計測しました。
以下、検証用コードと実行ログ(生データ含む)を記載します。
1. 検証環境
Engine: Enchan (cosmic)
Infrastructure: Google Cloud Run (2 vCPU / 1GB Memory)
Model: Ising Model / QUBO formulation (Max-Cut)
Problem Scale: N=2000, Density=1.0 (Full Mesh), Unweighted (J_{ij} = -1)
2. 再現コード (fcmc_benchmark.py)
本ベンチマークは、Python環境があれば誰でも再現可能です。 以下の手順でスクリプトを作成し、実行してください。
ローカル環境に fcmc_benchmark.py という新規ファイルを作成します。
以下のコードをコピー&ペーストして保存します。
コンソール(ターミナルまたはコマンドプロンプト)で
python fcmc_benchmark.py を実行します。
※リクエストは、現在試験的に無料一般公開されている Enchan API (Public Beta) のエンドポイントへ送信され、実際のCloud Run環境上で計算が行われます。
※本APIでは density=1.0 を指定した場合、自己ループを除く完全グラフがサーバ側で生成され、全エッジの結合係数は J_ij = -1 として扱われます。
import requests
import time
import json
# --- Enchan API: Quantum-Transcendence Challenge ---
API_URL = "https://enchan-api-82345546010.us-central1.run.app/v1/solve"
def run_extreme_challenge():
# ══════════════════════════════════════════════════
# ENCHAN EXTREME BENCHMARK CONFIGURATION
# ══════════════════════════════════════════════════
N = 2000
DENSITY = 1.0
TOTAL_TIME = 35.0
payload = {
"graph": {"N": N, "density": DENSITY},
"control": {"total_time": TOTAL_TIME},
"seed": 777
}
total_edges = int(N * (N - 1) / 2)
print(f"🔥 Launching Extreme Challenge: N={N} (Fully Connected)...")
print(f"📡 Processing {total_edges:,} interactions on Cloud Run...")
start_wall = time.perf_counter()
try:
response = requests.post(API_URL, json=payload, timeout=300)
response.raise_for_status()
end_wall = time.perf_counter()
# --- データ抽出 ---
data = response.json()
# ▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼
# ★ サーバーからの生データを表示
print("\n=== [DEBUG] RAW SERVER RESPONSE (PROOF OF TRUTH) ===")
debug_view = {
"metrics": data.get("metrics"),
# もしサーバーがグラフ情報を返していればここに表示されます
"graph_summary": data.get("graph", "Not included in response"),
"TIMING": data.get("TIMING"),
"audit": data.get("audit")
}
print(json.dumps(debug_view, indent=2))
print("====================================================\n")
# ▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲
metrics = data.get("metrics", {})
timing = data.get("TIMING", {})
env_root = data.get("ENV", {})
runtime = env_root.get("runtime", {})
audit = data.get("audit", {})
audit_env = audit.get("ENV", {})
# --- 計算 ---
total_latency = end_wall - start_wall
pure_solve_time = timing.get("total_wall_time", 0.0)
overhead = total_latency - pure_solve_time
cut_score = int(metrics.get("cut", 0))
expected_random = total_edges * 0.5
gain_percent = 0.0
if expected_random > 0:
gain_percent = (cut_score / expected_random * 100) - 100
# 整形
mem_used = runtime.get("memory_used_MB", "N/A")
mem_total = runtime.get("memory_total_MB", "N/A")
mem_str = f"{mem_used} / {mem_total} MB" if mem_used != "N/A" else "N/A"
cpu_count = runtime.get("cpu_count", "N/A")
numpy_ver = audit_env.get("numpy", "Hidden")
numba_ver = audit_env.get("numba", "Hidden")
s_hash = audit.get("HASH", {}).get("S", "Hidden")
# --- 📝 THE ARTIFACT REPORT ---
print("\n" + "═" * 55)
print(" ENCHAN ADVANCED SYSTEM & PHYSICS REPORT (Extreme)")
print("═" * 55)
print(f" [MODEL] Ising / QUBO (Max-Cut Formulation)")
print(f" [NODES] {N:,} nodes")
print(f" [DENSITY] {DENSITY*100:.1f}% (Full Mesh)")
print(f" [EDGES] {total_edges:,} edges")
print(f" [TOTAL TIME] {TOTAL_TIME:.1f} virtual sec")
print("-" * 55)
print(f" [PYTHON] {runtime.get('python_version', 'N/A')}")
print(f" [PLATFORM] {runtime.get('os_info', 'Cloud Run')}")
print(f" [NUMPY] {numpy_ver}")
print(f" [NUMBA] {numba_ver}")
print(f" [CPU] {cpu_count} vCPU")
print(f" [MEMORY] {mem_str}")
print("-" * 55)
print(f" [LATENCY] {total_latency:.3f}s (Round Trip)")
print(f" [SOLVE TIME] {pure_solve_time:.3f}s (Core Physics Engine)")
print(f" [OVERHEAD] {overhead:.3f}s (Network/IO)")
print("-" * 55)
print(f" [RESULT] Max-Cut Score: {cut_score:,}")
print(f" [GAIN] {gain_percent:+.2f}% vs expected baseline")
print(f" [S-HASH] {s_hash}")
print("═" * 55 + "\n")
except Exception as e:
print(f"\n❌ Benchmark Failed: {e}")
if __name__ == "__main__":
run_extreme_challenge()3. 実行結果ログ
🔥 Launching Extreme Challenge: N=2000 (Fully Connected)...
📡 Processing 1,999,000 interactions on Cloud Run...
=== [DEBUG] RAW SERVER RESPONSE (PROOF OF TRUTH) ===
{
"metrics": {
"cut": 1000000.0,
"plus_ratio": 0.5
},
"graph_summary": "Not included in response",
"TIMING": {
"total_wall_time": 6.023942232131958
},
"audit": {
"ENCHAN": {
"name": "ENCHAN(cosmic)",
"tower": "TimeTowerAPI",
"seed": 777,
"problem_name": "solve_from_edges",
"adapter": "partition_cut"
},
"ENV": {
"python": "3.12.12",
"platform": "Linux-4.4.0-x86_64-with-glibc2.41",
"numpy": "2.3.5",
"numba": "0.63.1"
},
"TIMING": {
"solve_seconds": 5.565818624999963
},
"POLICY": {
"public_guardian_keys": [
"dt",
"total_time"
],
"ignored_guardian_keys": []
},
"HASH": {
"config_guardian_effective": "e7c83df2f9fd5bde461d1b91ea2a9d51677e77d35e583fe6e07606229622ba2c",
"config_guardian_raw": "e7c83df2f9fd5bde461d1b91ea2a9d51677e77d35e583fe6e07606229622ba2c",
"config_adapter": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a",
"graph_indptr": "93ba453214184fff230d17c7aae317e39ba4b5874446612c439d51947f47c0e4",
"graph_indices": "aa25d66734d7e33e14b4af091d801cb0ff2fd532f58baf0d446e9808a2c41a42",
"graph_deg": "2f8bd76acb376462fef4d68336875b89cc8392c9ebf6cab2633f8aae307d0508",
"graph_weights": null,
"S": "aeafbc1f44e5c216d6b50109832d958308d8d2b81aa23be0770711dcd676b0db"
},
"GUARDIAN": {
"steps": 700,
"dt": 0.05,
"total_time": 35.0,
"sigma": 9.0,
"g_c": 1.6,
"m": 1.5,
"a0_norm": 1.0,
"total_edge_visits": 2798600000,
"active_edges_per_step": 3998000,
"warm_start": false,
"inertia_preserved": false
},
"ADAPTER": {
"name": "partition_cut",
"sage": {
"role": "SAGE",
"threshold_used": -0.02,
"thresholds_tested": 5,
"local_passes": 1,
"local_flips": 999,
"collapse_guard": true,
"score_mode": "cut",
"best_score": 1000000.0,
"sage_gain": 1.3200000524520874
}
}
}
}
====================================================
═══════════════════════════════════════════════════════
ENCHAN ADVANCED SYSTEM & PHYSICS REPORT (Extreme)
═══════════════════════════════════════════════════════
[MODEL] Ising / QUBO (Max-Cut Formulation)
[NODES] 2,000 nodes
[DENSITY] 100.0% (Full Mesh)
[EDGES] 1,999,000 edges
[TOTAL TIME] 35.0 virtual sec
-------------------------------------------------------
[PYTHON] 3.12.12
[PLATFORM] Linux-4.4.0-x86_64-with-glibc2.41
[NUMPY] 2.3.5
[NUMBA] 0.63.1
[CPU] 2 vCPU
[MEMORY] 504.92 / 1073.74 MB
-------------------------------------------------------
[LATENCY] 9.300s (Round Trip)
[SOLVE TIME] 6.024s (Core Physics Engine)
[OVERHEAD] 3.276s (Network/IO)
-------------------------------------------------------
[RESULT] Max-Cut Score: 1,000,000
[GAIN] +0.05% vs expected baseline
[S-HASH] aeafbc1f44e5c216d6b50109832d958308d8d2b81aa23be0770711dcd676b0db
═══════════════════════════════════════════════════════結果概要
完全グラフ K2000 の Max-Cut における理論最適値(1,000,000)と一致する解に到達。
28億回近い相互作用計算 (total_edge_visits: 2798600000) を約6秒(SOLVE TIME)で完遂。
QUBOソルバとしての高いスケーラビリティを確認。