diff --git a/app/helpers/solver_helper.py b/app/helpers/solver_helper.py index 0a9b1e6..4c75449 100644 --- a/app/helpers/solver_helper.py +++ b/app/helpers/solver_helper.py @@ -17,6 +17,7 @@ def build_constraints(solver_run, problem, items, bundles): max = constraint.maximum if attribute.type == 'metadata': + logging.info('Metadata Constraint Generating...') con = dict(zip([item.id for item in solver_run.items], [item.attribute_exists(attribute) for item in solver_run.items])) @@ -27,10 +28,9 @@ def build_constraints(solver_run, problem, items, bundles): * items[item.id] for item in solver_run.items]) <= round(total_form_items * (max / 100)), f'{attribute.id} - {attribute.value} - max' elif attribute.type == 'bundle': + logging.info('Bundles Constraint Generating...') # TODO: account for many different bundle types, since the id condition in L33 could yield duplicates if solver_run.bundles != None: - # total_bundles = randint(constraint.minimum, constraint.maximum) - # selected_bundles = sample(solver_run.bundles, total_bundles, solver_run.bundles) total_bundle_items = 0 selected_bundles = get_random_bundles(solver_run.total_form_items, solver_run.bundles, int(constraint.minimum), int(constraint.maximum)) @@ -62,6 +62,7 @@ def get_random_bundles(total_form_items: int, bundles: list[Bundle], min: int , selected_bundles = None total_bundle_items = 0 total_bundles = randint(min, max) + logging.info(f'Selecting Bundles (total of {total_bundles})...') while found_bundles == False: selected_bundles = sample(bundles, total_bundles) diff --git a/app/services/loft_service.py b/app/services/loft_service.py index 99dd63c..305a2a9 100644 --- a/app/services/loft_service.py +++ b/app/services/loft_service.py @@ -88,6 +88,7 @@ class LoftService(Base): problem = solver_helper.build_constraints(self.solver_run, problem, items, bundles) # multi-objective constraints + logging.info('Creating TIF and TCC constraints') for target in self.solver_run.objective_function.tif_targets: problem += lpSum([item.iif(self.solver_run, target.theta)*items[item.id] for item in self.solver_run.items]) >= target.value - 8, f'max tif theta ({target.theta}) target value {target.value}' @@ -101,13 +102,16 @@ class LoftService(Base): for item in self.solver_run.items]) <= target.value + 20, f'min tcc theta ({target.theta}) target value {target.value}' # solve problem + logging.info('Solving...') problem.solve() + logging.info('Solved...generating form and adding to solution') # add return items and create as a form form_items = service_helper.solution_items(problem.variables(), self.solver_run) # add form to solution solution.forms.append(Form.create(form_items, self.solver_run, LpStatus[problem.status])) + logging.info('Form generated and added to solution...') # successfull form, increment f += 1