From da5e06cb5934d58a12dbd453c7f3970a15a6daaa Mon Sep 17 00:00:00 2001 From: Josh Burman Date: Fri, 17 Dec 2021 22:00:38 +0000 Subject: [PATCH 1/3] testing a theory on constraint issues --- app/services/loft_service.py | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/app/services/loft_service.py b/app/services/loft_service.py index 62410e3..7608980 100644 --- a/app/services/loft_service.py +++ b/app/services/loft_service.py @@ -63,6 +63,9 @@ class LoftService(Base): # create problem problem = LpProblem("ata-form-generate", LpMinimize) + 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' @@ -72,21 +75,22 @@ 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]) + # 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) + # 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]) + # 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) + # problem_objection_functions.append(tcc) # solve problem - problem.sequentialSolve(problem_objection_functions) + # 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) From 45380e9f0057836cfc1e5a49ae1eeb1ab843f3a1 Mon Sep 17 00:00:00 2001 From: Josh Burman Date: Sat, 18 Dec 2021 07:20:39 +0000 Subject: [PATCH 2/3] handle items with poorly formatted b params, and mmoved to single objective function --- app/helpers/service_helper.py | 28 +++++++++++++++------------- app/main.py | 4 ++-- app/services/loft_service.py | 8 +------- 3 files changed, 18 insertions(+), 22 deletions(-) diff --git a/app/helpers/service_helper.py b/app/helpers/service_helper.py index 06b1fa4..5102a40 100644 --- a/app/helpers/service_helper.py +++ b/app/helpers/service_helper.py @@ -13,20 +13,22 @@ def items_csv_to_dict(items_csv_reader, irt_model): else: item = { 'attributes': [] } - for key, col in enumerate(headers): - if key == 0: - item[col] = row[key] - # b param - tmep fix! use irt model b param for proper reference - elif key == (1 - len(headers)): - item['b_param'] = row[key] - elif key > 1: - 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] + # b param - tmep fix! use irt model b param for proper reference + elif key == len(headers) - 1: + item['b_param'] = row[key] + elif key > 1 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/main.py b/app/main.py index 323dd5a..069575b 100644 --- a/app/main.py +++ b/app/main.py @@ -19,9 +19,9 @@ class ServiceListener(SqsListener): logging.info('Process complete for %s', service.file_name) def main(): - logging.info('Starting Solver Service (v1.0.1)...') + logging.info('Starting Solver Service (v1.0.9)...') listener = ServiceListener( - 'measure-development-solver-ingest', + os.environ['SQS_QUEUE'], region_name=os.environ['AWS_REGION'], aws_access_key=os.environ['AWS_ACCESS_KEY_ID'], aws_secret_key=os.environ['AWS_SECRET_ACCESS_KEY'], diff --git a/app/services/loft_service.py b/app/services/loft_service.py index 7608980..e0fd6ed 100644 --- a/app/services/loft_service.py +++ b/app/services/loft_service.py @@ -63,6 +63,7 @@ class LoftService(Base): # create problem 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]) @@ -75,21 +76,14 @@ 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 From 0fbd14649b13eaf639a721b54d658b4809fbae22 Mon Sep 17 00:00:00 2001 From: brmnjsh Date: Mon, 20 Dec 2021 14:05:17 -0500 Subject: [PATCH 3/3] Update app/helpers/service_helper.py Co-authored-by: Owen Helmstetter <84334068+owenhtr@users.noreply.github.com> --- app/helpers/service_helper.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/helpers/service_helper.py b/app/helpers/service_helper.py index 5102a40..b0e9afb 100644 --- a/app/helpers/service_helper.py +++ b/app/helpers/service_helper.py @@ -21,7 +21,7 @@ def items_csv_to_dict(items_csv_reader, irt_model): # b param - tmep fix! use irt model b param for proper reference elif key == len(headers) - 1: item['b_param'] = row[key] - elif key > 1 and key < len(headers) - 1: + elif key > 1: item['attributes'].append({ 'id': col, 'value': row[key],