I am creating a job shop scheduling model in AIMMS for my MSc thesis. The model plans jobs j of production orders i backwards from their due date. The main (nonnegative) decision variables are:
- StartTime(i,j) = the start time of production order i job j
- EndTime(i,j) = the end time of production order i job j
The only thing I still need to add is that capacity may not be exceeded. I have the following information:
- Capacity(j) = total capacity of job j in one time bucket
Now I need some counter / variable looking like:
- x(i,j,t) = the amount processed of operation i, job j in time bucket t. Where time bucket 1 = [0,1], time bucket 2 = [1,2] et cetera.
See the figure below for my current data, I want to retrieve the following x(i,j,t) values:
- x(1,COAT,1) = 0.5 (from 0 to 0.5)
- x(1,PRO,1) = 0.5 (from 0.5 to 1)
- x(1,PRO,2) = 0.7 (from 1 to 1.7)
- x(1,PW,2) = 0.3 (from 1.7 to 2)
- x(1,PW,3) = 0.5 (from 2 to 2.5)
Does someone have an idea on constraints to retrieve the values for x(i,j,t) as shown in the example?
I am currently having difficulty understanding all aspects of your optimization problem. To clarify, could you please provide more information on the following:
@Zsolt Mihály ,
My solution of start and ends times is given by StartTime and EndTime. The parameters StartBucket and EndBucket is just the StartTime and EndTime rouneded up to an integer.
I think that I understand your question better now . My terminology is a little bit different from yours. If that’s also intresting, then I can explain it to you.
Back to your question:
The constraint you need: sum[i, x(i,j,t] <= Capacity(j) for each (j,t)
You have to fulfill the constraint for each job and for each time bucket. So you have a constraint domain index (j,t). The constraint says that the total production should be lower than the capacity.
What do you think about it?
@Zsolt Mihály ,
Yes that capacity constraint I understand. But how do I receive x(i,j,t)?
Since I only have a starting time StartTime(i,j).
If you have a set of time buckets. Then you need neither start nor end time, since they are parameters of time buckets.
On the contrary, if you have start and end times, you don’t need time buckets. In that case you need to write different kind of constraints to make sure that the maximum capacity won’t be exceeded.
If you have a time bucket set, then you can handle discrete times. If you have start and end times, then you can handle continuous time. I suggest not to mix the two ways of time handling.
So which is your case?