param Machines integer > 0;@\Vlabel{line:intro:param:start}@ param Jobs integer > 0; param Duration {1..Machines, 1..Jobs};@\Vlabel{line:intro:param:end}@ var start {1..Machines, 1..Jobs} integer >= 0;@\Vlabel{line:intro:var:start}@ var end_time integer >= 0;@\Vlabel{line:intro:var:end}@ minimize goal: end_time;@\Vlabel{line:intro:goal}@ subject to job_excl {m in 1..Machines, j1 in 1..Jobs, j2 in j1+1..Jobs}:@\Vlabel{line:intro:con:start}@ start[m,j1] + Duration[m,j1] <= start[m,j2] or start[m,j2] + Duration[m,j2] <= start[m,j1];@\Vlabel{line:intro:or:first}@ subject to machine_excl {j in 1..Jobs, m1 in 1..Machines, m2 in m1+1..Machines}: start[m1,j] + Duration[m1,j] <= start[m2,j] or start[m2,j] + Duration[m2,j] <= start[m1,j];@\Vlabel{line:intro:or:second}@ subject to push_end_time {m in 1..Machines, j in 1..Jobs}: start[m,j] + Duration[m,j] <= end_time;@\Vlabel{line:intro:con:end}@