How to schedule n jobs that come at different times on 1 machine (each taking a different time to complete the task)? Let's say I have to do n jobs, and each job can be done at or after a time T(i) (1&lt;=i&lt;=n). And we have 1 machine and the machine takes a time M to do any job whatsoever. The machine once started can be used again only after it's job is done. What's the optimal way to schedule these jobs on the machines?
This problem lends itself to Mixed Integer Programming. The trick is to consider that there are multiple versions of each job for each machine, and you have to cover each job once.

So you can have $c_{j,m}$ as the indicator variables that say if a job is assigned to a machine. You have to introduce a constraint that says $$\sum_m  c_{j,m} \geq 1.$$