Job sequencing: definition #
SEQUENCING (Karp 1972): given jobs with execution
times, deadlines and penalties, and a bound, is there a one-processor schedule
whose jobs missing their deadline carry a total penalty at most the bound?
Like Knapsack it is written in binary
(DescriptiveComplexity.Numbers.BinRel) – times, deadlines, penalties and the
bound – since under the unary encoding the problem is solvable in polynomial
time by dynamic programming and is therefore not NP-hard at all.
The vocabulary #
FirstOrder.Language.jobSeq carries
job jandposn p, the jobs and the bit positions;time j p,dline j pandpen j p, the bits of the execution time, of the deadline and of the penalty ofj;bnd p, the bits of the penalty bound;le, a linear order fixing the place values, folded into the yes-instances (DescriptiveComplexity.IsLinOrd) as everywhere in the binary encoding.
The schedule #
A schedule is a linear order on the universe rather than a permutation of
an initial segment: on a finite universe the two are the same thing, and a
relation is what a Σ₁ certificate can guess and what a first-order kernel
can constrain. A job's completion time is then the total execution time of the
jobs at or before it (DescriptiveComplexity.JSCompletion), it is late when that
exceeds its deadline, and the schedule is good when the late jobs' penalties
sum to at most the bound. Only jobs are summed over, so the elements of the
universe that are bit positions ride along in the order harmlessly.
Relation symbols of job-sequencing instances.
- job : jobSeqRel 1
job j:jis a job. - posn : jobSeqRel 1
posn p:pis a bit position. - time : jobSeqRel 2
time j p: the execution time ofjhas bit 1 at positionp. - dline : jobSeqRel 2
dline j p: the deadline ofjhas bit 1 at positionp. - pen : jobSeqRel 2
pen j p: the penalty ofjhas bit 1 at positionp. - bnd : jobSeqRel 1
bnd p: the penalty bound has bit 1 at positionp. - le : jobSeqRel 2
le a b: the linear order carrying the place values.
Instances For
Dependency graph
Dependency graph
Equations
- FirstOrder.Language.instDecidableEqJobSeqRel.decEq FirstOrder.Language.jobSeqRel.job FirstOrder.Language.jobSeqRel.job = isTrue FirstOrder.Language.instDecidableEqJobSeqRel.decEq._proof_1
- FirstOrder.Language.instDecidableEqJobSeqRel.decEq FirstOrder.Language.jobSeqRel.job FirstOrder.Language.jobSeqRel.posn = isFalse FirstOrder.Language.instDecidableEqJobSeqRel.decEq._proof_2
- FirstOrder.Language.instDecidableEqJobSeqRel.decEq FirstOrder.Language.jobSeqRel.job FirstOrder.Language.jobSeqRel.bnd = isFalse FirstOrder.Language.instDecidableEqJobSeqRel.decEq._proof_3
- FirstOrder.Language.instDecidableEqJobSeqRel.decEq FirstOrder.Language.jobSeqRel.posn FirstOrder.Language.jobSeqRel.job = isFalse FirstOrder.Language.instDecidableEqJobSeqRel.decEq._proof_4
- FirstOrder.Language.instDecidableEqJobSeqRel.decEq FirstOrder.Language.jobSeqRel.posn FirstOrder.Language.jobSeqRel.posn = isTrue FirstOrder.Language.instDecidableEqJobSeqRel.decEq._proof_5
- FirstOrder.Language.instDecidableEqJobSeqRel.decEq FirstOrder.Language.jobSeqRel.posn FirstOrder.Language.jobSeqRel.bnd = isFalse FirstOrder.Language.instDecidableEqJobSeqRel.decEq._proof_6
- FirstOrder.Language.instDecidableEqJobSeqRel.decEq FirstOrder.Language.jobSeqRel.time FirstOrder.Language.jobSeqRel.time = isTrue FirstOrder.Language.instDecidableEqJobSeqRel.decEq._proof_7
- FirstOrder.Language.instDecidableEqJobSeqRel.decEq FirstOrder.Language.jobSeqRel.time FirstOrder.Language.jobSeqRel.dline = isFalse FirstOrder.Language.instDecidableEqJobSeqRel.decEq._proof_8
- FirstOrder.Language.instDecidableEqJobSeqRel.decEq FirstOrder.Language.jobSeqRel.time FirstOrder.Language.jobSeqRel.pen = isFalse FirstOrder.Language.instDecidableEqJobSeqRel.decEq._proof_9
- FirstOrder.Language.instDecidableEqJobSeqRel.decEq FirstOrder.Language.jobSeqRel.time FirstOrder.Language.jobSeqRel.le = isFalse FirstOrder.Language.instDecidableEqJobSeqRel.decEq._proof_10
- FirstOrder.Language.instDecidableEqJobSeqRel.decEq FirstOrder.Language.jobSeqRel.dline FirstOrder.Language.jobSeqRel.time = isFalse FirstOrder.Language.instDecidableEqJobSeqRel.decEq._proof_11
- FirstOrder.Language.instDecidableEqJobSeqRel.decEq FirstOrder.Language.jobSeqRel.dline FirstOrder.Language.jobSeqRel.dline = isTrue FirstOrder.Language.instDecidableEqJobSeqRel.decEq._proof_12
- FirstOrder.Language.instDecidableEqJobSeqRel.decEq FirstOrder.Language.jobSeqRel.dline FirstOrder.Language.jobSeqRel.pen = isFalse FirstOrder.Language.instDecidableEqJobSeqRel.decEq._proof_13
- FirstOrder.Language.instDecidableEqJobSeqRel.decEq FirstOrder.Language.jobSeqRel.dline FirstOrder.Language.jobSeqRel.le = isFalse FirstOrder.Language.instDecidableEqJobSeqRel.decEq._proof_14
- FirstOrder.Language.instDecidableEqJobSeqRel.decEq FirstOrder.Language.jobSeqRel.pen FirstOrder.Language.jobSeqRel.time = isFalse FirstOrder.Language.instDecidableEqJobSeqRel.decEq._proof_15
- FirstOrder.Language.instDecidableEqJobSeqRel.decEq FirstOrder.Language.jobSeqRel.pen FirstOrder.Language.jobSeqRel.dline = isFalse FirstOrder.Language.instDecidableEqJobSeqRel.decEq._proof_16
- FirstOrder.Language.instDecidableEqJobSeqRel.decEq FirstOrder.Language.jobSeqRel.pen FirstOrder.Language.jobSeqRel.pen = isTrue FirstOrder.Language.instDecidableEqJobSeqRel.decEq._proof_17
- FirstOrder.Language.instDecidableEqJobSeqRel.decEq FirstOrder.Language.jobSeqRel.pen FirstOrder.Language.jobSeqRel.le = isFalse FirstOrder.Language.instDecidableEqJobSeqRel.decEq._proof_18
- FirstOrder.Language.instDecidableEqJobSeqRel.decEq FirstOrder.Language.jobSeqRel.bnd FirstOrder.Language.jobSeqRel.job = isFalse FirstOrder.Language.instDecidableEqJobSeqRel.decEq._proof_19
- FirstOrder.Language.instDecidableEqJobSeqRel.decEq FirstOrder.Language.jobSeqRel.bnd FirstOrder.Language.jobSeqRel.posn = isFalse FirstOrder.Language.instDecidableEqJobSeqRel.decEq._proof_20
- FirstOrder.Language.instDecidableEqJobSeqRel.decEq FirstOrder.Language.jobSeqRel.bnd FirstOrder.Language.jobSeqRel.bnd = isTrue FirstOrder.Language.instDecidableEqJobSeqRel.decEq._proof_21
- FirstOrder.Language.instDecidableEqJobSeqRel.decEq FirstOrder.Language.jobSeqRel.le FirstOrder.Language.jobSeqRel.time = isFalse FirstOrder.Language.instDecidableEqJobSeqRel.decEq._proof_22
- FirstOrder.Language.instDecidableEqJobSeqRel.decEq FirstOrder.Language.jobSeqRel.le FirstOrder.Language.jobSeqRel.dline = isFalse FirstOrder.Language.instDecidableEqJobSeqRel.decEq._proof_23
- FirstOrder.Language.instDecidableEqJobSeqRel.decEq FirstOrder.Language.jobSeqRel.le FirstOrder.Language.jobSeqRel.pen = isFalse FirstOrder.Language.instDecidableEqJobSeqRel.decEq._proof_24
- FirstOrder.Language.instDecidableEqJobSeqRel.decEq FirstOrder.Language.jobSeqRel.le FirstOrder.Language.jobSeqRel.le = isTrue FirstOrder.Language.instDecidableEqJobSeqRel.decEq._proof_25
Instances For
Dependency graph
The relational language of job-sequencing instances: jobs and bit positions, the bits of each job's execution time, deadline and penalty, the bits of the penalty bound, and a linear order.
Equations
- FirstOrder.Language.jobSeq = { Functions := fun (x : ℕ) => Empty, Relations := FirstOrder.Language.jobSeqRel }
Instances For
Dependency graph
Dependency graph
The job symbol.
Instances For
Dependency graph
The position symbol.
Instances For
Dependency graph
The execution-time symbol.
Instances For
Dependency graph
The deadline symbol.
Instances For
Dependency graph
The penalty symbol.
Instances For
Dependency graph
The bound symbol.
Instances For
Dependency graph
The order symbol.
Instances For
Dependency graph
The shorthands of the vocabulary #
Being a job.
Equations
Instances For
Dependency graph
Being a bit position.
Equations
Instances For
Dependency graph
The bits of a job's execution time.
Equations
Instances For
Dependency graph
The bits of a job's deadline.
Equations
Instances For
Dependency graph
The bits of a job's penalty.
Equations
Instances For
Dependency graph
The bits of the penalty bound.
Equations
Instances For
Dependency graph
The order carrying the place values.
Equations
Instances For
Dependency graph
The execution time of a job, decoded.
Equations
Instances For
Dependency graph
The deadline of a job, decoded.
Equations
Instances For
Dependency graph
The penalty of a job, decoded.
Equations
Instances For
Dependency graph
The penalty bound of an instance, decoded.
Equations
Instances For
Dependency graph
Schedules #
The completion time of a job under a schedule: the total execution time of the jobs scheduled at or before it.
Equations
- DescriptiveComplexity.JSCompletion sched j = ∑ᶠ (i : A) (_ : i ∈ {i : A | DescriptiveComplexity.JSJob i ∧ sched i j}), DescriptiveComplexity.JSTimeVal i
Instances For
Dependency graph
A job is late under a schedule when it completes after its deadline.
Equations
- DescriptiveComplexity.JSLate sched j = (DescriptiveComplexity.JSDlineVal j < DescriptiveComplexity.JSCompletion sched j)
Instances For
Dependency graph
The total penalty of the jobs a schedule leaves late.
Equations
- DescriptiveComplexity.JSPenalty sched = ∑ᶠ (j : A) (_ : j ∈ {j : A | DescriptiveComplexity.JSJob j ∧ DescriptiveComplexity.JSLate sched j}), DescriptiveComplexity.JSPenVal j
Instances For
Dependency graph
The problem #
A job-sequencing instance is a yes-instance when its order is a linear order and some schedule – some linear order on the universe – leaves late only jobs whose penalties sum to at most the bound.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
Being a yes-instance of job sequencing is isomorphism-invariant.
Dependency graph
SEQUENCING, as a problem on job-sequencing instances: is there a schedule whose late jobs carry a total penalty at most the bound? The times, deadlines, penalties and bound are written in binary, which is what makes the problem NP-hard rather than polynomial-time.
Equations
- DescriptiveComplexity.JobSequencing = { Holds := fun (A : Type) (inst : FirstOrder.Language.jobSeq.Structure A) => DescriptiveComplexity.HasGoodSchedule A, iso_invariant := ⋯ }