refactor create constraints for targets
This commit is contained in:
@ -51,9 +51,9 @@ class Problem(BaseModel):
|
||||
self.problem.solve()
|
||||
return self.problem
|
||||
|
||||
def generate(self, solution: Solution, solver_run: SolverRun):
|
||||
def generate(self, solution: Solution, solver_run: SolverRun) -> None:
|
||||
|
||||
# Form Constraints
|
||||
# Objective Function
|
||||
self.problem += lpSum(
|
||||
[
|
||||
bundle.count * self.solver_bundles_var[bundle.id]
|
||||
@ -76,56 +76,15 @@ class Problem(BaseModel):
|
||||
]
|
||||
) <= solver_run.total_form_items - 1, f'Ensuring uniqueness for form'
|
||||
|
||||
def generate_constraints(self, solver_run: SolverRun, current_drift: int):
|
||||
def generate_constraints(self, solver_run: SolverRun, current_drift: int) -> None:
|
||||
logging.info('Creating Constraints...')
|
||||
|
||||
try:
|
||||
for constraint in solver_run.constraints:
|
||||
constraint.build(self, solver_run)
|
||||
|
||||
for tif_target in solver_run.objective_function.tif_targets:
|
||||
self.problem += lpSum([
|
||||
bundle.tif(solver_run.irt_model, tif_target.theta)
|
||||
* self.solver_bundles_var[bundle.id]
|
||||
for bundle in self.bundles
|
||||
] + [
|
||||
item.iif(solver_run.irt_model, tif_target.theta) *
|
||||
self.solver_items_var[item.id]
|
||||
for item in self.items
|
||||
]) >= tif_target.minimum(
|
||||
), f'Min TIF theta({tif_target.theta}) at target {tif_target.value} drift at {current_drift}%'
|
||||
self.problem += lpSum([
|
||||
bundle.tif(solver_run.irt_model, tif_target.theta)
|
||||
* self.solver_bundles_var[bundle.id]
|
||||
for bundle in self.bundles
|
||||
] + [
|
||||
item.iif(solver_run.irt_model, tif_target.theta) *
|
||||
self.solver_items_var[item.id]
|
||||
for item in self.items
|
||||
]) <= tif_target.maximum(
|
||||
), f'Max TIF theta({tif_target.theta}) at target {tif_target.value} drift at {current_drift}%'
|
||||
|
||||
for tcc_target in solver_run.objective_function.tcc_targets:
|
||||
self.problem += lpSum([
|
||||
bundle.trf(solver_run.irt_model, tcc_target.theta)
|
||||
* self.solver_bundles_var[bundle.id]
|
||||
for bundle in self.bundles
|
||||
] + [
|
||||
item.irf(solver_run.irt_model, tcc_target.theta) *
|
||||
self.solver_items_var[item.id]
|
||||
for item in self.items
|
||||
]) >= tcc_target.minimum(
|
||||
), f'Min TCC theta({tcc_target.theta}) at target {tcc_target.value} drift at {current_drift}%'
|
||||
self.problem += lpSum([
|
||||
bundle.trf(solver_run.irt_model, tcc_target.theta)
|
||||
* self.solver_bundles_var[bundle.id]
|
||||
for bundle in self.bundles
|
||||
] + [
|
||||
item.irf(solver_run.irt_model, tcc_target.theta) *
|
||||
self.solver_items_var[item.id]
|
||||
for item in self.items
|
||||
]) <= tcc_target.maximum(
|
||||
), f'Max TCC theta({tcc_target.theta}) at target {tcc_target.value} drift at {current_drift}%'
|
||||
for target in solver_run.objective_function.all_targets():
|
||||
target.build_constraint(self, solver_run)
|
||||
|
||||
logging.info('Constraints Created...')
|
||||
except ValueError as error:
|
||||
|
Reference in New Issue
Block a user