From 07810fb17e8d27ea03e29ba3e3a1b686497ba388 Mon Sep 17 00:00:00 2001 From: Sebastiaan la Fleur Date: Wed, 2 Oct 2024 11:02:06 +0200 Subject: [PATCH 01/14] 74: Add Gurobi to Dockerfile and update debian base to bookworm from buster.. --- Dockerfile | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index c2ee81d..183da13 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,26 @@ -FROM python:3.8-slim-buster +FROM python:3.8-slim-bookworm WORKDIR /app +RUN apt update && \ + apt install -y wget && \ + apt-get clean + +ENV GUROBI_HOME=/app/gurobi/ +ENV PATH="/app/gurobi/bin:$PATH" +ENV LD_LIBRARY_PATH="/app/gurobi/lib" +ENV CASADI_GUROBI_VERSION="110" +ENV GUROBI_VERSION_URL="11.0.3" +ENV GUROBI_VERSION_URL_MAJOR="11.0" + +# This env var is for casadi. +ENV GUROBI_VERSION="$CASADI_GUROBI_VERSION" + +# This env var is for gurobi +ENV GRB_LICENSE_FILE="/app/gurobi/gurobi.lic" + + +RUN mkdir -p /app/gurobi && \ + wget -qO- https://packages.gurobi.com/${GUROBI_VERSION_URL_MAJOR}/gurobi${GUROBI_VERSION_URL}_linux64.tar.gz | tar xvz --strip-components=2 -C /app/gurobi COPY requirements.txt /app/grow_worker/requirements.txt RUN pip install -r /app/grow_worker/requirements.txt --no-cache-dir From 13b3c1c3c421475666f688b91e7b959946d44eeb Mon Sep 17 00:00:00 2001 From: Sebastiaan la Fleur Date: Wed, 2 Oct 2024 11:04:31 +0200 Subject: [PATCH 02/14] 74: Add docker compose file to start the optimizer worker expecting the omotes infra to be available elsewhere. --- docker-compose.worker-only.yml | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 docker-compose.worker-only.yml diff --git a/docker-compose.worker-only.yml b/docker-compose.worker-only.yml new file mode 100644 index 0000000..c5c144f --- /dev/null +++ b/docker-compose.worker-only.yml @@ -0,0 +1,33 @@ +networks: + omotes: + external: true + +services: + grow_worker: + build: + context: . + environment: + INFLUXDB_HOSTNAME: omotes_influxdb + INFLUXDB_PORT: 8096 + INFLUXDB_USERNAME: root + INFLUXDB_PASSWORD: 9012 + + RABBITMQ_HOSTNAME: rabbitmq-nwn + RABBITMQ_PORT: 5672 + RABBITMQ_USERNAME: root + RABBITMQ_PASSWORD: 5678 + RABBITMQ_VIRTUALHOST: omotes_celery + + GROW_TASK_TYPE: grow_optimizer_default + LOG_LEVEL: DEBUG + volumes: + - "./gurobi.lic:/app/gurobi/gurobi.lic" + networks: + - omotes + deploy: + replicas: 3 + resources: + limits: + cpus: '4' + memory: 4gb + memswap_limit: 4gb From 4d66e4d5764c724147035b012587b42c425d8696 Mon Sep 17 00:00:00 2001 From: Sebastiaan la Fleur Date: Wed, 2 Oct 2024 11:06:35 +0200 Subject: [PATCH 03/14] 74: Add local gurobi install to gitignore. --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 12eba45..a7237ba 100644 --- a/.gitignore +++ b/.gitignore @@ -223,4 +223,5 @@ test-results.xml .env.* -temp/ \ No newline at end of file +temp/ +gurobi/ From 4ea58c170143662845a0729de31ca330d5e540ed Mon Sep 17 00:00:00 2001 From: Sebastiaan la Fleur Date: Wed, 2 Oct 2024 11:07:35 +0200 Subject: [PATCH 04/14] 74: Add Gurobi env vars for local install when running optimizer worker locally through run.sh --- run.sh | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/run.sh b/run.sh index e754c64..af73a6b 100755 --- a/run.sh +++ b/run.sh @@ -3,4 +3,16 @@ . .venv/bin/activate . ci/linux/_load_dot_env.sh .env.local +export DIR_TO_ROOT="$PWD" + +export GUROBI_HOME="${DIR_TO_ROOT}/gurobi" +export PATH="${GUROBI_HOME}/bin:$PATH" +export LD_LIBRARY_PATH="${GUROBI_HOME}/lib" +export CASADI_GUROBI_VERSION="110" +export GUROBI_VERSION_URL="11.0.3" +export GUROBI_VERSION_URL_MAJOR="11.0" + +export GUROBI_VERSION="$CASADI_GUROBI_VERSION" +export GRB_LICENSE_FILE="${DIR_TO_ROOT}/gurobi.lic" + PYTHONPATH="src/" python3 -m grow_worker.worker From c532d99f8644e7f5af77ed0abc23d83fb2f9baa0 Mon Sep 17 00:00:00 2001 From: Sebastiaan la Fleur Date: Wed, 2 Oct 2024 11:10:59 +0200 Subject: [PATCH 05/14] 74: Complete .dockerignore. --- .dockerignore | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/.dockerignore b/.dockerignore index 5157228..6bc898f 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,6 +1,26 @@ +.github/ .venv/ +.vscode/ .idea/ ci/ -.env +doc/ +gurobi/ +htmlcov/ +local_test/ *.egg-info/ -temp/ +unit_test/ +.env +.env.local +.env-template +.gitignore +.taplo.toml +CHANGELOG.md +CONTRIBUTING.md +dev.Dockerfile +docker-compose.worker-only.yml +docker-compose.yml +LICENSE +run.bat +run.sh +run_windows.sh +test-results.xml From c1303bc53740b06ffe16092b779a5087674736aa Mon Sep 17 00:00:00 2001 From: Sebastiaan la Fleur Date: Wed, 2 Oct 2024 11:11:43 +0200 Subject: [PATCH 06/14] 74: Add .idea/ to .gitignore. --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index a7237ba..5f197c2 100644 --- a/.gitignore +++ b/.gitignore @@ -225,3 +225,4 @@ test-results.xml temp/ gurobi/ +.idea/ From f8a8f78a815b5e9901fb9715ab9f632e52d162b9 Mon Sep 17 00:00:00 2001 From: Sebastiaan la Fleur Date: Thu, 27 Mar 2025 15:19:44 +0100 Subject: [PATCH 07/14] 96: Basic functioning of multiple workflows at once. --- src/grow_worker/worker.py | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/src/grow_worker/worker.py b/src/grow_worker/worker.py index b9662c4..e4e88b2 100644 --- a/src/grow_worker/worker.py +++ b/src/grow_worker/worker.py @@ -28,7 +28,9 @@ logger = logging.getLogger("grow_worker") -GROW_TASK_TYPE = GrowTaskType(os.environ.get("GROW_TASK_TYPE")) +GROW_TASK_TYPES = [ + GrowTaskType(task_type) for task_type in os.environ.get("GROW_TASK_TYPE").split(",") +] class EarlySystemExit(Exception): @@ -41,7 +43,7 @@ class EarlySystemExit(Exception): ... -def run_mesido(input_esdl: str) -> Tuple[Optional[str], List[EsdlMessage]]: +def run_mesido(input_esdl: str, workflow_type_name: str) -> Tuple[Optional[str], List[EsdlMessage]]: """Run mesido using the specific workflow. Note: This is run without a subprocess! Casadi does not yield the GIL and therefore @@ -50,8 +52,9 @@ def run_mesido(input_esdl: str) -> Tuple[Optional[str], List[EsdlMessage]]: :param input_esdl: The input ESDL XML string. :return: GROW optimized or simulated ESDL and a list of ESDL feedback messages. """ - mesido_func = get_problem_function(GROW_TASK_TYPE) - mesido_workflow = get_problem_type(GROW_TASK_TYPE) + workflow_type = GrowTaskType(workflow_type_name) + mesido_func = get_problem_function(workflow_type) + mesido_workflow = get_problem_type(workflow_type) base_folder = Path(__file__).resolve().parent.parent write_result_db_profiles = "INFLUXDB_HOSTNAME" in os.environ @@ -153,7 +156,10 @@ def kill_pool(pool: multiprocessing.pool.Pool) -> None: def grow_worker_task( - input_esdl: str, workflow_config: ProtobufDict, update_progress_handler: UpdateProgressHandler + input_esdl: str, + workflow_config: ProtobufDict, + update_progress_handler: UpdateProgressHandler, + workflow_type_name: str, ) -> Tuple[Optional[str], List[EsdlMessage]]: """Run the grow worker task and run configured specific problem type for this worker instance. @@ -165,6 +171,7 @@ def grow_worker_task( :param input_esdl: The input ESDL XML string. :param workflow_config: Extra parameters to configure this run. :param update_progress_handler: Handler to notify of any progress changes. + :param workflow_type_name: Name of the workflow. :return: GROW optimized or simulated ESDL and a list of ESDL feedback messages. """ # TODO Very nasty hack. Celery unfortunately starts the worker subprocesses as 'daemons' @@ -177,7 +184,7 @@ def grow_worker_task( with multiprocessing.Pool(1) as pool: try: - output = pool.map(run_mesido, [input_esdl])[0] + output = pool.starmap(run_mesido, [(input_esdl, workflow_type_name)])[0] except SystemExit as e: logger.warning("During pool the worker was requested to quit: %s %s", type(e), e) kill_pool(pool) @@ -187,4 +194,4 @@ def grow_worker_task( if __name__ == "__main__": - initialize_worker(GROW_TASK_TYPE.value, grow_worker_task) + initialize_worker([task_type.value for task_type in GROW_TASK_TYPES], grow_worker_task) From 480e42b447bdbde3e646b2faa893c33306260788 Mon Sep 17 00:00:00 2001 From: Sebastiaan la Fleur Date: Mon, 14 Apr 2025 16:36:56 +0200 Subject: [PATCH 08/14] 74: Add the mesido Gurobi workflows as workflow types. --- src/grow_worker/worker.py | 4 ++- src/grow_worker/worker_types.py | 44 ++++++++++++++++++++++++++++++--- 2 files changed, 43 insertions(+), 5 deletions(-) diff --git a/src/grow_worker/worker.py b/src/grow_worker/worker.py index e4e88b2..143934a 100644 --- a/src/grow_worker/worker.py +++ b/src/grow_worker/worker.py @@ -23,7 +23,7 @@ GrowTaskType, GROWProblem, get_problem_type, - get_problem_function, + get_problem_function, get_solver_class, ) logger = logging.getLogger("grow_worker") @@ -55,6 +55,7 @@ def run_mesido(input_esdl: str, workflow_type_name: str) -> Tuple[Optional[str], workflow_type = GrowTaskType(workflow_type_name) mesido_func = get_problem_function(workflow_type) mesido_workflow = get_problem_type(workflow_type) + mesido_solver = get_solver_class(workflow_type) base_folder = Path(__file__).resolve().parent.parent write_result_db_profiles = "INFLUXDB_HOSTNAME" in os.environ @@ -70,6 +71,7 @@ def run_mesido(input_esdl: str, workflow_type_name: str) -> Tuple[Optional[str], try: solution: GROWProblem = mesido_func( mesido_workflow, + solver_class=mesido_solver, base_folder=base_folder, esdl_string=base64.encodebytes(input_esdl.encode("utf-8")), esdl_parser=ESDLStringParser, diff --git a/src/grow_worker/worker_types.py b/src/grow_worker/worker_types.py index 7bbaca8..d260e50 100644 --- a/src/grow_worker/worker_types.py +++ b/src/grow_worker/worker_types.py @@ -5,6 +5,8 @@ from mesido.workflows.grow_workflow import ( EndScenarioSizingHeadLossStaged, EndScenarioSizingStaged, + SolverGurobi, + SolverHIGHS, ) from mesido.workflows import ( run_end_scenario_sizing, @@ -16,13 +18,22 @@ class GrowTaskType(Enum): """Grow task types.""" GROW_OPTIMIZER_DEFAULT = "grow_optimizer_default" - """Run the Grow Optimizer.""" + """Run the Grow Optimizer with HIGHS solver.""" GROW_SIMULATOR = "grow_simulator" - """Run the Grow Simulator.""" + """Run the Grow Simulator with HIGHS solver.""" GROW_OPTIMIZER_NO_HEAT_LOSSES = "grow_optimizer_no_heat_losses" - """Run the Grow Optimizer without heat losses.""" + """Run the Grow Optimizer without heat losses with HIGHS solver.""" GROW_OPTIMIZER_WITH_PRESSURE = "grow_optimizer_with_pressure" - """Run the Grow Optimizer with pump pressure.""" + """Run the Grow Optimizer with pump pressure with HIGHS solver.""" + + GROW_OPTIMIZER_DEFAULT_GUROBI = "grow_optimizer_default_gurobi" + """Run the Grow Optimizer with Gurobi solver.""" + GROW_SIMULATOR_GUROBI = "grow_simulator_gurobi" + """Run the Grow Simulator with HIGHS solver.""" + GROW_OPTIMIZER_NO_HEAT_LOSSES_GUROBI = "grow_optimizer_no_heat_losses_gurobi" + """Run the Grow Optimizer without heat losses with Gurobi solver.""" + GROW_OPTIMIZER_WITH_PRESSURE_GUROBI = "grow_optimizer_with_pressure_gurobi" + """Run the Grow Optimizer with pump pressure with HIGHS solver.""" GROWProblem = Union[ @@ -74,3 +85,28 @@ def get_problem_function( raise RuntimeError(f"Unknown workflow type, please implement {task_type}") return result + + +def get_solver_class(task_type: GrowTaskType) -> Union[Type[SolverHIGHS], Type[SolverGurobi]]: + """Convert the Grow task type to the Grow solver that should be run. + + :param task_type: Grow task type. + :return: Grow solver class. + """ + if task_type in [ + GrowTaskType.GROW_OPTIMIZER_DEFAULT, + GrowTaskType.GROW_SIMULATOR, + GrowTaskType.GROW_OPTIMIZER_WITH_PRESSURE, + GrowTaskType.GROW_OPTIMIZER_NO_HEAT_LOSSES, + ]: + result = SolverHIGHS + elif task_type in [ + GrowTaskType.GROW_OPTIMIZER_DEFAULT_GUROBI, + GrowTaskType.GROW_SIMULATOR_GUROBI, + GrowTaskType.GROW_OPTIMIZER_NO_HEAT_LOSSES_GUROBI, + GrowTaskType.GROW_OPTIMIZER_WITH_PRESSURE_GUROBI, + ]: + result = SolverGurobi + else: + raise RuntimeError(f"Unknown workflow type, please implement {task_type}") + return result From 1a00b33e64d5f6b32d47ae121a5e3593f457cfcd Mon Sep 17 00:00:00 2001 From: Sebastiaan la Fleur Date: Mon, 14 Apr 2025 16:39:53 +0200 Subject: [PATCH 09/14] 74: Add Gurobi classes to problem type and function type functions. --- src/grow_worker/worker.py | 3 ++- src/grow_worker/worker_types.py | 28 +++++++++++++++++++++++----- 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/src/grow_worker/worker.py b/src/grow_worker/worker.py index 143934a..4607b6c 100644 --- a/src/grow_worker/worker.py +++ b/src/grow_worker/worker.py @@ -23,7 +23,8 @@ GrowTaskType, GROWProblem, get_problem_type, - get_problem_function, get_solver_class, + get_problem_function, + get_solver_class, ) logger = logging.getLogger("grow_worker") diff --git a/src/grow_worker/worker_types.py b/src/grow_worker/worker_types.py index d260e50..515d112 100644 --- a/src/grow_worker/worker_types.py +++ b/src/grow_worker/worker_types.py @@ -50,13 +50,25 @@ def get_problem_type(task_type: GrowTaskType) -> GROWProblem: :return: Grow problem class. """ result: GROWProblem - if task_type == GrowTaskType.GROW_OPTIMIZER_DEFAULT: + if task_type == [ + GrowTaskType.GROW_OPTIMIZER_DEFAULT, + GrowTaskType.GROW_OPTIMIZER_DEFAULT_GUROBI, + ]: result = EndScenarioSizingStaged - elif task_type == GrowTaskType.GROW_SIMULATOR: + elif task_type in [ + GrowTaskType.GROW_SIMULATOR, + GrowTaskType.GROW_SIMULATOR_GUROBI, + ]: result = NetworkSimulatorHIGHSWeeklyTimeStep - elif task_type == GrowTaskType.GROW_OPTIMIZER_NO_HEAT_LOSSES: + elif task_type in [ + GrowTaskType.GROW_OPTIMIZER_NO_HEAT_LOSSES, + GrowTaskType.GROW_OPTIMIZER_NO_HEAT_LOSSES_GUROBI, + ]: result = EndScenarioSizingStaged - elif task_type == GrowTaskType.GROW_OPTIMIZER_WITH_PRESSURE: + elif task_type in [ + GrowTaskType.GROW_OPTIMIZER_WITH_PRESSURE, + GrowTaskType.GROW_OPTIMIZER_WITH_PRESSURE_GUROBI, + ]: result = EndScenarioSizingHeadLossStaged else: raise RuntimeError(f"Unknown workflow type, please implement {task_type}") @@ -77,9 +89,15 @@ def get_problem_function( GrowTaskType.GROW_OPTIMIZER_DEFAULT, GrowTaskType.GROW_SIMULATOR, GrowTaskType.GROW_OPTIMIZER_WITH_PRESSURE, + GrowTaskType.GROW_OPTIMIZER_DEFAULT_GUROBI, + GrowTaskType.GROW_SIMULATOR_GUROBI, + GrowTaskType.GROW_OPTIMIZER_WITH_PRESSURE_GUROBI, ]: result = run_end_scenario_sizing - elif task_type == GrowTaskType.GROW_OPTIMIZER_NO_HEAT_LOSSES: + elif task_type in [ + GrowTaskType.GROW_OPTIMIZER_NO_HEAT_LOSSES, + GrowTaskType.GROW_OPTIMIZER_NO_HEAT_LOSSES_GUROBI, + ]: result = run_end_scenario_sizing_no_heat_losses else: raise RuntimeError(f"Unknown workflow type, please implement {task_type}") From 9b5c7dc8ae327020342407a032338f21eb533666 Mon Sep 17 00:00:00 2001 From: Sebastiaan la Fleur Date: Mon, 14 Apr 2025 16:41:15 +0200 Subject: [PATCH 10/14] 74: Fix issue where == should have been in when selecting grow problem type. --- src/grow_worker/worker_types.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/grow_worker/worker_types.py b/src/grow_worker/worker_types.py index 515d112..d80e137 100644 --- a/src/grow_worker/worker_types.py +++ b/src/grow_worker/worker_types.py @@ -50,7 +50,7 @@ def get_problem_type(task_type: GrowTaskType) -> GROWProblem: :return: Grow problem class. """ result: GROWProblem - if task_type == [ + if task_type in [ GrowTaskType.GROW_OPTIMIZER_DEFAULT, GrowTaskType.GROW_OPTIMIZER_DEFAULT_GUROBI, ]: From e63ee399b29324c4335e6bfd646d0d872ff36d89 Mon Sep 17 00:00:00 2001 From: Sebastiaan la Fleur Date: Mon, 14 Apr 2025 16:42:44 +0200 Subject: [PATCH 11/14] 74: Fix typing issues. --- src/grow_worker/worker.py | 2 +- src/grow_worker/worker_types.py | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/grow_worker/worker.py b/src/grow_worker/worker.py index 4607b6c..60235ef 100644 --- a/src/grow_worker/worker.py +++ b/src/grow_worker/worker.py @@ -30,7 +30,7 @@ logger = logging.getLogger("grow_worker") GROW_TASK_TYPES = [ - GrowTaskType(task_type) for task_type in os.environ.get("GROW_TASK_TYPE").split(",") + GrowTaskType(task_type) for task_type in os.environ["GROW_TASK_TYPE"].split(",") ] diff --git a/src/grow_worker/worker_types.py b/src/grow_worker/worker_types.py index d80e137..20d0c9d 100644 --- a/src/grow_worker/worker_types.py +++ b/src/grow_worker/worker_types.py @@ -111,6 +111,7 @@ def get_solver_class(task_type: GrowTaskType) -> Union[Type[SolverHIGHS], Type[S :param task_type: Grow task type. :return: Grow solver class. """ + result: Union[Type[SolverHIGHS], Type[SolverGurobi]] if task_type in [ GrowTaskType.GROW_OPTIMIZER_DEFAULT, GrowTaskType.GROW_SIMULATOR, From 67608a0d8c3ee4009e5958a51723d148438b8b24 Mon Sep 17 00:00:00 2001 From: Mark Vrijlandt Date: Fri, 13 Jun 2025 18:39:27 +0200 Subject: [PATCH 12/14] correct gurobi.lic mount, add dev dockerfile --- dev.Dockerfile | 20 ++++++++++++++++++ docker-compose.worker-only.dev.yml | 34 ++++++++++++++++++++++++++++++ docker-compose.worker-only.yml | 2 +- src/grow_worker/worker_types.py | 4 ++-- 4 files changed, 57 insertions(+), 3 deletions(-) create mode 100644 docker-compose.worker-only.dev.yml diff --git a/dev.Dockerfile b/dev.Dockerfile index c98436e..9aba20f 100644 --- a/dev.Dockerfile +++ b/dev.Dockerfile @@ -1,6 +1,26 @@ FROM python:3.10-slim-buster WORKDIR /app +RUN apt update && \ + apt install -y wget && \ + apt-get clean + +ENV GUROBI_HOME=/app/gurobi/ +ENV PATH="/app/gurobi/bin:$PATH" +ENV LD_LIBRARY_PATH="/app/gurobi/lib" +ENV CASADI_GUROBI_VERSION="110" +ENV GUROBI_VERSION_URL="11.0.3" +ENV GUROBI_VERSION_URL_MAJOR="11.0" + +# This env var is for casadi. +ENV GUROBI_VERSION="$CASADI_GUROBI_VERSION" + +# This env var is for gurobi +ENV GRB_LICENSE_FILE="/app/gurobi/gurobi.lic" + + +RUN mkdir -p /app/gurobi && \ + wget -qO- https://packages.gurobi.com/${GUROBI_VERSION_URL_MAJOR}/gurobi${GUROBI_VERSION_URL}_linux64.tar.gz | tar xvz --strip-components=2 -C /app/gurobi COPY optimizer-worker/requirements.txt /app/grow_worker/requirements.txt RUN pip install -r /app/grow_worker/requirements.txt --no-cache-dir diff --git a/docker-compose.worker-only.dev.yml b/docker-compose.worker-only.dev.yml new file mode 100644 index 0000000..676732f --- /dev/null +++ b/docker-compose.worker-only.dev.yml @@ -0,0 +1,34 @@ +networks: + omotes: + external: true + +services: + grow_worker: + build: + context: .. + dockerfile: optimizer-worker/dev.Dockerfile + environment: + INFLUXDB_HOSTNAME: omotes_influxdb + INFLUXDB_PORT: 8096 + INFLUXDB_USERNAME: root + INFLUXDB_PASSWORD: 9012 + + RABBITMQ_HOSTNAME: rabbitmq-nwn + RABBITMQ_PORT: 5672 + RABBITMQ_USERNAME: root + RABBITMQ_PASSWORD: 5678 + RABBITMQ_VIRTUALHOST: omotes_celery + + GROW_TASK_TYPE: grow_optimizer_no_heat_losses_gurobi + LOG_LEVEL: INFO + volumes: + - "./gurobi/gurobi.lic:/app/gurobi/gurobi.lic" + networks: + - omotes + deploy: + replicas: 1 + resources: + limits: + cpus: '4' + memory: 4gb + memswap_limit: 4gb diff --git a/docker-compose.worker-only.yml b/docker-compose.worker-only.yml index c5c144f..2c54610 100644 --- a/docker-compose.worker-only.yml +++ b/docker-compose.worker-only.yml @@ -21,7 +21,7 @@ services: GROW_TASK_TYPE: grow_optimizer_default LOG_LEVEL: DEBUG volumes: - - "./gurobi.lic:/app/gurobi/gurobi.lic" + - "./gurobi/gurobi.lic:/app/gurobi/gurobi.lic" networks: - omotes deploy: diff --git a/src/grow_worker/worker_types.py b/src/grow_worker/worker_types.py index 20d0c9d..23014ae 100644 --- a/src/grow_worker/worker_types.py +++ b/src/grow_worker/worker_types.py @@ -29,11 +29,11 @@ class GrowTaskType(Enum): GROW_OPTIMIZER_DEFAULT_GUROBI = "grow_optimizer_default_gurobi" """Run the Grow Optimizer with Gurobi solver.""" GROW_SIMULATOR_GUROBI = "grow_simulator_gurobi" - """Run the Grow Simulator with HIGHS solver.""" + """Run the Grow Simulator with Gurobi solver.""" GROW_OPTIMIZER_NO_HEAT_LOSSES_GUROBI = "grow_optimizer_no_heat_losses_gurobi" """Run the Grow Optimizer without heat losses with Gurobi solver.""" GROW_OPTIMIZER_WITH_PRESSURE_GUROBI = "grow_optimizer_with_pressure_gurobi" - """Run the Grow Optimizer with pump pressure with HIGHS solver.""" + """Run the Grow Optimizer with pump pressure with Gurobi solver.""" GROWProblem = Union[ From 8560aac53b6bd310560f2363f1a9c45082dc4b54 Mon Sep 17 00:00:00 2001 From: Mark Vrijlandt Date: Wed, 25 Jun 2025 12:29:42 +0200 Subject: [PATCH 13/14] to omotes-sdk-python 4.3.0 --- dev-requirements.txt | 10 +++++----- pyproject.toml | 2 +- requirements.txt | 10 +++++----- src/grow_worker/worker.py | 9 +++++---- 4 files changed, 16 insertions(+), 15 deletions(-) diff --git a/dev-requirements.txt b/dev-requirements.txt index 730f1c0..5b8023d 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -39,7 +39,7 @@ celery==5.5.3 # via # -c requirements.txt # omotes-sdk-python -certifi==2025.4.26 +certifi==2025.6.15 # via # -c requirements.txt # requests @@ -59,7 +59,7 @@ click-didyoumean==0.3.1 # via # -c requirements.txt # celery -click-plugins==1.1.1 +click-plugins==1.1.1.2 # via # -c requirements.txt # celery @@ -134,7 +134,7 @@ msgpack==1.1.1 # via # -c requirements.txt # influxdb -multidict==6.4.4 +multidict==6.5.1 # via # -c requirements.txt # yarl @@ -156,7 +156,7 @@ omotes-sdk-protocol==1.2.0 # via # -c requirements.txt # omotes-sdk-python -omotes-sdk-python==4.2.1 +omotes-sdk-python==4.3.0 # via # -c requirements.txt # omotes-grow-worker (pyproject.toml) @@ -303,7 +303,7 @@ tzdata==2025.2 # via # -c requirements.txt # kombu -urllib3==2.4.0 +urllib3==2.5.0 # via # -c requirements.txt # requests diff --git a/pyproject.toml b/pyproject.toml index 7180501..8a6bfa2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -26,7 +26,7 @@ requires-python = ">=3.10" dependencies = [ "python-dotenv ~= 1.0.0", "mesido ~= 0.1.12", - "omotes-sdk-python ~= 4.2.1" + "omotes-sdk-python ~= 4.3.0" ] [project.optional-dependencies] diff --git a/requirements.txt b/requirements.txt index e8f91e7..dda4d29 100644 --- a/requirements.txt +++ b/requirements.txt @@ -20,7 +20,7 @@ casadi-gil-comp==3.6.7 # rtc-tools-gil-comp celery==5.5.3 # via omotes-sdk-python -certifi==2025.4.26 +certifi==2025.6.15 # via requests charset-normalizer==3.4.2 # via requests @@ -32,7 +32,7 @@ click==8.2.1 # click-repl click-didyoumean==0.3.1 # via celery -click-plugins==1.1.1 +click-plugins==1.1.1.2 # via celery click-repl==0.3.0 # via celery @@ -56,7 +56,7 @@ mesido==0.1.12 # via omotes-grow-worker (pyproject.toml) msgpack==1.1.1 # via influxdb -multidict==6.4.4 +multidict==6.5.1 # via yarl numpy==1.25.2 # via @@ -67,7 +67,7 @@ numpy==1.25.2 # scipy omotes-sdk-protocol==1.2.0 # via omotes-sdk-python -omotes-sdk-python==4.2.1 +omotes-sdk-python==4.3.0 # via omotes-grow-worker (pyproject.toml) ordered-set==4.1.0 # via pyecore @@ -133,7 +133,7 @@ typing-extensions==4.14.0 # omotes-sdk-python tzdata==2025.2 # via kombu -urllib3==2.4.0 +urllib3==2.5.0 # via requests vine==5.1.0 # via diff --git a/src/grow_worker/worker.py b/src/grow_worker/worker.py index bad03e3..9400ca1 100644 --- a/src/grow_worker/worker.py +++ b/src/grow_worker/worker.py @@ -24,9 +24,7 @@ logger = logging.getLogger("grow_worker") -GROW_TASK_TYPES = [ - GrowTaskType(task_type) for task_type in os.environ["GROW_TASK_TYPE"].split(",") -] +GROW_TASK_TYPES = [GrowTaskType(task_type) for task_type in os.environ["GROW_TASK_TYPE"].split(",")] class EarlySystemExit(Exception): @@ -40,7 +38,10 @@ class EarlySystemExit(Exception): def grow_worker_task( - input_esdl: str, workflow_config: ProtobufDict, update_progress_handler: UpdateProgressHandler, workflow_type_name: str + input_esdl: str, + workflow_config: ProtobufDict, + update_progress_handler: UpdateProgressHandler, + workflow_type_name: str, ) -> Tuple[Optional[str], List[EsdlMessage]]: """Run the grow worker task and run configured specific problem type for this worker instance. From 4f476b50c4a7e79f02323177ed7278457e1f3529 Mon Sep 17 00:00:00 2001 From: Mark Vrijlandt Date: Wed, 25 Jun 2025 12:39:13 +0200 Subject: [PATCH 14/14] to omotes-sdk-python 4.3.1 --- dev-requirements.txt | 2 +- pyproject.toml | 2 +- requirements.txt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/dev-requirements.txt b/dev-requirements.txt index 5b8023d..14c0d7d 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -156,7 +156,7 @@ omotes-sdk-protocol==1.2.0 # via # -c requirements.txt # omotes-sdk-python -omotes-sdk-python==4.3.0 +omotes-sdk-python==4.3.1 # via # -c requirements.txt # omotes-grow-worker (pyproject.toml) diff --git a/pyproject.toml b/pyproject.toml index 8a6bfa2..33a040a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -26,7 +26,7 @@ requires-python = ">=3.10" dependencies = [ "python-dotenv ~= 1.0.0", "mesido ~= 0.1.12", - "omotes-sdk-python ~= 4.3.0" + "omotes-sdk-python ~= 4.3.1" ] [project.optional-dependencies] diff --git a/requirements.txt b/requirements.txt index dda4d29..ac8578d 100644 --- a/requirements.txt +++ b/requirements.txt @@ -67,7 +67,7 @@ numpy==1.25.2 # scipy omotes-sdk-protocol==1.2.0 # via omotes-sdk-python -omotes-sdk-python==4.3.0 +omotes-sdk-python==4.3.1 # via omotes-grow-worker (pyproject.toml) ordered-set==4.1.0 # via pyecore