diff --git a/app/services/loft_service.py b/app/services/loft_service.py index b78e7f4..ce6d4c4 100644 --- a/app/services/loft_service.py +++ b/app/services/loft_service.py @@ -79,8 +79,8 @@ class LoftService(Base): problem = LpProblem("ata-form-generate", LpMinimize) # dummy objective function, because it just makes things easierâ„¢ - problem += lpSum([items[item.id] - for item in self.solver_run.items]) + # problem += lpSum([items[item.id] + # for item in self.solver_run.items]) # constraints problem += lpSum([items[item.id] @@ -92,20 +92,27 @@ class LoftService(Base): # multi-objective constraints logging.info('Creating TIF and TCC constraints') for target in self.solver_run.objective_function.tif_targets: + tif = lpSum([item.iif(self.solver_run, target.theta)*items[item.id] + for item in self.solver_run.items]) + problem_objection_functions.append(tif) problem += lpSum([item.iif(self.solver_run, target.theta)*items[item.id] - for item in self.solver_run.items]) >= target.value - target.value * 0.2, f'max tif theta ({target.theta}) target value {target.value}' - problem += lpSum([item.iif(self.solver_run, target.theta)*items[item.id] - for item in self.solver_run.items]) <= target.value + target.value * 0.2, f'min tif theta ({target.theta}) target value {target.value}' + for item in self.solver_run.items]) >= target.value - target.value * 0.4, f'max tif theta ({target.theta}) target value {target.value}' + # problem += lpSum([item.iif(self.solver_run, target.theta)*items[item.id] + # for item in self.solver_run.items]) <= target.value + target.value * 0.2, f'min tif theta ({target.theta}) target value {target.value}' for target in self.solver_run.objective_function.tcc_targets: + tcc = lpSum([item.irf(self.solver_run, target.theta)*items[item.id] + for item in self.solver_run.items]) + problem_objection_functions.append(tcc) problem += lpSum([item.irf(self.solver_run, target.theta)*items[item.id] for item in self.solver_run.items]) >= target.value - target.value * 0.2, f'max tcc theta ({target.theta}) target value {target.value}' - problem += lpSum([item.irf(self.solver_run, target.theta)*items[item.id] - for item in self.solver_run.items]) <= target.value + target.value * 0.2, f'min tcc theta ({target.theta}) target value {target.value}' + # problem += lpSum([item.irf(self.solver_run, target.theta)*items[item.id] + # for item in self.solver_run.items]) <= target.value + target.value * 0.2, f'min tcc theta ({target.theta}) target value {target.value}' # solve problem logging.info('Solving...') - problem.solve() + # problem.solve() + problem.sequentialSolve(problem_objection_functions) logging.info('Solved...generating form and adding to solution') # add return items and create as a form