Установка ограничения предшественника в Python по времениPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Установка ограничения предшественника в Python по времени

Сообщение Anonymous »

Я пытаюсь внедрить ограничение предшественника, аналогичное примеру планирования заданий, приведенному в Java. < /p>
Но я борюсь с определением ограничений упорядочения, чтобы рассмотреть предшественники.

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

@dataclass
class Timeslot:
slot : int
< /code>
и мои операции в качестве организаций планирования с небольшим количеством логических операций и предшественников в качестве списка других идентификаторов операций: < /p>
@planning_entity
@dataclass
class Operation:
id: Annotated[int, PlanningId]
name: str
predecessors: list[int]
timeslot: Annotated[Timeslot, PlanningVariable] = field(default=None)

def isPred(self,other):
return other.id in self.predecessors

def isAfter(self,other):
return self.timeslot.slot < other.timeslot.slot
< /code>
, а затем мое ограничение как: < /p>
def precondition_conflict(constraint_factory: ConstraintFactory) -> Constraint:
# Respect order constraints
return (
constraint_factory.for_each_unique_pair(Operation)
.filter(lambda op1, op2 : op1.isPred(op2))
.filter(lambda op1, op2 : op1.isAfter(op2))
.penalize(HardSoftScore.ONE_HARD)
.as_constraint("Order conflict")
)
< /code>
Тогда я инчиняю свою проблему: < /p>
 operations.append(Operation(1,"OP N°1 : Bake the cake",[3]))
operations.append(Operation(2,"OP N°2 : Enjoy your meal",[4]))
operations.append(Operation(3,"OP N°3 : Mix flour, eggs and whatever they say in the recipe",[]))
operations.append(Operation(4,"OP N°4 : take it out of the oven",[1]))
< /code>
Но решатель продолжает давать мне решения, где операционный заказ неверен, с 0 жестким ограничением нарушено. Например: < /p>
INFO:timefold.solver:Solving ended: time spent (30056), best score (0hard/0soft), move evaluation speed (219895/sec), phase total (2), environment mode (PHASE_ASSERT), move thread count (NONE).
INFO:app:+------------------+------------------+
INFO:app:|0                 |OP N°4 : take it out of the oven|
INFO:app:+------------------+------------------+
INFO:app:|1                 |OP N°2 : Enjoy your meal|
INFO:app:+------------------+------------------+
INFO:app:|2                 |OP N°3 : Mix flour, eggs and whatever they say in the recipe|
INFO:app:+------------------+------------------+
INFO:app:|3                 |OP N°1 : Bake the cake|
INFO:app:+------------------+------------------+
, где, очевидно, я ожидал 3 -> 1 -> 4 -> 2
Где я это сделал неправильно?

Подробнее здесь: https://stackoverflow.com/questions/795 ... old-python
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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