32 lines
1.2 KiB
Python
32 lines
1.2 KiB
Python
from __future__ import annotations
|
|
from typing import TYPE_CHECKING
|
|
|
|
from models.targets.target import *
|
|
|
|
if TYPE_CHECKING:
|
|
from models.problem import Problem
|
|
|
|
class TccTarget(Target):
|
|
def constraints(self, problem_handler: Problem, solver_run: SolverRun):
|
|
problem_handler.problem += lpSum([
|
|
bundle.trf(solver_run.irt_model, self.theta)
|
|
* problem_handler.solver_bundles_var[bundle.id]
|
|
for bundle in problem_handler.bundles
|
|
] + [
|
|
item.irf(solver_run.irt_model, self.theta) *
|
|
problem_handler.solver_items_var[item.id]
|
|
for item in problem_handler.items
|
|
]) >= self.minimum(
|
|
), f'Min TCC theta({self.theta}) at target {self.value} with a drift % of {self.drift}'
|
|
|
|
problem_handler.problem += lpSum([
|
|
bundle.trf(solver_run.irt_model, self.theta)
|
|
* problem_handler.solver_bundles_var[bundle.id]
|
|
for bundle in problem_handler.bundles
|
|
] + [
|
|
item.irf(solver_run.irt_model, self.theta) *
|
|
problem_handler.solver_items_var[item.id]
|
|
for item in problem_handler.items
|
|
]) <= self.maximum(
|
|
), f'Max TCC theta({self.theta}) at target {self.value} with a drift % of {self.drift}'
|