From eb94bb3b44d1adaf0df8bec5d1e7e4cc55af1c84 Mon Sep 17 00:00:00 2001 From: TheTaques Date: Fri, 18 Jun 2021 23:18:40 +0200 Subject: [PATCH] Add command-line parameter for workers This allows users to adjust the number of CPU threads that the solver uses, which may be useful if you want to leave it running while you use it. --- Bone Market Solver.py | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/Bone Market Solver.py b/Bone Market Solver.py index a864042..d03b5af 100644 --- a/Bone Market Solver.py +++ b/Bone Market Solver.py @@ -1179,7 +1179,7 @@ class OccasionalBuyer(Enum): ] -def Solve(bone_market_fluctuations, zoological_mania, occasional_buyer = None, desired_buyers = [], maximum_cost = cp_model.INT32_MAX, maximum_exhaustion = cp_model.INT32_MAX, time_limit = float('inf'), stdscr = None): +def Solve(bone_market_fluctuations, zoological_mania, occasional_buyer = None, desired_buyers = [], maximum_cost = cp_model.INT32_MAX, maximum_exhaustion = cp_model.INT32_MAX, time_limit = float('inf'), workers = cpu_count(), stdscr = None): model = cp_model.CpModel() actions = {} @@ -2136,7 +2136,7 @@ def Solve(bone_market_fluctuations, zoological_mania, occasional_buyer = None, d printer = SkeletonPrinter() solver = cp_model.CpSolver() - solver.parameters.num_search_workers = cpu_count() + solver.parameters.num_search_workers = workers solver.parameters.max_time_in_seconds = time_limit # There's no window in verbose mode @@ -2254,10 +2254,17 @@ def main(): help="maximum number of seconds that solver runs for", dest='time_limit' ) + parser.add_argument( + "-w", "--workers", + default=cpu_count(), + type=int, + help="number of search worker threads to run in parallel (default: one worker per available CPU thread)", + dest='workers' + ) args = parser.parse_args() - arguments = (args.bone_market_fluctuations, args.zoological_mania, args.occasional_buyer, args.desired_buyers, args.maximum_cost, args.maximum_exhaustion, args.time_limit) + arguments = (args.bone_market_fluctuations, args.zoological_mania, args.occasional_buyer, args.desired_buyers, args.maximum_cost, args.maximum_exhaustion, args.time_limit, args.workers) if not args.verbose: def WrappedSolve(stdscr, arguments):