32 lines
1.0 KiB
Python
32 lines
1.0 KiB
Python
from __future__ import annotations
|
|
from typing import List
|
|
|
|
from models.constraints.generic_constraint import *
|
|
|
|
class EnemyPairConstraint(GenericConstraint):
|
|
@classmethod
|
|
def create(cls: Type[_T], pair: List[int]) -> _T:
|
|
return cls(
|
|
minimum=0,
|
|
maximum=0,
|
|
reference_attribute=Attribute(
|
|
value=pair,
|
|
type='enemy_pair',
|
|
id='enemy_pair'
|
|
)
|
|
)
|
|
|
|
def build(self, problem_handler: Problem, **_) -> None:
|
|
logging.info('Enemy Pair Constraint Generating...')
|
|
|
|
pair = self.reference_attribute.value
|
|
problem_handler.problem += lpSum(
|
|
[
|
|
bundle.enemy_pair_count(pair) * problem_handler.solver_bundles_var[bundle.id]
|
|
for bundle in problem_handler.bundles
|
|
] + [
|
|
(pair in item.enemy_pairs()).real * problem_handler.solver_items_var[item.id]
|
|
for item in problem_handler.items
|
|
]
|
|
) <= 1, f'Enemy Pair constraint for pair: {pair}'
|