diff --git a/codes/experiments/real_data/analysis/graph_distribution.py b/codes/experiments/real_data/analysis/graph_distribution.py index d6fe9ed..174cc2d 100644 --- a/codes/experiments/real_data/analysis/graph_distribution.py +++ b/codes/experiments/real_data/analysis/graph_distribution.py @@ -40,8 +40,6 @@ def visualize_weights(file): print(f'Kurtosis (original): {kurt:.4f} (정규 기준: 0, excess)') print(f'Kurtosis (log): {kurt_log:.4f} (정규 기준: 0, excess)') - return - save_folder = f"{res_folder}/{file}" os.makedirs(save_folder, exist_ok=True) diff --git a/codes/experiments/synthetic_data/analysis/call_number_analysis.py b/codes/experiments/synthetic_data/analysis/call_number_analysis.py index e2e8b16..d240a7a 100644 --- a/codes/experiments/synthetic_data/analysis/call_number_analysis.py +++ b/codes/experiments/synthetic_data/analysis/call_number_analysis.py @@ -8,7 +8,7 @@ import numpy as np # Initial Setup -csv_file = "results/synthetic_data/raw/20260418_095837.csv" +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) @@ -45,10 +45,8 @@ def E_vs_relax_attempts(df): print(f"Saved E vs relax_attempts plots to {save_folder}") -# E_vs_relax_attempts(df) - -# sigma vs relax_success_ratio +# 2. sigma vs relax_success_ratio def sigma_vs_relax_success_ratio(df): rows = [] sigma_save_folder = os.path.join(save_folder, "sigma_vs_relax_ratio_controlled") @@ -114,10 +112,8 @@ def sigma_vs_relax_success_ratio(df): res.to_csv(os.path.join(sigma_save_folder, "r2.csv")) print(f"Saved controlled sigma vs relax_success_ratio plots to {sigma_save_folder}") -# sigma_vs_relax_success_ratio(df) - -# avg_degree vs relax_success_ratio +# 3. avg_degree vs relax_success_ratio def avg_degree_vs_relax_success_ratio(df): avgdeg_scatter_folder = os.path.join(save_folder, "avg_deg_vs_ratio_controlled") os.makedirs(avgdeg_scatter_folder, exist_ok=True) @@ -144,11 +140,9 @@ def avg_degree_vs_relax_success_ratio(df): print(f"Saved avg_degree vs ratio plots to {avgdeg_scatter_folder}") -# avg_degree_vs_relax_success_ratio(df) - -# log_avg_degree vs log_ratio -def log_avg_degree_vs_log_ratio(): +# 4. log_avg_degree vs log_ratio +def log_avg_degree_vs_log_ratio(df): CEILING = 1 avgdeg_loglog_folder = os.path.join(save_folder, "avgdeg_vs_ratio_loglog") os.makedirs(avgdeg_loglog_folder, exist_ok=True) @@ -227,10 +221,9 @@ def log_avg_degree_vs_log_ratio(): print(f"Saved avg_degree vs ratio log-log plots to {avgdeg_loglog_folder}") -# log_avg_degree_vs_log_ratio() - -def regime_distribution(): +# 5. sigma vs. relax_success_ratio in controlled node,density +def regime_distribution(df): r2_csv = os.path.join(save_folder, "sigma_vs_relax_ratio_controlled", "r2.csv") res = pd.read_csv(r2_csv) @@ -297,10 +290,8 @@ def regime_distribution(): print(f"Saved regime distribution plots to {regime_save_folder}") -# regime_distribution() - -# Nonlinear regression: r = (a·ln(sigma) + b) · avg_deg^c +# 6. Nonlinear regression: r = (a·ln(sigma) + b) · avg_deg^c def nonlinear_regression(df): # Filter: giant component regime only sub = df[(df["avg_degree"] >= 1) & (df["relax_success_ratio"] < 0.99)].copy() @@ -368,4 +359,10 @@ def nonlinear_regression(df): print(f"Saved nonlinear regression plots to {nlr_save_folder}") -nonlinear_regression(df) \ No newline at end of file + +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 \ No newline at end of file diff --git a/codes/experiments/synthetic_data/analysis/processing_time_analysis.py b/codes/experiments/synthetic_data/analysis/processing_time_analysis.py index b19d752..15e8329 100644 --- a/codes/experiments/synthetic_data/analysis/processing_time_analysis.py +++ b/codes/experiments/synthetic_data/analysis/processing_time_analysis.py @@ -28,7 +28,7 @@ from sklearn.metrics import r2_score # k3: cost per relax_attempt (should be equal across heaps) # k4: cost per decrease-key (binary: should scale with log2N; fibonacci: should be constant) -csv_file = "results/synthetic_data/raw/20260418_095837.csv" +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) @@ -85,6 +85,10 @@ 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)) + n_line = np.linspace(min(nodes), max(nodes), 300) log_n_line = np.log2(n_line).reshape(-1, 1) @@ -96,6 +100,8 @@ 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.set_xlabel("N (nodes)") ax.set_ylabel("k4 — decrease-key cost per call [s]") ax.set_title("k4 (decrease-key unit cost) vs N")