mirror of
https://github.com/ANL-CEEESA/UnitCommitment.jl.git
synced 2025-12-06 08:18:51 -06:00
Reformat Python scripts
This commit is contained in:
@@ -8,41 +8,49 @@ import seaborn as sns
|
||||
import matplotlib.pyplot as plt
|
||||
import sys
|
||||
|
||||
#easy_cutoff = 120
|
||||
# easy_cutoff = 120
|
||||
|
||||
b1 = pd.read_csv(sys.argv[1], index_col=0)
|
||||
b2 = pd.read_csv(sys.argv[2], index_col=0)
|
||||
|
||||
c1 = b1.groupby(["Group", "Instance", "Sample"])[["Optimization time (s)", "Primal bound"]].mean()
|
||||
c2 = b2.groupby(["Group", "Instance", "Sample"])[["Optimization time (s)", "Primal bound"]].mean()
|
||||
c1 = b1.groupby(["Group", "Instance", "Sample"])[
|
||||
["Optimization time (s)", "Primal bound"]
|
||||
].mean()
|
||||
c2 = b2.groupby(["Group", "Instance", "Sample"])[
|
||||
["Optimization time (s)", "Primal bound"]
|
||||
].mean()
|
||||
c1.columns = ["A Time (s)", "A Value"]
|
||||
c2.columns = ["B Time (s)", "B Value"]
|
||||
|
||||
merged = pd.concat([c1, c2], axis=1)
|
||||
merged["Speedup"] = merged["A Time (s)"] / merged["B Time (s)"]
|
||||
merged["Time diff (s)"] = merged["B Time (s)"] - merged["A Time (s)"]
|
||||
merged["Value diff (%)"] = np.round((merged["B Value"] - merged["A Value"]) / merged["A Value"] * 100.0, 5)
|
||||
merged["Value diff (%)"] = np.round(
|
||||
(merged["B Value"] - merged["A Value"]) / merged["A Value"] * 100.0, 5
|
||||
)
|
||||
merged.loc[merged.loc[:, "B Time (s)"] <= 0, "Speedup"] = float("nan")
|
||||
merged.loc[merged.loc[:, "B Time (s)"] <= 0, "Time diff (s)"] = float("nan")
|
||||
#merged = merged[(merged["A Time (s)"] >= easy_cutoff) | (merged["B Time (s)"] >= easy_cutoff)]
|
||||
# merged = merged[(merged["A Time (s)"] >= easy_cutoff) | (merged["B Time (s)"] >= easy_cutoff)]
|
||||
merged.reset_index(inplace=True)
|
||||
merged["Name"] = merged["Group"] + "/" + merged["Instance"]
|
||||
#merged = merged.sort_values(by="Speedup", ascending=False)
|
||||
# merged = merged.sort_values(by="Speedup", ascending=False)
|
||||
|
||||
|
||||
k = len(merged.groupby("Name"))
|
||||
plt.figure(figsize=(12, 0.50 * k))
|
||||
plt.rcParams['xtick.bottom'] = plt.rcParams['xtick.labelbottom'] = True
|
||||
plt.rcParams['xtick.top'] = plt.rcParams['xtick.labeltop'] = True
|
||||
plt.rcParams["xtick.bottom"] = plt.rcParams["xtick.labelbottom"] = True
|
||||
plt.rcParams["xtick.top"] = plt.rcParams["xtick.labeltop"] = True
|
||||
sns.set_style("whitegrid")
|
||||
sns.set_palette("Set1")
|
||||
sns.barplot(data=merged,
|
||||
x="Speedup",
|
||||
y="Name",
|
||||
color="tab:red",
|
||||
capsize=0.15,
|
||||
errcolor="k",
|
||||
errwidth=1.25)
|
||||
sns.barplot(
|
||||
data=merged,
|
||||
x="Speedup",
|
||||
y="Name",
|
||||
color="tab:red",
|
||||
capsize=0.15,
|
||||
errcolor="k",
|
||||
errwidth=1.25,
|
||||
)
|
||||
plt.axvline(1.0, linestyle="--", color="k")
|
||||
plt.tight_layout()
|
||||
|
||||
@@ -50,15 +58,18 @@ print("Writing tables/compare.png")
|
||||
plt.savefig("tables/compare.png", dpi=150)
|
||||
|
||||
print("Writing tables/compare.csv")
|
||||
merged.loc[:, ["Group",
|
||||
"Instance",
|
||||
"Sample",
|
||||
"A Time (s)",
|
||||
"B Time (s)",
|
||||
"Speedup",
|
||||
"Time diff (s)",
|
||||
"A Value",
|
||||
"B Value",
|
||||
"Value diff (%)",
|
||||
]
|
||||
].to_csv("tables/compare.csv", index_label="Index")
|
||||
merged.loc[
|
||||
:,
|
||||
[
|
||||
"Group",
|
||||
"Instance",
|
||||
"Sample",
|
||||
"A Time (s)",
|
||||
"B Time (s)",
|
||||
"Speedup",
|
||||
"Time diff (s)",
|
||||
"A Value",
|
||||
"B Value",
|
||||
"Value diff (%)",
|
||||
],
|
||||
].to_csv("tables/compare.csv", index_label="Index")
|
||||
|
||||
@@ -9,8 +9,8 @@ from tabulate import tabulate
|
||||
|
||||
|
||||
def process_all_log_files():
|
||||
pathlist = list(Path(".").glob('results/*/*/*.log'))
|
||||
pathlist += list(Path(".").glob('results/*/*.log'))
|
||||
pathlist = list(Path(".").glob("results/*/*/*.log"))
|
||||
pathlist += list(Path(".").glob("results/*/*.log"))
|
||||
rows = []
|
||||
for path in pathlist:
|
||||
if ".ipy" in str(path):
|
||||
@@ -22,8 +22,8 @@ def process_all_log_files():
|
||||
df.index = range(len(df))
|
||||
print("Writing tables/benchmark.csv")
|
||||
df.to_csv("tables/benchmark.csv", index_label="Index")
|
||||
|
||||
|
||||
|
||||
|
||||
def process(filename):
|
||||
parts = filename.replace(".log", "").split("/")
|
||||
group_name = "/".join(parts[1:-1])
|
||||
@@ -45,56 +45,74 @@ def process(filename):
|
||||
read_time, model_time, isf_time, total_time = None, None, None, None
|
||||
cb_calls, cb_time = 0, 0.0
|
||||
transmission_count, transmission_time, transmission_calls = 0, 0.0, 0
|
||||
|
||||
|
||||
# m = re.search("case([0-9]*)", instance_name)
|
||||
# n_buses = int(m.group(1))
|
||||
n_buses = 0
|
||||
|
||||
|
||||
with open(filename) as file:
|
||||
for line in file.readlines():
|
||||
m = re.search(r"Explored ([0-9.e+]*) nodes \(([0-9.e+]*) simplex iterations\) in ([0-9.e+]*) seconds", line)
|
||||
m = re.search(
|
||||
r"Explored ([0-9.e+]*) nodes \(([0-9.e+]*) simplex iterations\) in ([0-9.e+]*) seconds",
|
||||
line,
|
||||
)
|
||||
if m is not None:
|
||||
nodes += int(m.group(1))
|
||||
simplex_iterations += int(m.group(2))
|
||||
optimize_time += float(m.group(3))
|
||||
|
||||
m = re.search(r"Best objective ([0-9.e+]*), best bound ([0-9.e+]*), gap ([0-9.e+]*)\%", line)
|
||||
|
||||
m = re.search(
|
||||
r"Best objective ([0-9.e+]*), best bound ([0-9.e+]*), gap ([0-9.e+]*)\%",
|
||||
line,
|
||||
)
|
||||
if m is not None:
|
||||
primal_bound = float(m.group(1))
|
||||
dual_bound = float(m.group(2))
|
||||
gap = round(float(m.group(3)), 3)
|
||||
|
||||
m = re.search(r"Root relaxation: objective ([0-9.e+]*), ([0-9.e+]*) iterations, ([0-9.e+]*) seconds", line)
|
||||
|
||||
m = re.search(
|
||||
r"Root relaxation: objective ([0-9.e+]*), ([0-9.e+]*) iterations, ([0-9.e+]*) seconds",
|
||||
line,
|
||||
)
|
||||
if m is not None:
|
||||
root_obj = float(m.group(1))
|
||||
root_iterations += int(m.group(2))
|
||||
root_time += float(m.group(3))
|
||||
|
||||
m = re.search(r"Presolved: ([0-9.e+]*) rows, ([0-9.e+]*) columns, ([0-9.e+]*) nonzeros", line)
|
||||
|
||||
m = re.search(
|
||||
r"Presolved: ([0-9.e+]*) rows, ([0-9.e+]*) columns, ([0-9.e+]*) nonzeros",
|
||||
line,
|
||||
)
|
||||
if m is not None:
|
||||
n_rows_presolved = int(m.group(1))
|
||||
n_cols_presolved = int(m.group(2))
|
||||
n_nz_presolved = int(m.group(3))
|
||||
|
||||
m = re.search(r"Optimize a model with ([0-9.e+]*) rows, ([0-9.e+]*) columns and ([0-9.e+]*) nonzeros", line)
|
||||
|
||||
m = re.search(
|
||||
r"Optimize a model with ([0-9.e+]*) rows, ([0-9.e+]*) columns and ([0-9.e+]*) nonzeros",
|
||||
line,
|
||||
)
|
||||
if m is not None:
|
||||
n_rows_orig = int(m.group(1))
|
||||
n_cols_orig = int(m.group(2))
|
||||
n_nz_orig = int(m.group(3))
|
||||
|
||||
m = re.search(r"Variable types: ([0-9.e+]*) continuous, ([0-9.e+]*) integer \(([0-9.e+]*) binary\)", line)
|
||||
|
||||
m = re.search(
|
||||
r"Variable types: ([0-9.e+]*) continuous, ([0-9.e+]*) integer \(([0-9.e+]*) binary\)",
|
||||
line,
|
||||
)
|
||||
if m is not None:
|
||||
n_cont_vars_presolved = int(m.group(1))
|
||||
n_bin_vars_presolved = int(m.group(3))
|
||||
|
||||
n_bin_vars_presolved = int(m.group(3))
|
||||
|
||||
m = re.search(r"Read problem in ([0-9.e+]*) seconds", line)
|
||||
if m is not None:
|
||||
read_time = float(m.group(1))
|
||||
|
||||
|
||||
m = re.search(r"Computed ISF in ([0-9.e+]*) seconds", line)
|
||||
if m is not None:
|
||||
isf_time = float(m.group(1))
|
||||
|
||||
|
||||
m = re.search(r"Built model in ([0-9.e+]*) seconds", line)
|
||||
if m is not None:
|
||||
model_time = float(m.group(1))
|
||||
@@ -103,7 +121,10 @@ def process(filename):
|
||||
if m is not None:
|
||||
total_time = float(m.group(1))
|
||||
|
||||
m = re.search(r"User-callback calls ([0-9.e+]*), time in user-callback ([0-9.e+]*) sec", line)
|
||||
m = re.search(
|
||||
r"User-callback calls ([0-9.e+]*), time in user-callback ([0-9.e+]*) sec",
|
||||
line,
|
||||
)
|
||||
if m is not None:
|
||||
cb_calls = int(m.group(1))
|
||||
cb_time = float(m.group(2))
|
||||
@@ -116,7 +137,7 @@ def process(filename):
|
||||
m = re.search(r".*MW overflow", line)
|
||||
if m is not None:
|
||||
transmission_count += 1
|
||||
|
||||
|
||||
return {
|
||||
"Group": group_name,
|
||||
"Instance": instance_name,
|
||||
@@ -150,6 +171,7 @@ def process(filename):
|
||||
"Transmission screening calls": transmission_calls,
|
||||
}
|
||||
|
||||
|
||||
def generate_chart():
|
||||
import pandas as pd
|
||||
import matplotlib.pyplot as plt
|
||||
@@ -159,7 +181,9 @@ def generate_chart():
|
||||
files = ["tables/benchmark.csv"]
|
||||
for f in files:
|
||||
table = pd.read_csv(f, index_col=0)
|
||||
table.loc[:, "Instance"] = table.loc[:,"Group"] + "/" + table.loc[:,"Instance"]
|
||||
table.loc[:, "Instance"] = (
|
||||
table.loc[:, "Group"] + "/" + table.loc[:, "Instance"]
|
||||
)
|
||||
table.loc[:, "Filename"] = f
|
||||
tables += [table]
|
||||
benchmark = pd.concat(tables, sort=True)
|
||||
@@ -168,16 +192,18 @@ def generate_chart():
|
||||
plt.figure(figsize=(12, 0.50 * k))
|
||||
sns.set_style("whitegrid")
|
||||
sns.set_palette("Set1")
|
||||
sns.barplot(y="Instance",
|
||||
x="Total time (s)",
|
||||
color="tab:red",
|
||||
capsize=0.15,
|
||||
errcolor="k",
|
||||
errwidth=1.25,
|
||||
data=benchmark);
|
||||
sns.barplot(
|
||||
y="Instance",
|
||||
x="Total time (s)",
|
||||
color="tab:red",
|
||||
capsize=0.15,
|
||||
errcolor="k",
|
||||
errwidth=1.25,
|
||||
data=benchmark,
|
||||
)
|
||||
plt.tight_layout()
|
||||
print("Writing tables/benchmark.png")
|
||||
plt.savefig("tables/benchmark.png", dpi=150);
|
||||
plt.savefig("tables/benchmark.png", dpi=150)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
Reference in New Issue
Block a user