From 3a60deac63b3f6c373d6da4a782ad6dc6cae6a69 Mon Sep 17 00:00:00 2001 From: Alinson S Xavier Date: Tue, 2 Mar 2021 17:27:32 -0600 Subject: [PATCH] LearningSolver: Handle exceptions in parallel_solve --- miplearn/solvers/learning.py | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/miplearn/solvers/learning.py b/miplearn/solvers/learning.py index bf9830d..512d8c2 100644 --- a/miplearn/solvers/learning.py +++ b/miplearn/solvers/learning.py @@ -6,6 +6,7 @@ import gzip import logging import os import pickle +import traceback import tempfile from typing import Optional, List, Any, IO, cast, BinaryIO, Union, Callable, Dict @@ -49,12 +50,17 @@ def _parallel_solve(idx): output_filename = None else: output_filename = output_filenames[idx] - stats = solver.solve( - instances[idx], - output_filename=output_filename, - discard_output=discard_outputs, - ) - return stats, instances[idx] + try: + stats = solver.solve( + instances[idx], + output_filename=output_filename, + discard_output=discard_outputs, + ) + return stats, instances[idx] + except Exception as e: + traceback.print_exc() + logger.exception(f"Exception while solving {instances[idx]}. Ignoring.") + return None, None class LearningSolver: @@ -369,6 +375,7 @@ class LearningSolver: num_cpus=n_jobs, desc=label, ) + results = [r for r in results if r[0]] stats = [] for (idx, (s, instance)) in enumerate(results): stats.append(s)