diff --git a/app/helpers/service_helper.py b/app/helpers/service_helper.py index a1dda1d..66b3fd3 100644 --- a/app/helpers/service_helper.py +++ b/app/helpers/service_helper.py @@ -13,24 +13,26 @@ def items_csv_to_dict(items_csv_reader): else: item = { 'attributes': [] } - for key, col in enumerate(headers): - if key == 0: - item[col] = row[key] - if key == 2: - # make sure id exists - if row[key]: - item['passage_id'] = row[key] - # b param - temp fix! use irt model b param for proper reference - elif key == (1 - len(headers)): - item['b_param'] = row[key] - elif key > 2: - item['attributes'].append({ - 'id': col, - 'value': row[key], - 'type': 'metadata' - }) + # ensure that the b param is formatted correctly + if len(re.findall(".", row[len(headers) - 1])) >= 3: + for key, col in enumerate(headers): + if key == 0: + item[col] = row[key] + if key == 2: + # make sure passage id exists + if row[key]: + item['passage_id'] = row[key] + # b param - tmep fix! use irt model b param for proper reference + elif key == len(headers) - 1: + item['b_param'] = row[key] + elif key > 2 and key < len(headers) - 1: + item['attributes'].append({ + 'id': col, + 'value': row[key], + 'type': 'metadata' + }) - items.append(item) + items.append(item) return items diff --git a/app/services/loft_service.py b/app/services/loft_service.py index 6700402..32c9274 100644 --- a/app/services/loft_service.py +++ b/app/services/loft_service.py @@ -67,7 +67,11 @@ class LoftService(Base): # create problem problem = LpProblem("ata-form-generate", LpMinimize) - # form item count constraint + # dummy objective function, because it just makes things easierâ„¢ + problem += lpSum([items[item.id] + for item in self.solver_run.items]) + + # constraints problem += lpSum([items[item.id] for item in self.solver_run.items]) == self.solver_run.total_form_items, 'Total form items' @@ -76,21 +80,15 @@ class LoftService(Base): # multi-objective functions and 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 += lpSum([item.iif(self.solver_run, target.theta)*items[item.id] for item in self.solver_run.items]) <= target.value, f'min tif theta ({target.theta}) target value {target.value}' - problem_objection_functions.append(tif) 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 += lpSum([item.irf(self.solver_run, target.theta)*items[item.id] for item in self.solver_run.items]) <= target.value, f'min tcc theta ({target.theta}) target value {target.value}' - problem_objection_functions.append(tcc) # solve problem - problem.sequentialSolve(problem_objection_functions) + problem.solve() # add return items and create as a form form_items = service_helper.solution_items(problem.variables(), self.solver_run)