Я пытаюсь внедрить ограничение предшественника, аналогичное примеру планирования заданий, приведенному в 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
Где я это сделал неправильно?
Я пытаюсь внедрить ограничение предшественника, аналогичное примеру планирования заданий, приведенному в Java. < /p> Но я борюсь с определением ограничений упорядочения, чтобы рассмотреть предшественники.[code]@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:+------------------+------------------+ [/code] , где, очевидно, я ожидал 3 -> 1 -> 4 -> 2 Где я это сделал неправильно?
Я пытаюсь внедрить ограничение предшественника, аналогичное примеру планирования заданий, приведенному в Java.
Но я борюсь с определением ограничений упорядочения, чтобы рассмотреть предшественники. @dataclass
class Timeslot:
slot : int
Я пытаюсь внедрить ограничение предшественника, аналогичное примеру планирования заданий, приведенному в Java.
Но я борюсь с определением ограничений упорядочения, чтобы рассмотреть предшественники.@dataclass
class Timeslot:
slot : int
Я просматривал некоторые кодовые минуты назад и заметил, что они #include , потому что они передавали один по ссылке, и вы действительно не можете предшествовать std :: string ...
или вы можете?
std::string на самом деле является специализацией...
Я работаю над этим устаревшим сайтом Wordpress, просто пытаюсь обновить форматирование страницы, созданной с помощью какого-то незнакомого мне конструктора.
Я называю этот сайт Heritage», потому что на нем установлена какая-то устаревшая версия 4...
ОБНОВЛЕНИЕ: Основываясь на комментариях, я собираюсь изучить журналы сервера (не думал об этом на общем хостинге, да). Также я найду гораздо лучший MVCE, пока не устраню проблему. Это нужно было сделать в течение нескольких часов. Спасибо за ваши...