Конечно, вы можете разместить ограничение как (H - большое число):
(endOf(mode1,H) <= startOf(mode2,-H)) => (endOf(mode1,-H) <= startOf(mode3,H))
Объяснение:
- если mode1, mode2и mode3 все присутствуют, ограничение:
(endOf(mode1) <= startOf(mode2)) => (endOf(mode1) <= startOf(mode3))
- , если
mode1
или mode2
отсутствует, из-за констант H
левая сторона импликации ложна, поэтомурежим без ограничений3 - , если отсутствует
mode1
или mode3
, правая часть импликации верна, поэтому она не ограничивает mode2
Теперь, если выесть много триплетов (mode1,mode2,mode3)
, на которых распространяется это ограничение, будет очень полезно рассмотреть более глобальную формулировку, которая также использует другие ограничения проблемы: что общего у mode2
и mode3
, так что если mode2
выполняется после mode1
, затем mode3
также должно выполняться после?Есть ли какая-то другая временная зависимость между mode2
и mode3
?Есть ли какие-то логические ограничения внизу (например, presenceOf(mode1)==presenceOf(mode2)
)?и т.д.
На самом деле, определение проблемы мне до сих пор не ясно.Позвольте мне кратко изложить мое понимание:
- каждая работа, которую я состоит из двух действий: 'prep_i', за которой следует 'op_i'
- и операции 'подготовка' и 'операция' должны быть выделены длянекоторые машины (машина может выполнять только одно действие за один раз)
- возможно, что «подготовка» и «операция» данного задания выполняются на одной и той же машине, но это не требуется
Теперь, что еще не ясно:
- кажется, что для данной машины M мы обозначаем 'op_i1' -> 'op_i2' -> 'op_i3'…последовательность операций на машине, а затем соответствующие подготовительные операции 'prep_i1', 'prep_i2', 'prep_i3',… также должны быть упорядочены таким же образом (даже если они не обязательно выполняются на одной машине).Это правда?А также может случиться так, что вы дополнительно захотите упорядочить: 'prep_i1' -> 'op_i1' -> 'prep_i2' -> 'op_i2' -> 'prep_i3' -> 'op_i3'…?
- , если нети если проблема только в том, что для подготовительных действий 'prep_i' дополнительно требуются некоторые дополнительные ресурсы, доступные в ограниченном количестве, почему бы вам просто не смоделировать эти дополнительные ресурсы с помощью функции cumul (или другого noOverlap, если вам также необходимо обрабатыватьвыделение этих ресурсов) для ограничения количества подготовительных мероприятий, которые могут выполняться параллельно?