Почему моя оптимизация Timefold неправильно соблюдает жесткие ограничения?Python

Программы на Python
Anonymous
Почему моя оптимизация Timefold неправильно соблюдает жесткие ограничения?

Сообщение Anonymous »

Я работаю над задачей оптимизации Timefold, где я назначаю технических специалистов для устройств на основе таких ограничений, как навыки и возможности технического специалиста. Однако жесткие ограничения (например, возможности технических специалистов) не соблюдаются должным образом. В частности, я заметил, что некоторые технические специалисты превышают доступное им рабочее время (rbh_to_plan), не подвергаясь при этом штрафам, хотя я определил для этого ограничения в файле groups.py.
Вот ключевые части мой код:
1. Определения технических специалистов и устройств (domain.py):

Код: Выделить всё

@dataclass
class Technician:
id: int
name: str
rbh_to_plan: float
rbh_assigned: float
iums: Set[str]
# Technician class with available hours and skills

@planning_entity
@dataclass
class Device:
index: int
ium: str
technician: Technician | None = field(default=None)
# Devices assigned to technicians
2. Определение ограничения (constraints.py):

Код: Выделить всё

def technician_capacity_hard(constraint_factory: ConstraintFactory):
return (constraint_factory
.for_each(Device)
.filter(lambda device: device.technician is not None)
.group_by(lambda device: device.technician, ConstraintCollectors.sum(lambda device: device.rbh_norm))
.filter(lambda technician, total_rbh_norm: total_rbh_norm > technician.rbh_to_plan)
.penalize(HardSoftScore.ONE_HARD)
.as_constraint("Technician capacity (hard constraint)"))
3. Основной код решателя (main.py):

Код: Выделить всё

solver_factory = SolverFactory.create(
SolverConfig(
solution_class=DeviceSchedule,
entity_class_list=[Device],
score_director_factory_config=ScoreDirectorFactoryConfig(
constraint_provider_function=define_constraints  # Enabling constraints
),
termination_config=TerminationConfig(
best_score_limit="0hard/1000soft",
spent_limit=Duration(minutes=1)
)
)
)
Этапы отладки:
  • Я распечатал общее количество назначенных часов (rbh_norm) для каждого техник,
    и во многих случаях это значение превышает rbh_to_plan.
  • Показатель HardSoftScore.ONE_HARD используется для наказания жестких ограничений
    нарушений, но похоже, что это так. не срабатывает правильно.
  • Мои мягкие ограничения, такие как вознаграждение за назначения технических специалистов,
    работают должным образом.
Вопросы:
  • Почему жесткое ограничение на мощность технического специалиста не применяется
    правильно?< /li>
    Может ли возникнуть проблема с тем, как я группирую и суммирую значения rbh_norm
    в ограничении?
  • Каковы наилучшие методы отладки проблемы с поставщиком ограничений
    в Timefold?


Подробнее здесь: https://stackoverflow.com/questions/790 ... onstraints

Вернуться в «Python»