tweak the metadata constraints to always consider bundles

This commit is contained in:
Adrian Manteza 2022-03-22 20:33:20 +00:00
parent aaa672c14c
commit 4acb9545d4

View File

@ -31,26 +31,24 @@ def build_constraints(solver_run: SolverRun, problem: LpProblem,
boolean_to_int(item.attribute_exists(attribute))
for item in solver_run.items
]))
problem += lpSum(
[
len(bundle.items_with_attribute(attribute)) * bundles[bundle.id] for bundle in solver_run.bundles
] +
[
con[item.id] * items[item.id] for item in solver_run.unbundled_items
con[item.id] * items[item.id] for item in solver_run.unbundled_items()
]
) >= round(
total_form_items *
(min / 100)), f'{attribute.id} - {attribute.value} - min'
# problem += lpSum([
# con[item.id] * items[item.id] for item in solver_run.items
# ]) >= round(
# total_form_items *
# (min / 100)), f'{attribute.id} - {attribute.value} - min'
problem += lpSum([
con[item.id] * items[item.id] for item in solver_run.items
]) <= round(
total_form_items *
(max / 100)), f'{attribute.id} - {attribute.value} - max'
) >= round(total_form_items * (min / 100)), f'{attribute.id} - {attribute.value} - min'
problem += lpSum(
[
len(bundle.items_with_attribute(attribute)) * bundles[bundle.id] for bundle in solver_run.bundles
] +
[
con[item.id] * items[item.id] for item in solver_run.unbundled_items()
]
) <= round(total_form_items * (min / 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