handle items with poorly formatted b params, and mmoved to single objective function

This commit is contained in:
Josh Burman
2021-12-18 07:20:39 +00:00
parent da5e06cb59
commit 45380e9f00
3 changed files with 18 additions and 22 deletions

View File

@ -13,13 +13,15 @@ def items_csv_to_dict(items_csv_reader, irt_model):
else: else:
item = { 'attributes': [] } item = { 'attributes': [] }
# ensure that the b param is formatted correctly
if len(re.findall(".", row[len(headers) - 1])) >= 3:
for key, col in enumerate(headers): for key, col in enumerate(headers):
if key == 0: if key == 0:
item[col] = row[key] item[col] = row[key]
# b param - tmep fix! use irt model b param for proper reference # b param - tmep fix! use irt model b param for proper reference
elif key == (1 - len(headers)): elif key == len(headers) - 1:
item['b_param'] = row[key] item['b_param'] = row[key]
elif key > 1: elif key > 1 and key < len(headers) - 1:
item['attributes'].append({ item['attributes'].append({
'id': col, 'id': col,
'value': row[key], 'value': row[key],

View File

@ -19,9 +19,9 @@ class ServiceListener(SqsListener):
logging.info('Process complete for %s', service.file_name) logging.info('Process complete for %s', service.file_name)
def main(): def main():
logging.info('Starting Solver Service (v1.0.1)...') logging.info('Starting Solver Service (v1.0.9)...')
listener = ServiceListener( listener = ServiceListener(
'measure-development-solver-ingest', os.environ['SQS_QUEUE'],
region_name=os.environ['AWS_REGION'], region_name=os.environ['AWS_REGION'],
aws_access_key=os.environ['AWS_ACCESS_KEY_ID'], aws_access_key=os.environ['AWS_ACCESS_KEY_ID'],
aws_secret_key=os.environ['AWS_SECRET_ACCESS_KEY'], aws_secret_key=os.environ['AWS_SECRET_ACCESS_KEY'],

View File

@ -63,6 +63,7 @@ class LoftService(Base):
# create problem # create problem
problem = LpProblem("ata-form-generate", LpMinimize) problem = LpProblem("ata-form-generate", LpMinimize)
# dummy objective function, because it just makes things easier™
problem += lpSum([items[item.id] problem += lpSum([items[item.id]
for item in self.solver_run.items]) for item in self.solver_run.items])
@ -75,21 +76,14 @@ class LoftService(Base):
# multi-objective functions and constraints # multi-objective functions and constraints
for target in self.solver_run.objective_function.tif_targets: 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] 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}' 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: 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] 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}' 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 # solve problem
# problem.sequentialSolve(problem_objection_functions)
problem.solve() problem.solve()
# add return items and create as a form # add return items and create as a form