genericize this!
This commit is contained in:
@ -21,13 +21,12 @@ def build_constraints(solver_run, problem, items):
|
|||||||
* items[item.id]
|
* items[item.id]
|
||||||
for item in solver_run.items]) <= round(total_form_items * (max / 100)), f'{attribute.id} - {attribute.value} - max'
|
for item in solver_run.items]) <= round(total_form_items * (max / 100)), f'{attribute.id} - {attribute.value} - max'
|
||||||
elif attribute.type == 'bundle':
|
elif attribute.type == 'bundle':
|
||||||
# currently only using passage bundles, but will eventually make more dynamic for many bundle types
|
bundles = solver_run.bundles(attribute.id)
|
||||||
bundles = solver_run.bundles('passage')
|
|
||||||
total_bundles = randint(constraint.minimum, constraint.maximum)
|
total_bundles = randint(constraint.minimum, constraint.maximum)
|
||||||
selected_bundles = sample(bundles, total_bundles)
|
selected_bundles = sample(bundles, total_bundles)
|
||||||
|
|
||||||
for bundle in selected_bundles:
|
for bundle in selected_bundles:
|
||||||
problem += lpSum([items[item.id] for item in solver_run.items if item.passage == bundle['id']]) == bundle['count'], f'Bundle constraint for {bundle["type"]} ({bundle["id"]})'
|
problem += lpSum([items[item.id] for item in solver_run.items if getattr(item, bundle["type"], None) == bundle['id']]) == bundle['count'], f'Bundle constraint for {bundle["type"]} ({bundle["id"]})'
|
||||||
|
|
||||||
|
|
||||||
return problem
|
return problem
|
||||||
|
Reference in New Issue
Block a user