This commit is contained in:
2023-03-17 14:55:33 +00:00
parent bf2df8a897
commit a56f3158cb
11 changed files with 37734 additions and 60185 deletions
BIN
View File
Binary file not shown.
+603
View File
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

+23275
View File
File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 563 KiB

+69
View File
@@ -0,0 +1,69 @@
import os
from glob import glob
from pathlib import Path
import numpy as np
import pandas as pd
def read_xy(path: str):
df = pd.read_csv(path, skipinitialspace=True)
df['N'] = df.index + 1
df['r'] = (df.x ** 2 + df.y ** 2) ** 0.5
df['cr'] = df.r.cummax()
df['fd'] = np.log(df.N) / np.log(df.cr)
df['run'] = os.path.splitext(Path(path).name)[0]
return df.replace([np.inf, -np.inf], np.nan).dropna()
def read_load(load_dir: str, reader=read_xy):
paths = glob(f'{load_dir}/*.csv')
return pd.concat([reader(path) for path in paths])
def read_sp_xy(specific_probability_dir: str):
probability = float(Path(specific_probability_dir).name)
df = read_load(specific_probability_dir)
df['probability'] = probability
return df
def read_sp(sp_dir: str):
if not Path(sp_dir).exists():
raise Exception("Root does not exist")
return pd.concat([read_sp_xy(specific_probability_dir) for specific_probability_dir in glob(f'{sp_dir}/*')])
def convergent_tail_index(series, tol):
diffs = np.abs(np.ediff1d(series))
for i in range(0, len(diffs)):
if np.max(diffs[i:]) <= tol:
return i
# No convergence found
return None
def mean_of_tail(series, tol=0.05):
tail_index = convergent_tail_index(series, tol)
if tail_index is None:
raise Exception("No convergence found.")
return np.mean(series[tail_index:])
def std_of_tail(series, tol=0.05):
tail_index = convergent_tail_index(series, tol)
if tail_index is None:
raise Exception("No convergence found.")
return np.std(series[tail_index:])
def fd_stats(dfs):
fds = [mean_of_tail(df.fd, 0.1) for df in dfs]
fds_clean = [f for f in fds if f < np.inf]
return np.mean(fds_clean), np.mean(fds_clean) / np.sqrt(fds_clean.length())
+36
View File
@@ -0,0 +1,36 @@
import numpy as np
import matplotlib.pyplot as plt
from notebooks.lib import read_load
alpha = read_load("../data/alpha")
meaned_by_N = alpha.groupby('N').agg({'fd': ['mean', 'std']}) \
.reset_index() \
.replace([np.inf, -np.inf], np.nan)
without_prefix = meaned_by_N[50:]
fig, ax = plt.subplots(figsize=(6, 6))
plt.fill_between(
without_prefix.N,
# TODO Check error math here
(without_prefix['fd']['mean'] - without_prefix['fd']['std'] / np.sqrt(20)),
(without_prefix['fd']['mean'] + without_prefix['fd']['std'] / np.sqrt(20)),
alpha=0.2, label=f"Standard error band"
)
plt.plot(
without_prefix.N,
without_prefix['fd']['mean'],
color='tab:blue', label='fd mean, seeds = 20'
)
plt.plot([50, 10000], [1.71, 1.71], color='red', label='Theory')
plt.fill_between(without_prefix.N, 1.71 - 0.01, 1.71 + 0.01, alpha=0.2, label='Theory error band')
plt.xlabel("$N_C$")
plt.ylabel("$fd$ (instantaneous)")
plt.legend()
plt.savefig('../figures/nc-fd-convergence.svg')
plt.savefig('../figures/nc-fd-convergence.png')
plt.show()
File diff suppressed because one or more lines are too long
+10
View File
@@ -0,0 +1,10 @@
#!/usr/bin/env bash
# NOTE: Requires GNU parallel
KEY="$1"
MODEL="models/$KEY"
mkdir -p data/$KEY
parallel "$MODEL" '{1}' '{2}' '{3}' "data/$KEY/{1}.csv" ::: $(seq 53 100) ::: 5000 ::: 1
+4 -2
View File
@@ -3,6 +3,8 @@
# NOTE: Requires GNU parallel
MODEL="models/minimal-viable-alteration"
mkdir -p data/minimal-viable-alteration
ROOT="data/alpha"
parallel "$MODEL" '{1}' '{2}' 'data/minimal-viable-alteration/{1}-{2}.csv' ::: {1..20} ::: $(seq 1000 1000 5000)
mkdir -p $ROOT
parallel "$MODEL" '{1}' '{2}' "$ROOT/{1}.csv" ::: {1..20} ::: 10000
BIN
View File
Binary file not shown.