From f73b7ec5c137510bb85f28a8e1b95f5d3704dd9c Mon Sep 17 00:00:00 2001 From: Kacper Kafara Date: Thu, 1 Jun 2023 00:00:11 +0200 Subject: [PATCH 1/3] Configure venv --- .envrc | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 .envrc diff --git a/.envrc b/.envrc new file mode 100644 index 0000000..1c21d04 --- /dev/null +++ b/.envrc @@ -0,0 +1,2 @@ +source .venv/bin/activate +unset PS1 From 8960e1871fa3c7a04244659224a6ac4cab81b0ba Mon Sep 17 00:00:00 2001 From: Kacper Kafara Date: Thu, 1 Jun 2023 00:00:35 +0200 Subject: [PATCH 2/3] Add jssp module --- src/ectoolkit/jssp.py | 1 + src/ectoolkit/jssp/__init__.py | 0 2 files changed, 1 insertion(+) create mode 100644 src/ectoolkit/jssp.py create mode 100644 src/ectoolkit/jssp/__init__.py diff --git a/src/ectoolkit/jssp.py b/src/ectoolkit/jssp.py new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/src/ectoolkit/jssp.py @@ -0,0 +1 @@ + diff --git a/src/ectoolkit/jssp/__init__.py b/src/ectoolkit/jssp/__init__.py new file mode 100644 index 0000000..e69de29 From bbbee0f1c050caa15664d9132b67c63e0cf3cab3 Mon Sep 17 00:00:00 2001 From: Kacper Kafara Date: Thu, 1 Jun 2023 10:28:06 +0200 Subject: [PATCH 3/3] Add basic plotting utility (single graph) for jssp --- .gitignore | 2 ++ src/ectoolkit/jssp.py | 17 +++++++++++++++ src/ectoolkit/jssp/__init__.py | 0 src/ectoolkit/main.py | 38 +++++++++++++++++++++++++++++++++- 4 files changed, 56 insertions(+), 1 deletion(-) delete mode 100644 src/ectoolkit/jssp/__init__.py diff --git a/.gitignore b/.gitignore index a533ef2..75c6e58 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,5 @@ .env/ .vscode/ *local.* +test-data/ +__pycache__/ diff --git a/src/ectoolkit/jssp.py b/src/ectoolkit/jssp.py index 8b13789..1ea474a 100644 --- a/src/ectoolkit/jssp.py +++ b/src/ectoolkit/jssp.py @@ -1 +1,18 @@ +import polars as pl +import matplotlib.pyplot as plt + +def plot_fitness_improvements(data: pl.DataFrame, plot: plt.Axes): + data = ( + data + .lazy() + .filter(pl.col('event') == 'bestingen') + .sort('gen') + .collect() + ) + + print(data) + x_data = data.get_column('gen') + y_data = data.get_column('fitness') + + plot.plot(x_data, y_data, marker='o', linestyle='--') diff --git a/src/ectoolkit/jssp/__init__.py b/src/ectoolkit/jssp/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/src/ectoolkit/main.py b/src/ectoolkit/main.py index 378fa8f..45069e3 100644 --- a/src/ectoolkit/main.py +++ b/src/ectoolkit/main.py @@ -1,2 +1,38 @@ +def main(): + import sys + import polars as pl + import matplotlib.pyplot as plt + from pathlib import Path + import jssp + + pl.Config.set_tbl_rows(400) + pl.Config.set_tbl_cols(10) + plt.rcParams['figure.figsize'] = (16, 9) + + assert len(sys.argv) > 1, "Expected path to a data file" + + data_file = Path(sys.argv[1]) + assert data_file.is_file(), "Pointed file does not exist or is not a regular file" + + problem_name = None + if len(sys.argv) > 2: + problem_name = sys.argv[2] + + data_df = pl.read_csv(data_file, has_header=False, new_columns=[ + "event", "gen", "time", "fitness"]).filter(pl.col('event') != 'diversity').select(pl.exclude('column_5')) + print(data_df) + + fig, plot = plt.subplots(nrows=1, ncols=1) + jssp.plot_fitness_improvements(data_df, plot) + plot.set( + title="Najlepszy osobnik w populacji w danej generacji" + + f', problem: {problem_name}' if problem_name else "", + xlabel="Generacja", + ylabel="Wartość funkcji fitness" + ) + + plt.show() + + if __name__ == "__main__": - print("Hello world") + main()