finish all analysis and upload data and results
@@ -6,7 +6,7 @@ latex/build/*
|
||||
# Codes
|
||||
__pycache__/
|
||||
.venv/
|
||||
codes/results/
|
||||
# codes/results/
|
||||
codes/experiments/real_data/data/
|
||||
|
||||
# System
|
||||
|
||||
@@ -0,0 +1,92 @@
|
||||
import pandas as pd
|
||||
import os
|
||||
import matplotlib.pyplot as plt
|
||||
from sklearn.metrics import mean_squared_error, mean_absolute_error
|
||||
|
||||
raw_path = "results/real_data/raw/dimacs_s42.csv"
|
||||
pred_path = "results/real_data/derived/distribution/dimacs_prediction_result/prediction.csv"
|
||||
save_folder = "results/real_data/derived/comparison"
|
||||
os.makedirs(save_folder, exist_ok=True)
|
||||
|
||||
raw = pd.read_csv(raw_path)
|
||||
pred = pd.read_csv(pred_path)
|
||||
|
||||
# real: trial 평균
|
||||
agg = (
|
||||
raw.groupby("file")
|
||||
.agg(
|
||||
nodes = ("nodes", "first"),
|
||||
density = ("density", "first"),
|
||||
real_time = ("time", "mean"),
|
||||
real_relax = ("relax_success","mean"),
|
||||
)
|
||||
.reset_index()
|
||||
)
|
||||
|
||||
# prediction: file 기준으로 merge
|
||||
pred_cols = pred[["file", "predict_time", "relax_success"]].rename(
|
||||
columns={"relax_success": "pred_relax"}
|
||||
)
|
||||
|
||||
merged = agg.merge(pred_cols, on="file", how="inner")
|
||||
|
||||
# 오차 계산
|
||||
for real_col, pred_col, prefix in [
|
||||
("real_time", "predict_time", "time"),
|
||||
("real_relax", "pred_relax", "relax"),
|
||||
]:
|
||||
merged[f"{prefix}_abs_err"] = (merged[pred_col] - merged[real_col]).abs()
|
||||
merged[f"{prefix}_rel_err"] = merged[f"{prefix}_abs_err"] / merged[real_col]
|
||||
|
||||
cols = [
|
||||
"file", "nodes", "density",
|
||||
"real_time", "predict_time", "time_abs_err", "time_rel_err",
|
||||
"real_relax", "pred_relax", "relax_abs_err", "relax_rel_err",
|
||||
]
|
||||
merged[cols].to_csv(os.path.join(save_folder, "comparison.csv"), index=False)
|
||||
print(merged[cols].to_string(index=False))
|
||||
print(f"\nSaved → {save_folder}/comparison.csv")
|
||||
|
||||
for real_col, pred_col, label in [
|
||||
("real_time", "predict_time", "time"),
|
||||
("real_relax", "pred_relax", "relax_success"),
|
||||
]:
|
||||
y = merged[real_col].to_numpy()
|
||||
y_hat = merged[pred_col].to_numpy()
|
||||
ss_res = ((y - y_hat) ** 2).sum()
|
||||
ss_tot = ((y - y.mean()) ** 2).sum()
|
||||
r2 = 1 - ss_res / ss_tot
|
||||
rmse = mean_squared_error(y, y_hat) ** 0.5
|
||||
mae = mean_absolute_error(y, y_hat)
|
||||
print(f"\n[{label}] R²={r2:.4f} RMSE={rmse:.4g} MAE={mae:.4g}")
|
||||
|
||||
|
||||
# ── Plot ───────────────────────────────────────────────────────────────────────
|
||||
fig, axes = plt.subplots(1, 2, figsize=(12, 5))
|
||||
|
||||
for ax, real_col, pred_col, label in [
|
||||
(axes[0], "real_time", "predict_time", "Runtime [s]"),
|
||||
(axes[1], "real_relax", "pred_relax", "Relax Success"),
|
||||
]:
|
||||
x = merged[real_col].to_numpy()
|
||||
y = merged[pred_col].to_numpy()
|
||||
mn, mx = min(x.min(), y.min()), max(x.max(), y.max())
|
||||
|
||||
ax.scatter(x, y, s=60, zorder=3)
|
||||
for _, row in merged.iterrows():
|
||||
ax.annotate(
|
||||
row["file"].replace("USA-road-d.", "").replace(".gr", ""),
|
||||
(row[real_col], row[pred_col]),
|
||||
fontsize=6, textcoords="offset points", xytext=(4, 2)
|
||||
)
|
||||
ax.plot([mn, mx], [mn, mx], color="red", linestyle="--", linewidth=1.2, label="y = x")
|
||||
ax.set_xlabel(f"Real {label}")
|
||||
ax.set_ylabel(f"Predicted {label}")
|
||||
ax.set_title(f"Predicted vs Real — {label}")
|
||||
ax.legend(fontsize=8)
|
||||
ax.grid(True, alpha=0.4)
|
||||
|
||||
fig.tight_layout()
|
||||
fig.savefig(os.path.join(save_folder, "comparison_plot.png"), dpi=300)
|
||||
plt.close(fig)
|
||||
print(f"Saved → {save_folder}/comparison_plot.png")
|
||||
@@ -0,0 +1,78 @@
|
||||
from experiments.synthetic_data.analysis.processing_time_analysis import mean_l
|
||||
from experiments.synthetic_data.analysis.processing_time_analysis import regression_k3
|
||||
from experiments.synthetic_data.analysis.processing_time_analysis import regression_m
|
||||
from experiments.synthetic_data.analysis.call_number_analysis import (
|
||||
nonlinear_regression,
|
||||
)
|
||||
import numpy as np
|
||||
import pandas as pd
|
||||
import os
|
||||
|
||||
|
||||
def k3(V):
|
||||
return k3_a * np.exp(-k3_b * V) + k3_c
|
||||
|
||||
|
||||
def m(V):
|
||||
return m_a * np.log2(V) + m_b
|
||||
|
||||
|
||||
def relax_success(E, S, AVG_DEG):
|
||||
relax_attempts = E
|
||||
relax_success_ratio = (rs_a * np.log(S) + rs_b) * AVG_DEG**rs_c
|
||||
return relax_attempts * relax_success_ratio
|
||||
|
||||
|
||||
def runtime_predict(V, D, S):
|
||||
E = V * (V - 1) * D
|
||||
AVG_DEG = (V - 1) * D
|
||||
if AVG_DEG < 1:
|
||||
return False, False
|
||||
|
||||
runtime = V * l + E * k3(V) + relax_success(E, S, AVG_DEG) * m(V)
|
||||
print(relax_success(E, S, AVG_DEG))
|
||||
# runtime_eq = f"[V * {l}] + [E * {k3_a} * exp(-{k3_b} * V) + {k3_c}] + [E * ({rs_a} * log(S) + {rs_b}) * AVG_DEG ** {rs_c} * {m_a} * log_2(V) + {m_b}]"
|
||||
|
||||
return runtime, relax_success(E, S, AVG_DEG)
|
||||
|
||||
|
||||
l = mean_l()
|
||||
k3_a, k3_b, k3_c = regression_k3()
|
||||
m_a, m_b = regression_m()
|
||||
rs_a, rs_b, rs_c = nonlinear_regression()
|
||||
|
||||
csv_file = "results/real_data/derived/dimacs_graph_distribution/distribution.csv"
|
||||
save_folder = f"results/real_data/derived/{os.path.splitext(os.path.basename(csv_file))[0]}/dimacs_prediction_result"
|
||||
os.makedirs(save_folder, exist_ok=True)
|
||||
|
||||
df = pd.read_csv(csv_file)
|
||||
|
||||
records = []
|
||||
|
||||
for row in df.itertuples():
|
||||
nodes = row.nodes
|
||||
density = row.density
|
||||
sigma = np.sqrt(np.log((row.std / row.mean) ** 2 + 1))
|
||||
|
||||
pred_time, pred_relax_success = runtime_predict(nodes, density, sigma)
|
||||
|
||||
if pred_time is False:
|
||||
continue
|
||||
records.append(
|
||||
{
|
||||
"file": row.file,
|
||||
"nodes": nodes,
|
||||
"density": density,
|
||||
"sigma": sigma,
|
||||
"predict_time": pred_time,
|
||||
"relax_success": pred_relax_success,
|
||||
}
|
||||
)
|
||||
print(f"finished {row.file}")
|
||||
|
||||
result = pd.DataFrame(records)
|
||||
out_path = os.path.join(save_folder, "prediction.csv")
|
||||
result.to_csv(out_path, index=False)
|
||||
print(f"Saved {len(result)} rows → {out_path}")
|
||||
|
||||
|
||||
@@ -102,18 +102,18 @@ def visualize_weights(file):
|
||||
|
||||
folder = "experiments/real_data/data/dimacs_data"
|
||||
files = [
|
||||
# "USA-road-d.BAY.gr",
|
||||
# "USA-road-d.CAL.gr",
|
||||
# "USA-road-d.COL.gr",
|
||||
# "USA-road-d.CTR.gr",
|
||||
# "USA-road-d.E.gr",
|
||||
# "USA-road-d.FLA.gr",
|
||||
# "USA-road-d.LKS.gr",
|
||||
# "USA-road-d.NE.gr",
|
||||
# "USA-road-d.NW.gr",
|
||||
# "USA-road-d.NY.gr",
|
||||
"USA-road-d.BAY.gr",
|
||||
"USA-road-d.CAL.gr",
|
||||
"USA-road-d.COL.gr",
|
||||
"USA-road-d.CTR.gr",
|
||||
"USA-road-d.E.gr",
|
||||
"USA-road-d.FLA.gr",
|
||||
"USA-road-d.LKS.gr",
|
||||
"USA-road-d.NE.gr",
|
||||
"USA-road-d.NW.gr",
|
||||
"USA-road-d.NY.gr",
|
||||
"USA-road-d.USA.gr",
|
||||
# "USA-road-d.W.gr"
|
||||
"USA-road-d.W.gr"
|
||||
]
|
||||
|
||||
res_folder = "results/real_data/derived/dimacs_graph_distribution"
|
||||
|
||||
@@ -1,75 +1,73 @@
|
||||
import os
|
||||
import gc
|
||||
import time
|
||||
import pandas as pd
|
||||
import numpy as np
|
||||
import random
|
||||
|
||||
from experiments.real_data.graph_converters.dimacs_graph_converter import dimacs_convert_graph
|
||||
from core.dijkstra.heap_dijkstra import heap_dijkstra
|
||||
from core.heaps.binary_heap import BinHeap
|
||||
from core.heaps.fibonacci_heap import FiboHeap
|
||||
|
||||
def done_trials(out_path, file):
|
||||
if not os.path.exists(out_path):
|
||||
return set()
|
||||
df = pd.read_csv(out_path, usecols=["file", "trial"])
|
||||
return set(df[df["file"] == file]["trial"].tolist())
|
||||
|
||||
def run_test(
|
||||
folder,
|
||||
files,
|
||||
trials,
|
||||
base_seed
|
||||
base_seed,
|
||||
out_path,
|
||||
trials=10,
|
||||
):
|
||||
rows = []
|
||||
timer = time.perf_counter
|
||||
rng = np.random.default_rng(base_seed)
|
||||
INF = float('inf')
|
||||
write_header = not os.path.exists(out_path)
|
||||
|
||||
for file in files:
|
||||
completed = done_trials(out_path, file)
|
||||
remaining = [t for t in range(1, trials + 1) if t not in completed]
|
||||
|
||||
if not remaining:
|
||||
print(f"[SKIP] {file} (all {trials} trials done)")
|
||||
continue
|
||||
|
||||
print(f"[LOAD] {file} (completed: {sorted(completed)}, remaining: {remaining})")
|
||||
nodes, adj = dimacs_convert_graph(f'{folder}/{file}')
|
||||
density = len(adj) / (nodes * (nodes - 1))
|
||||
|
||||
for trial in range(1, trials + 1):
|
||||
start, end = rng.choice(nodes, size=2, replace=False) + 1
|
||||
for trial in remaining:
|
||||
print(f" trial {trial}/{trials}")
|
||||
|
||||
random.seed(base_seed + trial)
|
||||
start = random.randint(1, nodes)
|
||||
|
||||
bin_heap = BinHeap(nodes)
|
||||
st = timer()
|
||||
dist, stats = heap_dijkstra(nodes, adj, bin_heap, start, end)
|
||||
stats = heap_dijkstra(nodes, adj, bin_heap, start)
|
||||
et = timer()
|
||||
rows.append(
|
||||
{
|
||||
|
||||
row = pd.DataFrame([{
|
||||
"file": file,
|
||||
"nodes": nodes,
|
||||
"density": density,
|
||||
"trial": trial,
|
||||
"start": start,
|
||||
"end": end,
|
||||
"time": et - st,
|
||||
"algorithm": "binary",
|
||||
"reached": dist != INF,
|
||||
"trial": trial,
|
||||
"extract_min_calls": stats.extract_min_calls,
|
||||
"relax_attempts": stats.relax_attempts,
|
||||
"relax_success": stats.relax_success,
|
||||
}
|
||||
)
|
||||
}])
|
||||
row.to_csv(out_path, mode="a", header=write_header, index=False)
|
||||
write_header = False
|
||||
|
||||
fibo_heap = FiboHeap(nodes)
|
||||
st = timer()
|
||||
dist, stats = heap_dijkstra(nodes, adj, fibo_heap, start, end)
|
||||
et = timer()
|
||||
rows.append(
|
||||
{
|
||||
"file": file,
|
||||
"nodes": nodes,
|
||||
"density": density,
|
||||
"trial": trial,
|
||||
"start": start,
|
||||
"end": end,
|
||||
"time": et - st,
|
||||
"algorithm": "fibonacci",
|
||||
"reached": dist != INF,
|
||||
"extract_min_calls": stats.extract_min_calls,
|
||||
"relax_attempts": stats.relax_attempts,
|
||||
"relax_success": stats.relax_success,
|
||||
}
|
||||
)
|
||||
del bin_heap
|
||||
gc.collect()
|
||||
|
||||
del adj
|
||||
gc.collect()
|
||||
print(f"[DONE] {file}")
|
||||
|
||||
df = pd.DataFrame(rows)
|
||||
return df
|
||||
|
||||
# Settings
|
||||
folder = "experiments/real_data/data/dimacs_data"
|
||||
@@ -87,16 +85,15 @@ files = [
|
||||
"USA-road-d.USA.gr",
|
||||
"USA-road-d.W.gr"
|
||||
]
|
||||
trials = 200
|
||||
base_seed = 42
|
||||
|
||||
df = run_test(
|
||||
folder=folder,
|
||||
files=files,
|
||||
trials=trials,
|
||||
base_seed=base_seed
|
||||
)
|
||||
|
||||
save_folder = "results/real_data/raw"
|
||||
os.makedirs(save_folder, exist_ok=True)
|
||||
df.to_csv(f"{save_folder}/dimacs_t{trials}_s{base_seed}.csv", index=False)
|
||||
out_path = f"{save_folder}/dimacs_s{base_seed}.csv"
|
||||
|
||||
run_test(
|
||||
folder=folder,
|
||||
files=files,
|
||||
base_seed=base_seed,
|
||||
out_path=out_path,
|
||||
)
|
||||
@@ -7,19 +7,6 @@ from scipy.optimize import curve_fit
|
||||
import numpy as np
|
||||
|
||||
|
||||
# Initial Setup
|
||||
csv_file = "results/synthetic_data/raw/20260421_031740.csv"
|
||||
save_folder = f"results/synthetic_data/derived/{os.path.splitext(os.path.basename(csv_file))[0]}/call_number_analysis"
|
||||
os.makedirs(save_folder, exist_ok=True)
|
||||
|
||||
df = pd.read_csv(csv_file)
|
||||
df = df[df["algorithm"] == "binary"].copy()
|
||||
df["relax_success_ratio"] = df["relax_success"] / df["relax_attempts"]
|
||||
df["E"] = df["nodes"] * (df["nodes"] - 1) * df["density"]
|
||||
df["decrease_key"] = df["relax_success"]
|
||||
df["avg_degree"] = (df["nodes"] - 1) * df["density"]
|
||||
|
||||
|
||||
# 1. E vs relax_attempts
|
||||
def E_vs_relax_attempts(df):
|
||||
X = df[["E"]].to_numpy()
|
||||
@@ -292,7 +279,7 @@ def regime_distribution(df):
|
||||
|
||||
|
||||
# 6. Nonlinear regression: r = (a·ln(sigma) + b) · avg_deg^c
|
||||
def nonlinear_regression(df):
|
||||
def nonlinear_regression(compute_local=False):
|
||||
# Filter: giant component regime only
|
||||
sub = df[(df["avg_degree"] >= 1) & (df["relax_success_ratio"] < 0.99)].copy()
|
||||
sub = sub[sub["relax_success_ratio"] > 0].dropna(subset=["relax_success_ratio", "avg_degree", "sigma"])
|
||||
@@ -301,8 +288,6 @@ def nonlinear_regression(df):
|
||||
sigma = sub["sigma"].to_numpy()
|
||||
r = sub["relax_success_ratio"].to_numpy()
|
||||
|
||||
print(f"Fitting on {len(sub)} data points")
|
||||
|
||||
def model(X, a, b, c):
|
||||
avg_deg_, sigma_ = X
|
||||
return (a * np.log(sigma_) + b) * avg_deg_ ** c
|
||||
@@ -319,6 +304,9 @@ def nonlinear_regression(df):
|
||||
ss_tot = np.sum((r - r.mean()) ** 2)
|
||||
r2 = 1 - ss_res / ss_tot
|
||||
|
||||
if compute_local == False:
|
||||
return (a, b, c)
|
||||
|
||||
print("\n=== Nonlinear regression: r = (a·ln(σ) + b) · avg_deg^c ===")
|
||||
print(f" a = {a:.6f} ± {perr[0]:.6f}")
|
||||
print(f" b = {b:.6f} ± {perr[1]:.6f}")
|
||||
@@ -360,9 +348,22 @@ def nonlinear_regression(df):
|
||||
print(f"Saved nonlinear regression plots to {nlr_save_folder}")
|
||||
|
||||
|
||||
|
||||
# Initial Setup
|
||||
csv_file = "results/synthetic_data/raw/20260421_031740.csv"
|
||||
save_folder = f"results/synthetic_data/derived/{os.path.splitext(os.path.basename(csv_file))[0]}/call_number_analysis"
|
||||
os.makedirs(save_folder, exist_ok=True)
|
||||
|
||||
df = pd.read_csv(csv_file)
|
||||
df = df[df["algorithm"] == "binary"].copy()
|
||||
df["relax_success_ratio"] = df["relax_success"] / df["relax_attempts"]
|
||||
df["E"] = df["nodes"] * (df["nodes"] - 1) * df["density"]
|
||||
df["decrease_key"] = df["relax_success"]
|
||||
df["avg_degree"] = (df["nodes"] - 1) * df["density"]
|
||||
|
||||
E_vs_relax_attempts(df) # 1
|
||||
sigma_vs_relax_success_ratio(df) # 2
|
||||
avg_degree_vs_relax_success_ratio(df) # 3
|
||||
log_avg_degree_vs_log_ratio(df) # 4
|
||||
regime_distribution(df) # 5
|
||||
nonlinear_regression(df) # 6
|
||||
nonlinear_regression(compute_local=True) # 6
|
||||
@@ -0,0 +1,123 @@
|
||||
from experiments.synthetic_data.analysis.processing_time_analysis import mean_l
|
||||
from experiments.synthetic_data.analysis.processing_time_analysis import regression_k3
|
||||
from experiments.synthetic_data.analysis.processing_time_analysis import regression_m
|
||||
from experiments.synthetic_data.analysis.call_number_analysis import nonlinear_regression
|
||||
import numpy as np
|
||||
import pandas as pd
|
||||
import os
|
||||
import matplotlib.pyplot as plt
|
||||
from sklearn.metrics import mean_squared_error, mean_absolute_error
|
||||
|
||||
def k3(V):
|
||||
return k3_a * np.exp(-k3_b * V) + k3_c
|
||||
|
||||
def m(V):
|
||||
return m_a * np.log2(V) + m_b
|
||||
|
||||
def relax_success(E, S, AVG_DEG):
|
||||
relax_attempts = E
|
||||
relax_success_ratio = (rs_a * np.log(S) + rs_b) * AVG_DEG ** rs_c
|
||||
return relax_attempts * relax_success_ratio
|
||||
|
||||
|
||||
def runtime_predict(V, D, S):
|
||||
E = V * (V - 1) * D
|
||||
AVG_DEG = (V - 1) * D
|
||||
if AVG_DEG < 1:
|
||||
return False
|
||||
|
||||
runtime = V * l + E * k3(V) + relax_success(E, S, AVG_DEG) * m(V)
|
||||
print(relax_success(E, S, AVG_DEG))
|
||||
# runtime_eq = f"[V * {l}] + [E * {k3_a} * exp(-{k3_b} * V) + {k3_c}] + [E * ({rs_a} * log(S) + {rs_b}) * AVG_DEG ** {rs_c} * {m_a} * log_2(V) + {m_b}]"
|
||||
|
||||
return runtime
|
||||
|
||||
|
||||
l = mean_l()
|
||||
k3_a, k3_b, k3_c = regression_k3()
|
||||
m_a, m_b = regression_m()
|
||||
rs_a, rs_b, rs_c = nonlinear_regression()
|
||||
|
||||
csv_file = "results/synthetic_data/raw/20260421_031740.csv"
|
||||
save_folder = f"results/synthetic_data/derived/{os.path.splitext(os.path.basename(csv_file))[0]}/prediction_result"
|
||||
os.makedirs(save_folder, exist_ok=True)
|
||||
|
||||
df = pd.read_csv(csv_file)
|
||||
df = df[df["algorithm"] == "binary"].copy()
|
||||
|
||||
records = []
|
||||
for row in df.itertuples():
|
||||
predicted = runtime_predict(row.nodes, row.density, row.sigma)
|
||||
if predicted is False:
|
||||
continue
|
||||
records.append({
|
||||
"nodes": row.nodes,
|
||||
"density": row.density,
|
||||
"sigma": row.sigma,
|
||||
"trial": row.trial,
|
||||
"real_time": row.time,
|
||||
"predict_time": predicted,
|
||||
"abs_error": abs(row.time - predicted),
|
||||
"rel_error": abs(row.time - predicted) / row.time,
|
||||
})
|
||||
|
||||
result = pd.DataFrame(records)
|
||||
out_path = os.path.join(save_folder, "prediction.csv")
|
||||
result.to_csv(out_path, index=False)
|
||||
print(f"Saved {len(result)} rows → {out_path}")
|
||||
|
||||
real = result["real_time"].to_numpy()
|
||||
pred = result["predict_time"].to_numpy()
|
||||
|
||||
ss_res = np.sum((real - pred) ** 2)
|
||||
ss_tot = np.sum((real - real.mean()) ** 2)
|
||||
r2 = 1 - ss_res / ss_tot
|
||||
print(f"R² = {r2:.4f}")
|
||||
|
||||
rmse = np.sqrt(mean_squared_error(real, pred))
|
||||
mae = mean_absolute_error(real, pred)
|
||||
|
||||
print(f"RMSE: {rmse:.4f} s") # 평균 제곱 오차의 제곱근
|
||||
print(f"MAE: {mae:.4f} s") # 평균 절대 오차
|
||||
|
||||
mn, mx = min(real.min(), pred.min()), max(real.max(), pred.max())
|
||||
|
||||
fig, ax = plt.subplots(figsize=(6, 6))
|
||||
ax.scatter(real, pred, s=5, alpha=0.3, color="steelblue")
|
||||
ax.plot([mn, mx], [mn, mx], color="red", linewidth=1.5, linestyle="--", label="y = x")
|
||||
ax.set_xlabel("real_time [s]")
|
||||
ax.set_ylabel("predict_time [s]")
|
||||
ax.set_title(f"Predicted vs Real Runtime R²={r2:.4f}")
|
||||
ax.legend(fontsize=9)
|
||||
ax.grid(True, alpha=0.4)
|
||||
fig.tight_layout()
|
||||
fig.savefig(os.path.join(save_folder, "predicted_vs_real.png"), dpi=300)
|
||||
plt.close(fig)
|
||||
print(f"Saved: {save_folder}/predicted_vs_real.png")
|
||||
|
||||
# rel_error distribution
|
||||
rel_err = result["rel_error"].to_numpy()
|
||||
|
||||
fig, axes = plt.subplots(1, 2, figsize=(12, 5))
|
||||
|
||||
# histogram
|
||||
axes[0].hist(rel_err, bins=50, color="steelblue", edgecolor="none", alpha=0.8)
|
||||
axes[0].axvline(np.median(rel_err), color="red", linestyle="--", linewidth=1.5, label=f"median={np.median(rel_err):.3f}")
|
||||
axes[0].axvline(np.mean(rel_err), color="orange", linestyle="--", linewidth=1.5, label=f"mean={np.mean(rel_err):.3f}")
|
||||
axes[0].set_xlabel("rel_error")
|
||||
axes[0].set_ylabel("count")
|
||||
axes[0].set_title("Relative Error Distribution")
|
||||
axes[0].legend(fontsize=9)
|
||||
axes[0].grid(True, alpha=0.4)
|
||||
|
||||
# rel_error vs real_time
|
||||
axes[1].scatter(real, rel_err, s=5, alpha=0.3, color="steelblue")
|
||||
axes[1].set_xlabel("real_time [s]")
|
||||
axes[1].set_ylabel("rel_error")
|
||||
axes[1].set_title("Relative Error vs Real Time")
|
||||
axes[1].grid(True, alpha=0.4)
|
||||
|
||||
fig.tight_layout()
|
||||
fig.savefig(os.path.join(save_folder, "rel_error_dist.png"), dpi=300)
|
||||
plt.close(fig)
|
||||
print(f"Saved: {save_folder}/rel_error_dist.png")
|
||||
@@ -4,122 +4,163 @@ import matplotlib.pyplot as plt
|
||||
import os
|
||||
from sklearn.linear_model import LinearRegression
|
||||
from sklearn.metrics import r2_score
|
||||
from scipy.optimize import curve_fit
|
||||
|
||||
# Heap: Binary
|
||||
#
|
||||
# Runtime = Add + Extract-min + Relax-attempts + Relax-success
|
||||
# = VlogV * k1 + VlogV * k2 + E * k3 + \alpha * logV * k4 (Binary)
|
||||
# = V * k1 + VlogV * k2 + E * k3 + \alpha * k4 (Fibonacci)
|
||||
# = VlogV * k1 + VlogV * k2 + E * k3 + \alpha * logV * k4
|
||||
# (\alpha = relax_success)
|
||||
#
|
||||
# V increases -> Add, Extract-min, Relax-attempts, Relax-success all increases.
|
||||
# Therfore, critical multicollinearlity occurs.
|
||||
#
|
||||
# To solve, run regression per each V.
|
||||
# To solve this problem, run regression per each V.
|
||||
# Then V becomes constant.
|
||||
#
|
||||
# Runtime(Binary) = VlogV * k1 + VlogV * k2 + E * k3 + \alpha * logV * k4 (Binary)
|
||||
# = intercept + E * k3 + \alpha * k4
|
||||
# Runtime(Fibonacci) = V * k1 + VlogV * k2 + E * k3 + \alpha * k4 (Fibonacci)
|
||||
# = intercept + E * k3 + \alpha * k4
|
||||
# Runtime_V = (V) * (logV(k1 + k2)) + (E) * k3 + (\alpha) * (logV * k4)
|
||||
#
|
||||
# left part: call number, right part: cost per call
|
||||
# call number is not concern in operation cost analysis.
|
||||
# Important thing is that logV in right sides become constant.
|
||||
#
|
||||
# Final equation
|
||||
# Runtime of specific V = intercept + E * k3 + \alpha * k4
|
||||
# Runtime of specific V = V * l + E * k3 + \alpha * m
|
||||
#
|
||||
# intercept absorbs V*(k1+k2) which is constant within each N.
|
||||
# Using this equation, we can get l, k3, and m from each regression.
|
||||
# l, m are defined like this.
|
||||
# l = logV * (k1 + k2)
|
||||
# m = logV * k4
|
||||
#
|
||||
#
|
||||
# Final result
|
||||
# l: cost per each add and extract-min (should scale with log2N)
|
||||
# k3: cost per relax_attempt (should be equal across heaps)
|
||||
# k4: cost per decrease-key (binary: should scale with log2N; fibonacci: should be constant)
|
||||
# m: cost per decrease-key (should scale with log2N)
|
||||
#
|
||||
# (All base of log in this context is 2 due to binary heap.)
|
||||
|
||||
csv_file = "results/synthetic_data/raw/20260421_031740.csv"
|
||||
save_folder = f"results/synthetic_data/derived/{os.path.splitext(os.path.basename(csv_file))[0]}/processing_time_analysis"
|
||||
os.makedirs(save_folder, exist_ok=True)
|
||||
|
||||
df = pd.read_csv(csv_file)
|
||||
nodes = sorted(df["nodes"].unique())
|
||||
algos = ["binary", "fibonacci"]
|
||||
# contribution diagram
|
||||
def contribution():
|
||||
contribution_records = []
|
||||
|
||||
records = []
|
||||
|
||||
for algo in algos:
|
||||
sub = df[df["algorithm"] == algo]
|
||||
for n in nodes:
|
||||
g = sub[sub["nodes"] == n]
|
||||
g = df[df['nodes'] == n]
|
||||
g = g[g['relax_success'] > 0]
|
||||
|
||||
X = g[["relax_attempts", "relax_success"]].to_numpy()
|
||||
y = g["time"].to_numpy()
|
||||
if len(g) < 3:
|
||||
continue
|
||||
|
||||
model = LinearRegression().fit(X, y)
|
||||
r2 = r2_score(y, model.predict(X))
|
||||
# 해당 N의 l, k3, m 가져오기
|
||||
row = results[results['N'] == n].iloc[0]
|
||||
l_val = row['l']
|
||||
k3_val = row['k3'] # k3_fixed
|
||||
m_val = row['m']
|
||||
|
||||
records.append({
|
||||
"algorithm": algo,
|
||||
"N": n,
|
||||
"log2N": round(np.log2(n), 4),
|
||||
"intercept": model.intercept_,
|
||||
"k3 (E)": model.coef_[0],
|
||||
"k4 (alpha)":model.coef_[1],
|
||||
"r2": r2,
|
||||
"n": len(g),
|
||||
# 각 항의 평균값 계산
|
||||
E_mean = g['relax_attempts'].mean()
|
||||
alpha_mean = g['relax_success'].mean()
|
||||
|
||||
Vl = n * l_val # V·l
|
||||
Ek3 = E_mean * k3_val # E·k3
|
||||
am = alpha_mean * m_val # α·m
|
||||
|
||||
total = Vl + Ek3 + am
|
||||
|
||||
contribution_records.append({
|
||||
'N' : n,
|
||||
'V·l' : Vl,
|
||||
'E·k3' : Ek3,
|
||||
'α·m' : am,
|
||||
'total' : total,
|
||||
'V·l %' : Vl / total * 100,
|
||||
'E·k3 %' : Ek3 / total * 100,
|
||||
'α·m %' : am / total * 100,
|
||||
})
|
||||
|
||||
results = pd.DataFrame(records)
|
||||
contrib = pd.DataFrame(contribution_records)
|
||||
print("\n=== Contribution of each operations ===")
|
||||
print(contrib[['N','V·l %','E·k3 %','α·m %']].to_string(index=False))
|
||||
|
||||
for algo in algos:
|
||||
print(f"=== {algo} ===")
|
||||
r = results[results["algorithm"] == algo][["N","log2N","intercept","k3 (E)","k4 (alpha)","r2","n"]]
|
||||
print(r.to_string(index=False))
|
||||
print()
|
||||
# 시각화
|
||||
fig, ax = plt.subplots(figsize=(9, 5))
|
||||
|
||||
grouped = results.set_index(["N", "algorithm"])
|
||||
x = np.arange(len(contrib))
|
||||
w = 0.25
|
||||
|
||||
def get_param(param):
|
||||
return (
|
||||
grouped.loc[(nodes, "binary"), param].values,
|
||||
grouped.loc[(nodes, "fibonacci"), param].values
|
||||
)
|
||||
ax.bar(x - w, contrib['V·l %'], width=w, label='V·l (add+extract)')
|
||||
ax.bar(x, contrib['E·k3 %'], width=w, label='E·k3 (relax-attempt)')
|
||||
ax.bar(x + w, contrib['α·m %'], width=w, label='α·m (decrease-key)')
|
||||
|
||||
k3_bin, k3_fib = get_param("k3 (E)")
|
||||
k4_bin, k4_fib = get_param("k4 (alpha)")
|
||||
int_bin, int_fib = get_param("intercept")
|
||||
ax.set_xticks(x)
|
||||
ax.set_xticklabels(contrib['N'].astype(int))
|
||||
ax.set_xlabel('N (nodes)')
|
||||
ax.set_ylabel('Contribution (%)')
|
||||
ax.set_title('Runtime contribution by operation')
|
||||
ax.legend()
|
||||
ax.grid(True, alpha=0.4)
|
||||
fig.tight_layout()
|
||||
fig.savefig(f"{save_folder}/contribution_vs_N.png", dpi=300)
|
||||
plt.close(fig)
|
||||
print(f"Saved: contribution_vs_N.png")
|
||||
|
||||
# binary: k4 ~ log₂N 회귀
|
||||
log_n = np.log2(np.array(nodes)).reshape(-1, 1)
|
||||
bin_reg = LinearRegression().fit(log_n, k4_bin)
|
||||
r2_bin = r2_score(k4_bin, bin_reg.predict(log_n))
|
||||
|
||||
# fibonacci: k4 ~ log₂N 회귀
|
||||
fib_reg = LinearRegression().fit(log_n, k4_fib)
|
||||
r2_fib = r2_score(k4_fib, fib_reg.predict(log_n))
|
||||
# l
|
||||
def mean_l():
|
||||
return results["l"].mean()
|
||||
|
||||
n_line = np.linspace(min(nodes), max(nodes), 300)
|
||||
log_n_line = np.log2(n_line).reshape(-1, 1)
|
||||
|
||||
print(f"\nbinary log₂N regression: coef={bin_reg.coef_[0]:.4e}, intercept={bin_reg.intercept_:.4e}, R²={r2_bin:.4f}")
|
||||
|
||||
# Plot
|
||||
def plot_l():
|
||||
fig, ax = plt.subplots(figsize=(7, 5))
|
||||
ax.plot(nodes, k4_bin, marker="o", color="steelblue", label="binary k4")
|
||||
ax.plot(nodes, k4_fib, marker="s", color="darkorange", label="fibonacci k4")
|
||||
ax.plot(n_line, bin_reg.predict(log_n_line), color="steelblue", linestyle="--", linewidth=1.5,
|
||||
label=f"binary fit (∝ log₂N) R²={r2_bin:.3f}")
|
||||
ax.plot(n_line, fib_reg.predict(log_n_line), color="steelblue", linestyle="--", linewidth=1.5,
|
||||
label=f"fibonacci fit (∝ log₂N) R²={r2_fib:.3f}")
|
||||
ax.plot(nodes, l_bin, marker="o", color="steelblue", label="l")
|
||||
ax.set_xlabel("N (nodes)")
|
||||
ax.set_ylabel("k4 — decrease-key cost per call [s]")
|
||||
ax.set_title("k4 (decrease-key unit cost) vs N")
|
||||
ax.set_ylabel("l — add + extract-min unit cost [s]")
|
||||
ax.set_title("l (add + extract-min unit cost) vs N")
|
||||
ax.legend(fontsize=8)
|
||||
ax.grid(True, alpha=0.4)
|
||||
fig.tight_layout()
|
||||
fig.savefig(f"{save_folder}/k4_vs_N.png", dpi=300)
|
||||
fig.savefig(f"{save_folder}/l_vs_N.png", dpi=300)
|
||||
plt.close(fig)
|
||||
print(f"Saved: {save_folder}/k4_vs_N.png")
|
||||
|
||||
print(f"Saved: {save_folder}/l_vs_N.png")
|
||||
|
||||
# k3
|
||||
fig, ax = plt.subplots(figsize=(7, 5))
|
||||
ax.plot(nodes, k3_bin, marker="o", color="steelblue", label="binary k3")
|
||||
ax.plot(nodes, k3_fib, marker="s", color="darkorange", label="fibonacci k3")
|
||||
def regression_k3():
|
||||
n_arr = np.array(nodes, dtype=float)
|
||||
|
||||
def exp_conv(n, a, b, c):
|
||||
return a * np.exp(-b * n) + c
|
||||
|
||||
k3_arr = np.array(k3_bin, dtype=float)
|
||||
popt_ec, _ = curve_fit(exp_conv, n_arr, k3_arr,
|
||||
p0=[float(k3_arr.max() - k3_arr.min()), 1/float(n_arr.mean()), float(k3_arr.min())],
|
||||
maxfev=20000)
|
||||
|
||||
return popt_ec
|
||||
|
||||
def plot_k3():
|
||||
n_arr = np.array(nodes, dtype=float)
|
||||
n_line = np.linspace(min(nodes), max(nodes), 300)
|
||||
|
||||
def exp_conv(n, a, b, c):
|
||||
return a * np.exp(-b * n) + c
|
||||
|
||||
k3_arr = np.array(k3_bin, dtype=float)
|
||||
popt_ec, _ = curve_fit(exp_conv, n_arr, k3_arr,
|
||||
p0=[float(k3_arr.max() - k3_arr.min()), 1/float(n_arr.mean()), float(k3_arr.min())],
|
||||
maxfev=20000)
|
||||
pred_ec = exp_conv(n_line, *popt_ec)
|
||||
r2_ec = r2_score(k3_bin, exp_conv(n_arr, *popt_ec))
|
||||
|
||||
print("\n=== k3 exp_conv regression ===")
|
||||
print("a * exp(-b*N) + c")
|
||||
print(popt_ec)
|
||||
|
||||
fig, ax = plt.subplots(figsize=(9, 5))
|
||||
ax.plot(nodes, k3_bin, marker="o", color="black", zorder=5, label="k3 (data)")
|
||||
ax.plot(n_line, pred_ec, linestyle="--", linewidth=1.5, label=f"exp conv R²={r2_ec:.4f}")
|
||||
ax.set_xlabel("N (nodes)")
|
||||
ax.set_ylabel("k3 — iteration cost per call [s]")
|
||||
ax.set_title("k3 (iteration unit cost) vs N")
|
||||
ax.set_title("k3 (iteration unit cost) vs N — model comparison")
|
||||
ax.legend(fontsize=8)
|
||||
ax.grid(True, alpha=0.4)
|
||||
fig.tight_layout()
|
||||
@@ -128,69 +169,87 @@ plt.close(fig)
|
||||
print(f"Saved: {save_folder}/k3_vs_N.png")
|
||||
|
||||
|
||||
# Intercept
|
||||
# m
|
||||
def regression_m():
|
||||
log_n = np.log2(np.array(nodes)).reshape(-1, 1)
|
||||
reg = LinearRegression().fit(log_n, m_bin)
|
||||
return (reg.coef_[0], reg.intercept_)
|
||||
|
||||
def plot_m():
|
||||
log_n = np.log2(np.array(nodes)).reshape(-1, 1)
|
||||
reg = LinearRegression().fit(log_n, m_bin)
|
||||
r2_bin = r2_score(m_bin, reg.predict(log_n))
|
||||
|
||||
n_line = np.linspace(min(nodes), max(nodes), 300)
|
||||
log_n_line = np.log2(n_line).reshape(-1, 1)
|
||||
|
||||
print("\n=== m log regression ===")
|
||||
print("m = a * log_2(N) + b")
|
||||
print(reg.coef_[0], reg.intercept_)
|
||||
|
||||
fig, ax = plt.subplots(figsize=(7, 5))
|
||||
ax.plot(nodes, int_bin, marker="o", color="steelblue", label="binary k4")
|
||||
ax.plot(nodes, int_fib, marker="s", color="darkorange", label="fibonacci k4")
|
||||
ax.plot(nodes, m_bin, marker="o", color="steelblue", label="binary k4")
|
||||
ax.plot(n_line, reg.predict(log_n_line), color="steelblue", linestyle="--", linewidth=1.5,
|
||||
label=f"fit (∝ log₂N) R²={r2_bin:.3f}")
|
||||
ax.set_xlabel("N (nodes)")
|
||||
# ax.set_ylabel("k4 — decrease-key cost per call [s]")
|
||||
# ax.set_title("k4 (decrease-key unit cost) vs N")
|
||||
ax.set_ylabel("m — decrease-key cost per call [s]")
|
||||
ax.set_title("m (decrease-key unit cost) vs N")
|
||||
ax.legend(fontsize=8)
|
||||
ax.grid(True, alpha=0.4)
|
||||
fig.tight_layout()
|
||||
fig.savefig(f"{save_folder}/int_vs_N.png", dpi=300)
|
||||
fig.savefig(f"{save_folder}/m_vs_N.png", dpi=300)
|
||||
plt.close(fig)
|
||||
print(f"Saved: {save_folder}/int_vs_N.png")
|
||||
print(f"Saved: {save_folder}/m_vs_N.png")
|
||||
|
||||
|
||||
# ── VIF Check ──────────────────────────────────────────────────────────────────
|
||||
# relax_success = ratio × relax_attempts → 두 변수가 선형 상관될 수 있음
|
||||
# VIF = 1 / (1 - R²), where R² is from regressing X1 on X2 (2-predictor case)
|
||||
# VIF > 10: severe multicollinearity, coefficients become unstable
|
||||
# Initial process
|
||||
csv_file = "results/synthetic_data/raw/20260421_031740.csv"
|
||||
save_folder = f"results/synthetic_data/derived/{os.path.splitext(os.path.basename(csv_file))[0]}/processing_time_analysis"
|
||||
os.makedirs(save_folder, exist_ok=True)
|
||||
|
||||
vif_records = []
|
||||
df = pd.read_csv(csv_file)
|
||||
nodes = sorted(df["nodes"].unique())
|
||||
df = df[df["algorithm"] == "binary"]
|
||||
|
||||
records = []
|
||||
|
||||
for algo in algos:
|
||||
sub = df[df["algorithm"] == algo]
|
||||
for n in nodes:
|
||||
g = sub[sub["nodes"] == n]
|
||||
g = df[df["nodes"] == n]
|
||||
|
||||
X = g[["relax_attempts", "relax_success"]].to_numpy()
|
||||
y = g["time"].to_numpy()
|
||||
|
||||
# Regress relax_attempts on relax_success
|
||||
reg_vif = LinearRegression().fit(X[:, 1].reshape(-1, 1), X[:, 0])
|
||||
r2_vif = r2_score(X[:, 0], reg_vif.predict(X[:, 1].reshape(-1, 1)))
|
||||
vif = 1 / (1 - r2_vif) if r2_vif < 1.0 else float("inf")
|
||||
model = LinearRegression().fit(X, y)
|
||||
r2 = r2_score(y, model.predict(X))
|
||||
|
||||
# Pearson correlation (simpler diagnostic)
|
||||
corr = np.corrcoef(X[:, 0], X[:, 1])[0, 1]
|
||||
l = model.intercept_ / n
|
||||
k3 = model.coef_[0]
|
||||
m = model.coef_[1]
|
||||
|
||||
vif_records.append({
|
||||
"algorithm": algo,
|
||||
records.append({
|
||||
"N": n,
|
||||
"corr(E, alpha)": round(corr, 6),
|
||||
"R2_vif": round(r2_vif, 6),
|
||||
"VIF": round(vif, 2),
|
||||
"log2N": round(np.log2(n), 4),
|
||||
"l": l,
|
||||
"k3": k3,
|
||||
"m": m,
|
||||
"r2": r2,
|
||||
"data": len(g),
|
||||
})
|
||||
|
||||
vif_df = pd.DataFrame(vif_records)
|
||||
results = pd.DataFrame(records)
|
||||
grouped = results.set_index(["N"])
|
||||
l_bin = grouped.loc[nodes, "l"].values
|
||||
k3_bin = grouped.loc[nodes, "k3"].values
|
||||
m_bin = grouped.loc[nodes, "m"].values
|
||||
|
||||
for algo in algos:
|
||||
print(f"\n=== VIF — {algo} ===")
|
||||
v = vif_df[vif_df["algorithm"] == algo][["N", "corr(E, alpha)", "R2_vif", "VIF"]]
|
||||
print(v.to_string(index=False))
|
||||
# Directly run
|
||||
if __name__ == "__main__":
|
||||
r = results[["N","log2N","l","k3","m","r2","data"]]
|
||||
print("=== Regression Result ===")
|
||||
print(r.to_string(index=False))
|
||||
print("\n=== l representative value ===\n", results["l"].describe(), sep="")
|
||||
|
||||
# Plot VIF vs N
|
||||
fig, ax = plt.subplots(figsize=(7, 4))
|
||||
for algo, color, marker in [("binary", "steelblue", "o"), ("fibonacci", "darkorange", "s")]:
|
||||
v = vif_df[vif_df["algorithm"] == algo]
|
||||
ax.plot(v["N"], v["VIF"], marker=marker, color=color, label=algo)
|
||||
ax.axhline(10, color="red", linestyle="--", linewidth=1.2, label="VIF = 10 (threshold)")
|
||||
ax.set_xlabel("N (nodes)")
|
||||
ax.set_ylabel("VIF")
|
||||
ax.set_title("VIF (relax_attempts vs relax_success) per N")
|
||||
ax.legend(fontsize=8)
|
||||
ax.grid(True, alpha=0.4)
|
||||
fig.tight_layout()
|
||||
fig.savefig(f"{save_folder}/vif_vs_N.png", dpi=300)
|
||||
plt.close(fig)
|
||||
print(f"\nSaved: {save_folder}/vif_vs_N.png")
|
||||
contribution()
|
||||
plot_l()
|
||||
plot_k3()
|
||||
plot_m()
|
||||
@@ -0,0 +1,12 @@
|
||||
file,nodes,density,real_time,predict_time,time_abs_err,time_rel_err,real_relax,pred_relax,relax_abs_err,relax_rel_err
|
||||
USA-road-d.BAY.gr,321270,3.1126660606740256e-06,1.4480979782529175,3.3724499040809435,1.924351925828026,1.3288824062510556,346645.1,389782.7129779032,43137.61297790322,0.12444316385231818
|
||||
USA-road-d.CAL.gr,1890815,5.28873029749341e-07,11.773648942820728,26.03493003074116,14.261281087920434,1.2112881195270053,2041621.3,2293822.6170662674,252201.31706626737,0.12352992059118278
|
||||
USA-road-d.COL.gr,435666,2.295346872795234e-06,2.1052418619394304,4.790558218327483,2.6853163563880527,1.2755381720911796,466464.6,525562.0112348724,59097.411234872416,0.12669216749753875
|
||||
USA-road-d.CTR.gr,14081816,7.101357822223686e-08,150.855609417893,243.13016641806897,92.27455700017597,0.6116746825407162,15088776.7,16872817.887859974,1784041.1878599748,0.11823630393178096
|
||||
USA-road-d.E.gr,3598623,2.7788422287310765e-07,25.344683812279253,53.259053461467694,27.91436964918844,1.1013895401474372,3854119.5,4318800.426906383,464680.92690638267,0.12056733759977672
|
||||
USA-road-d.FLA.gr,1070376,9.342528873069174e-07,5.882949292566627,13.671828815286858,7.788879522720231,1.3239752945961702,1172517.2,1303931.222544609,131414.02254460915,0.11207854566620358
|
||||
USA-road-d.LKS.gr,2758119,3.625662000559574e-07,18.412745520938188,39.716847901458685,21.304102380520497,1.1570301863073262,2985824.2,3329894.377916632,344070.17791663203,0.11523457339405047
|
||||
USA-road-d.NE.gr,1524453,6.559738555054505e-07,9.241645735129714,20.35943404405816,11.117788308928445,1.203009575087591,1662186.0,1846516.3753919743,184330.37539197435,0.11089635900673832
|
||||
USA-road-d.NW.gr,1207945,8.278536321652837e-07,7.025815531611443,15.370217386488994,8.344401854877551,1.18767733330506,1276188.4,1440752.2662958466,164563.86629584664,0.1289495080004227
|
||||
USA-road-d.NY.gr,264346,3.782949489950136e-06,1.2315112767741083,2.703922427878197,1.4724111511040885,1.1956132102671502,298874.0,323310.8678629489,24436.867862948915,0.0817631104175971
|
||||
USA-road-d.W.gr,6262104,1.596907875342735e-07,49.62423939416185,99.40809560735944,49.783856213197595,1.0032165091290957,6713999.9,7545685.673283888,831685.7732838877,0.1238733669453715
|
||||
|
|
After Width: | Height: | Size: 196 KiB |
|
After Width: | Height: | Size: 27 KiB |
|
After Width: | Height: | Size: 23 KiB |
|
After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 23 KiB |
|
After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 27 KiB |
|
After Width: | Height: | Size: 28 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 27 KiB |
|
After Width: | Height: | Size: 23 KiB |
|
After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 27 KiB |
|
After Width: | Height: | Size: 22 KiB |
|
After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 27 KiB |
|
After Width: | Height: | Size: 22 KiB |
|
After Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 27 KiB |
|
After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 27 KiB |
|
After Width: | Height: | Size: 24 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 27 KiB |
|
After Width: | Height: | Size: 27 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 27 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 21 KiB |
|
After Width: | Height: | Size: 27 KiB |
|
After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 27 KiB |
|
After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 16 KiB |
@@ -0,0 +1,13 @@
|
||||
file,nodes,edges,density,mean,std,min,max,skew,skew_log
|
||||
USA-road-d.BAY.gr,321270,800172,7.752546065787626e-06,1630.1681588458482,2386.7045768397993,1,94305,7.110114372700498,0.16044788774575194
|
||||
USA-road-d.CAL.gr,1890815,4657742,1.302799491505654e-06,2695.012623283986,4278.842457678392,1,215354,5.481739082584321,0.2227701405536783
|
||||
USA-road-d.COL.gr,435666,1057066,5.569237829438922e-06,3499.8092796476285,5376.3280942394995,1,137384,3.838987671435596,0.1055256808572744
|
||||
USA-road-d.CTR.gr,14081816,34292496,1.7293456143704637e-07,2810.693557505992,3553.8709168151527,1,214013,3.232786156708985,-0.05333241044686632
|
||||
USA-road-d.E.gr,3598623,8778114,6.778422494768963e-07,2115.6182874817987,2747.2269567557823,1,200760,4.698292256606283,-0.03376974042257686
|
||||
USA-road-d.FLA.gr,1070376,2712798,2.3678006573202066e-06,2043.4636887818408,2918.784225018216,1,214013,7.589139893269724,-0.02456049827047587
|
||||
USA-road-d.LKS.gr,2758119,6885658,9.051480196455932e-07,2718.752572666258,3469.0998841906344,1,138911,3.180604909943747,-0.01305026326759834
|
||||
USA-road-d.NE.gr,1524453,3897636,1.6771560927891833e-06,1714.9349631417608,2012.7457601226556,1,63247,4.468783827714119,-0.10086251750655957
|
||||
USA-road-d.NW.gr,1207945,2840208,1.9465079638534307e-06,3335.882937446835,4833.083995354688,1,128569,3.8192258047312584,0.10593733038666867
|
||||
USA-road-d.NY.gr,264346,733846,1.0501735791977771e-05,1293.30334974913,1130.0827148284277,1,36946,5.000616934089491,-0.4346064788879669
|
||||
USA-road-d.USA.gr,23947347,58333344,1.0171899885042247e-07,2950.3220612553946,4071.6936918866986,1,368855,4.115449604267796,0.028094728585016236
|
||||
USA-road-d.W.gr,6262104,15248146,3.888450358429924e-07,3743.8556528774056,5437.827786532141,1,368855,3.93066656249113,0.07644888465508759
|
||||
|
@@ -0,0 +1,12 @@
|
||||
file,nodes,density,sigma,predict_time,relax_success
|
||||
USA-road-d.BAY.gr,321270,7.752546065787626e-06,1.0702107315071692,3.3724499040809435,389782.7129779032
|
||||
USA-road-d.CAL.gr,1890815,1.302799491505654e-06,1.1219073176592416,26.034930030741158,2293822.6170662674
|
||||
USA-road-d.COL.gr,435666,5.569237829438922e-06,1.100860435432471,4.790558218327483,525562.0112348724
|
||||
USA-road-d.CTR.gr,14081816,1.7293456143704637e-07,0.9772535661560627,243.13016641806897,16872817.887859974
|
||||
USA-road-d.E.gr,3598623,6.778422494768963e-07,0.9940499562397719,53.259053461467694,4318800.426906383
|
||||
USA-road-d.FLA.gr,1070376,2.3678006573202066e-06,1.0544758252832689,13.671828815286858,1303931.222544609
|
||||
USA-road-d.LKS.gr,2758119,9.051480196455932e-07,0.9829953849218592,39.716847901458685,3329894.3779166318
|
||||
USA-road-d.NE.gr,1524453,1.6771560927891831e-06,0.9306113085213831,20.35943404405816,1846516.3753919743
|
||||
USA-road-d.NW.gr,1207945,1.9465079638534307e-06,1.0635329408043555,15.370217386488994,1440752.2662958466
|
||||
USA-road-d.NY.gr,264346,1.0501735791977771e-05,0.7532005416853287,2.703922427878197,323310.8678629489
|
||||
USA-road-d.W.gr,6262104,3.888450358429924e-07,1.0651355634966029,99.40809560735943,7545685.673283888
|
||||
|
@@ -0,0 +1,111 @@
|
||||
file,nodes,density,start,time,trial,extract_min_calls,relax_attempts,relax_success
|
||||
USA-road-d.BAY.gr,321270,3.1126660606740256e-06,58370,1.5016326252371073,1,321271,800172,346822
|
||||
USA-road-d.BAY.gr,321270,3.1126660606740256e-06,20213,1.4103531325235963,2,321271,800172,346452
|
||||
USA-road-d.BAY.gr,321270,3.1126660606740256e-06,214191,1.4055922022089362,3,321271,800172,346622
|
||||
USA-road-d.BAY.gr,321270,3.1126660606740256e-06,142542,1.4575047669932246,4,321271,800172,346708
|
||||
USA-road-d.BAY.gr,321270,3.1126660606740256e-06,40047,1.400578111410141,5,321271,800172,346464
|
||||
USA-road-d.BAY.gr,321270,3.1126660606740256e-06,184469,1.4637951953336596,6,321271,800172,346674
|
||||
USA-road-d.BAY.gr,321270,3.1126660606740256e-06,287393,1.4742575036361814,7,321271,800172,346949
|
||||
USA-road-d.BAY.gr,321270,3.1126660606740256e-06,35067,1.4049286907538772,8,321271,800172,346480
|
||||
USA-road-d.BAY.gr,321270,3.1126660606740256e-06,260853,1.4825252210721374,9,321271,800172,346572
|
||||
USA-road-d.BAY.gr,321270,3.1126660606740256e-06,127674,1.4798123333603144,10,321271,800172,346708
|
||||
USA-road-d.CAL.gr,1890815,5.28873029749341e-07,1340976,11.700912859290838,1,1890816,4657742,2041692
|
||||
USA-road-d.CAL.gr,1890815,5.28873029749341e-07,80850,11.974522607401013,2,1890816,4657742,2041467
|
||||
USA-road-d.CAL.gr,1890815,5.28873029749341e-07,856762,11.285684999078512,3,1890816,4657742,2041317
|
||||
USA-road-d.CAL.gr,1890815,5.28873029749341e-07,570165,11.620251935906708,4,1890816,4657742,2041600
|
||||
USA-road-d.CAL.gr,1890815,5.28873029749341e-07,1862834,12.29569726344198,5,1890816,4657742,2042879
|
||||
USA-road-d.CAL.gr,1890815,5.28873029749341e-07,737876,11.645197866484523,6,1890816,4657742,2041418
|
||||
USA-road-d.CAL.gr,1890815,5.28873029749341e-07,1149571,11.706462999805808,7,1890816,4657742,2041071
|
||||
USA-road-d.CAL.gr,1890815,5.28873029749341e-07,140266,11.598129130899906,8,1890816,4657742,2041484
|
||||
USA-road-d.CAL.gr,1890815,5.28873029749341e-07,1043410,12.247627052478492,9,1890816,4657742,2042659
|
||||
USA-road-d.CAL.gr,1890815,5.28873029749341e-07,510694,11.662002713419497,10,1890816,4657742,2040626
|
||||
USA-road-d.COL.gr,435666,2.295346872795234e-06,335244,2.0853628125041723,1,435667,1057066,465625
|
||||
USA-road-d.COL.gr,435666,2.295346872795234e-06,20213,2.144427233375609,2,435667,1057066,467345
|
||||
USA-road-d.COL.gr,435666,2.295346872795234e-06,214191,2.114374107681215,3,435667,1057066,466648
|
||||
USA-road-d.COL.gr,435666,2.295346872795234e-06,142542,2.120543018914759,4,435667,1057066,465686
|
||||
USA-road-d.COL.gr,435666,2.295346872795234e-06,40047,2.1248806063085794,5,435667,1057066,467012
|
||||
USA-road-d.COL.gr,435666,2.295346872795234e-06,184469,2.0900219501927495,6,435667,1057066,467101
|
||||
USA-road-d.COL.gr,435666,2.295346872795234e-06,287393,2.088465922512114,7,435667,1057066,465898
|
||||
USA-road-d.COL.gr,435666,2.295346872795234e-06,35067,2.055499041453004,8,435667,1057066,466346
|
||||
USA-road-d.COL.gr,435666,2.295346872795234e-06,260853,2.106315042823553,9,435667,1057066,466045
|
||||
USA-road-d.COL.gr,435666,2.295346872795234e-06,127674,2.122528883628547,10,435667,1057066,466940
|
||||
USA-road-d.CTR.gr,14081816,7.101357822223685e-08,10727802,147.63797961734235,1,14081817,34292496,15085500
|
||||
USA-road-d.CTR.gr,14081816,7.101357822223685e-08,646793,152.4717110991478,2,14081817,34292496,15085828
|
||||
USA-road-d.CTR.gr,14081816,7.101357822223685e-08,6854095,147.37434679828584,3,14081817,34292496,15090222
|
||||
USA-road-d.CTR.gr,14081816,7.101357822223685e-08,4561313,146.7207168545574,4,14081817,34292496,15089310
|
||||
USA-road-d.CTR.gr,14081816,7.101357822223685e-08,1281499,144.92335521336645,5,14081817,34292496,15088302
|
||||
USA-road-d.CTR.gr,14081816,7.101357822223685e-08,5903001,151.9980060569942,6,14081817,34292496,15093136
|
||||
USA-road-d.CTR.gr,14081816,7.101357822223685e-08,9196563,150.58201115578413,7,14081817,34292496,15086754
|
||||
USA-road-d.CTR.gr,14081816,7.101357822223685e-08,1122127,160.63337959814817,8,14081817,34292496,15088473
|
||||
USA-road-d.CTR.gr,14081816,7.101357822223685e-08,8347279,150.21377549041063,9,14081817,34292496,15090763
|
||||
USA-road-d.CTR.gr,14081816,7.101357822223685e-08,4085551,156.00081229489297,10,14081817,34292496,15089479
|
||||
USA-road-d.E.gr,3598623,2.7788422287310765e-07,2681951,26.585669334046543,1,3598624,8778114,3854120
|
||||
USA-road-d.E.gr,3598623,2.7788422287310765e-07,161699,24.89114887267351,2,3598624,8778114,3854369
|
||||
USA-road-d.E.gr,3598623,2.7788422287310765e-07,1713524,25.605316110886633,3,3598624,8778114,3854230
|
||||
USA-road-d.E.gr,3598623,2.7788422287310765e-07,1140329,25.308822080492973,4,3598624,8778114,3854115
|
||||
USA-road-d.E.gr,3598623,2.7788422287310765e-07,320375,24.69049290008843,5,3598624,8778114,3854181
|
||||
USA-road-d.E.gr,3598623,2.7788422287310765e-07,1475751,25.324439738877118,6,3598624,8778114,3853632
|
||||
USA-road-d.E.gr,3598623,2.7788422287310765e-07,2299141,24.49145425762981,7,3598624,8778114,3853874
|
||||
USA-road-d.E.gr,3598623,2.7788422287310765e-07,280532,25.030525494366884,8,3598624,8778114,3853513
|
||||
USA-road-d.E.gr,3598623,2.7788422287310765e-07,2086820,24.987078852020204,9,3598624,8778114,3854751
|
||||
USA-road-d.E.gr,3598623,2.7788422287310765e-07,1021388,26.531890481710434,10,3598624,8778114,3854410
|
||||
USA-road-d.FLA.gr,1070376,9.342528873069174e-07,233479,5.829158056527376,1,1070377,2712798,1172526
|
||||
USA-road-d.FLA.gr,1070376,9.342528873069174e-07,80850,5.629236044362187,2,1070377,2712798,1172819
|
||||
USA-road-d.FLA.gr,1070376,9.342528873069174e-07,856762,6.092247222550213,3,1070377,2712798,1172261
|
||||
USA-road-d.FLA.gr,1070376,9.342528873069174e-07,570165,5.794642732478678,4,1070377,2712798,1171935
|
||||
USA-road-d.FLA.gr,1070376,9.342528873069174e-07,160188,6.338571792468429,5,1070377,2712798,1172427
|
||||
USA-road-d.FLA.gr,1070376,9.342528873069174e-07,737876,5.589087597094476,6,1070377,2712798,1172419
|
||||
USA-road-d.FLA.gr,1070376,9.342528873069174e-07,661555,5.963803684338927,7,1070377,2712798,1172496
|
||||
USA-road-d.FLA.gr,1070376,9.342528873069174e-07,140266,5.9225000170990825,8,1070377,2712798,1172933
|
||||
USA-road-d.FLA.gr,1070376,9.342528873069174e-07,1043410,5.895189380273223,9,1070377,2712798,1172535
|
||||
USA-road-d.FLA.gr,1070376,9.342528873069174e-07,510694,5.77505639847368,10,1070377,2712798,1172821
|
||||
USA-road-d.LKS.gr,2758119,3.625662000559574e-07,2681951,18.157015033066273,1,2758120,6885658,2983549
|
||||
USA-road-d.LKS.gr,2758119,3.625662000559574e-07,161699,18.407539836131036,2,2758120,6885658,2984984
|
||||
USA-road-d.LKS.gr,2758119,3.625662000559574e-07,1713524,17.650306305848062,3,2758120,6885658,2986663
|
||||
USA-road-d.LKS.gr,2758119,3.625662000559574e-07,1140329,18.670193755999207,4,2758120,6885658,2986962
|
||||
USA-road-d.LKS.gr,2758119,3.625662000559574e-07,320375,18.98948601540178,5,2758120,6885658,2987160
|
||||
USA-road-d.LKS.gr,2758119,3.625662000559574e-07,1475751,18.025466823019087,6,2758120,6885658,2986589
|
||||
USA-road-d.LKS.gr,2758119,3.625662000559574e-07,2299141,19.187492373399436,7,2758120,6885658,2986325
|
||||
USA-road-d.LKS.gr,2758119,3.625662000559574e-07,280532,18.832775995135307,8,2758120,6885658,2987196
|
||||
USA-road-d.LKS.gr,2758119,3.625662000559574e-07,2086820,18.044486827217042,9,2758120,6885658,2985176
|
||||
USA-road-d.LKS.gr,2758119,3.625662000559574e-07,1021388,18.162692244164646,10,2758120,6885658,2983638
|
||||
USA-road-d.NE.gr,1524453,6.559738555054505e-07,1340976,9.341399503871799,1,1524454,3897636,1662461
|
||||
USA-road-d.NE.gr,1524453,6.559738555054505e-07,80850,9.408807075582445,2,1524454,3897636,1662355
|
||||
USA-road-d.NE.gr,1524453,6.559738555054505e-07,856762,8.925541747361422,3,1524454,3897636,1662635
|
||||
USA-road-d.NE.gr,1524453,6.559738555054505e-07,570165,9.530828033573925,4,1524454,3897636,1662350
|
||||
USA-road-d.NE.gr,1524453,6.559738555054505e-07,160188,9.191789707168937,5,1524454,3897636,1662661
|
||||
USA-road-d.NE.gr,1524453,6.559738555054505e-07,737876,9.331296329386532,6,1524454,3897636,1661653
|
||||
USA-road-d.NE.gr,1524453,6.559738555054505e-07,1149571,8.756359033286572,7,1524454,3897636,1662718
|
||||
USA-road-d.NE.gr,1524453,6.559738555054505e-07,140266,9.48514276649803,8,1524454,3897636,1661450
|
||||
USA-road-d.NE.gr,1524453,6.559738555054505e-07,1043410,9.385736858472228,9,1524454,3897636,1661311
|
||||
USA-road-d.NE.gr,1524453,6.559738555054505e-07,510694,9.059556296095252,10,1524454,3897636,1662266
|
||||
USA-road-d.NW.gr,1207945,8.278536321652837e-07,233479,7.389313603751361,1,1207946,2840208,1276080
|
||||
USA-road-d.NW.gr,1207945,8.278536321652837e-07,80850,6.966416142880917,2,1207946,2840208,1276366
|
||||
USA-road-d.NW.gr,1207945,8.278536321652837e-07,856762,6.913784051313996,3,1207946,2840208,1275773
|
||||
USA-road-d.NW.gr,1207945,8.278536321652837e-07,570165,7.121847254224122,4,1207946,2840208,1276268
|
||||
USA-road-d.NW.gr,1207945,8.278536321652837e-07,160188,6.965438715182245,5,1207946,2840208,1276584
|
||||
USA-road-d.NW.gr,1207945,8.278536321652837e-07,737876,6.901987076736987,6,1207946,2840208,1275937
|
||||
USA-road-d.NW.gr,1207945,8.278536321652837e-07,1149571,7.113926026970148,7,1207946,2840208,1276356
|
||||
USA-road-d.NW.gr,1207945,8.278536321652837e-07,140266,6.8150884518399835,8,1207946,2840208,1275977
|
||||
USA-road-d.NW.gr,1207945,8.278536321652837e-07,1043410,7.064307282678783,9,1207946,2840208,1276282
|
||||
USA-road-d.NW.gr,1207945,8.278536321652837e-07,510694,7.006046710535884,10,1207946,2840208,1276261
|
||||
USA-road-d.NY.gr,264346,3.7829494899501364e-06,58370,1.2052274160087109,1,264347,733846,299517
|
||||
USA-road-d.NY.gr,264346,3.7829494899501364e-06,20213,1.213974823243916,2,264347,733846,298603
|
||||
USA-road-d.NY.gr,264346,3.7829494899501364e-06,214191,1.2580120777711272,3,264347,733846,298982
|
||||
USA-road-d.NY.gr,264346,3.7829494899501364e-06,142542,1.2534150797873735,4,264347,733846,298740
|
||||
USA-road-d.NY.gr,264346,3.7829494899501364e-06,40047,1.2379327788949013,5,264347,733846,298907
|
||||
USA-road-d.NY.gr,264346,3.7829494899501364e-06,184469,1.296036041341722,6,264347,733846,299096
|
||||
USA-road-d.NY.gr,264346,3.7829494899501364e-06,165389,1.2210236238315701,7,264347,733846,299094
|
||||
USA-road-d.NY.gr,264346,3.7829494899501364e-06,35067,1.2072957074269652,8,264347,733846,298334
|
||||
USA-road-d.NY.gr,264346,3.7829494899501364e-06,260853,1.1458511827513576,9,264347,733846,298126
|
||||
USA-road-d.NY.gr,264346,3.7829494899501364e-06,127674,1.2763440366834402,10,264347,733846,299341
|
||||
USA-road-d.W.gr,6262104,1.596907875342735e-07,323397,49.22667620237917,1,6262105,15248146,6714664
|
||||
USA-road-d.W.gr,6262104,1.596907875342735e-07,3427048,50.68172278255224,2,6262105,15248146,6715602
|
||||
USA-road-d.W.gr,6262104,1.596907875342735e-07,2280657,49.40176039934158,3,6262105,15248146,6713551
|
||||
USA-road-d.W.gr,6262104,1.596907875342735e-07,640750,49.1588336545974,4,6262105,15248146,6713982
|
||||
USA-road-d.W.gr,6262104,1.596907875342735e-07,2951501,48.64302278868854,5,6262105,15248146,6714398
|
||||
USA-road-d.W.gr,6262104,1.596907875342735e-07,4598282,50.4071532683447,6,6262105,15248146,6713157
|
||||
USA-road-d.W.gr,6262104,1.596907875342735e-07,561064,49.23333119414747,7,6262105,15248146,6713560
|
||||
USA-road-d.W.gr,6262104,1.596907875342735e-07,4173640,48.62754825223237,8,6262105,15248146,6711845
|
||||
USA-road-d.W.gr,6262104,1.596907875342735e-07,2042776,51.196087097749114,9,6262105,15248146,6715362
|
||||
USA-road-d.W.gr,6262104,1.596907875342735e-07,2250806,49.66625830158591,10,6262105,15248146,6713878
|
||||
|
|
After Width: | Height: | Size: 96 KiB |
|
After Width: | Height: | Size: 100 KiB |
|
After Width: | Height: | Size: 98 KiB |
|
After Width: | Height: | Size: 96 KiB |
|
After Width: | Height: | Size: 98 KiB |
|
After Width: | Height: | Size: 99 KiB |
|
After Width: | Height: | Size: 100 KiB |
|
After Width: | Height: | Size: 101 KiB |
|
After Width: | Height: | Size: 99 KiB |
|
After Width: | Height: | Size: 101 KiB |
|
After Width: | Height: | Size: 101 KiB |
|
After Width: | Height: | Size: 96 KiB |
|
After Width: | Height: | Size: 97 KiB |
|
After Width: | Height: | Size: 96 KiB |
|
After Width: | Height: | Size: 97 KiB |
|
After Width: | Height: | Size: 98 KiB |
|
After Width: | Height: | Size: 98 KiB |
|
After Width: | Height: | Size: 98 KiB |
|
After Width: | Height: | Size: 98 KiB |
|
After Width: | Height: | Size: 99 KiB |
|
After Width: | Height: | Size: 99 KiB |
|
After Width: | Height: | Size: 96 KiB |
|
After Width: | Height: | Size: 95 KiB |
|
After Width: | Height: | Size: 100 KiB |
|
After Width: | Height: | Size: 95 KiB |
|
After Width: | Height: | Size: 96 KiB |
|
After Width: | Height: | Size: 96 KiB |
|
After Width: | Height: | Size: 96 KiB |
|
After Width: | Height: | Size: 96 KiB |
|
After Width: | Height: | Size: 96 KiB |
|
After Width: | Height: | Size: 97 KiB |
|
After Width: | Height: | Size: 97 KiB |
|
After Width: | Height: | Size: 94 KiB |
|
After Width: | Height: | Size: 97 KiB |
|
After Width: | Height: | Size: 102 KiB |
|
After Width: | Height: | Size: 97 KiB |
|
After Width: | Height: | Size: 97 KiB |
|
After Width: | Height: | Size: 99 KiB |
|
After Width: | Height: | Size: 98 KiB |