from pulp import lpSum def build_constraints(solver_run, problem, items): total_form_items = solver_run.total_form_items constraints = solver_run.constraints for constraint in constraints: attribute = constraint.reference_attribute min = constraint.minimum max = constraint.maximum con = dict(zip([item.id for item in solver_run.items], [item.attribute_exists(attribute) for item in solver_run.items])) 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' return problem