Solved

Simple Scheduling Problem

  • 29 March 2020
  • 5 replies
  • 98 views

Hello, i am new to aimms and completed the beginners tutorial and tried to understand the machine planning example, but it was to complicated for me to understand all of it.

I want to solve a scheduling problem but i have problems creating the model. Let me explain my situation: In the production there are build articles from different orders and they are transported inside the company within containers. The transport limitation is 8 containers an hour. I want to solve the problem and want the best order which is <= 8 containers an hour, if not possible, than the next following orders should be so small, that it will be compensated, if not possible, a gap with no production time should be inserted.

It would be ideal, that the same article is produced in one step (e.g. Article 52107 has to be build for 3 different customer orders). After all, i want to visualize it. My first problem is, that i don’t know how to produce on order after another and make the timeline to calculate the demand of containers per hour and how i iterate the different variations and store the best possibility.

I have attached the sample data. I would be glad, if anybody can provide me an example or help :)

icon

Best answer by mohansx 6 April 2020, 02:09

Hello @ML1986 , thanks for additional context. If you want to minimize total completion time, you will need some extra considerations/constraints. Otherwise, the total completion time will be the same (sum of machine time for all orders) irrespective of the order you process them. For example, in your original post, you mention that it is preferable if orders which require the same article are processed together (3 orders require article 52107). So, we can consider that there is a changeover time when switching between different articles so processing those 3 orders together is favored. 

Given this, you need to find an optimal order of processing your orders. So, create a set which represent the position of processing (1, 2, … NumOrders) and we will assign these positions to orders such that total changeover time is minimized. 

For the container requirement, there are many ways you could model this. One way is to keep track of the over/under usage of containers and pass it on to the next position. For example. 

Position1 - Order X, used 6 containers. That means Position2 can be given an order which needs up to 10 containers without any penalty because we used 2 less containers (8-6 ) in the previous position. If you assign OrderZ which need 13 containers to Position2, then we will have 8 - 3 = 5 (13-10 = 3) containers for Position3 to compensate. 

Does this make sense and give you a direction to get started ? 

View original

5 replies

Userlevel 4

@ML1986 , 

 

So you need to produce/manufacture the “Articles” as per requirements of Orders ? I would start with a set of Orders, set of Articles and then a parameter - Requirement(iOrder, iArticle) which will represent if an order requires an article or not. 

 

The MachineTime is in hours ? For order 1691940090 and article 54506, the Container column is 11. What does this mean ? What you do mean by 

The transport limitation is 8 containers an hour. I want to solve the problem and want the best order which is <= 8 containers an hour, if not possible, than the next following orders should be so small, that it will be compensated, if not possible, a gap with no production time should be inserted.

What is compensating ? What is your objective function, minimize or maximize, something ?

 

Hello Mohansx,

thanks for you reply on such sunny day.

the machine time is in minutes and all the orders are known in advance, in the example thats the production program for one day.

The Article is not relevant in the first step, only machine time (minutes) and the consumption of containers. So i should better use the same units, instead 8 containers per hour the value of 0,13 containers per minute (cpm).

I want a schedule with minimized completion time with the constraint of less than 8 containers transported per hour in average.

So for example Order 1691940090 has a machine time of 74,5 minutes and needs in this time period 11 containers (0.15 cpm). So we ware far above the 8 containers per hour, but it can be compensated, if the next order for example 2365350010 only needs 2 containers in 57,4 minutes (0.035) . So overall for the two orders mentioned, the consumption is 11+2 containers in ~ 132 mins which is below 17,6 containers (8 containers a hour → 8/60 * 132 machine time min = 17,6 container in 132 mins)

So i have a set of orders and - still the requirement parameter you mentioned? How do i model the transport/container capacity (constraint or parameter?) and how to model:

  • only one job per time, only once
  • one job after another → predecessor/successor of jobs

I think that would be all for the model needed, right?

I have attached the sample data with a chart. AFTER WSPT I thought the container as weight and ordered the jobs ascending to it. I think that could be an solution but i am failing to model it :(

Thank you so much!

Greetings

Userlevel 4

Hello @ML1986 , thanks for additional context. If you want to minimize total completion time, you will need some extra considerations/constraints. Otherwise, the total completion time will be the same (sum of machine time for all orders) irrespective of the order you process them. For example, in your original post, you mention that it is preferable if orders which require the same article are processed together (3 orders require article 52107). So, we can consider that there is a changeover time when switching between different articles so processing those 3 orders together is favored. 

Given this, you need to find an optimal order of processing your orders. So, create a set which represent the position of processing (1, 2, … NumOrders) and we will assign these positions to orders such that total changeover time is minimized. 

For the container requirement, there are many ways you could model this. One way is to keep track of the over/under usage of containers and pass it on to the next position. For example. 

Position1 - Order X, used 6 containers. That means Position2 can be given an order which needs up to 10 containers without any penalty because we used 2 less containers (8-6 ) in the previous position. If you assign OrderZ which need 13 containers to Position2, then we will have 8 - 3 = 5 (13-10 = 3) containers for Position3 to compensate. 

Does this make sense and give you a direction to get started ? 

Hi @ML1986 

Were you able to apply Mohan’s suggestions to your model?

Thanks 

For the container requirement, there are many ways you could model this. One way is to keep track of the over/under usage of containers and pass it on to the next position. For example. 

Position1 - Order X, used 6 containers. That means Position2 can be given an order which needs up to 10 containers without any penalty because we used 2 less containers (8-6 ) in the previous position. If you assign OrderZ which need 13 containers to Position2, then we will have 8 - 3 = 5 (13-10 = 3) containers for Position3 to compensate.

Hello, yes it has helped me a lot. Now i am able to sequence the jobs.

For the Container Capacity-Problem it exists a regenerationrate von 30 containers per hour. so my plan was to be under the ratio of 0.5 containers per minute for two following jobs - because they are about 30 to 50 minutes in processing time.

Example: Job A processing time 20 Minutes and demand of 5 containers and Job B with 30 Minutes processing time and demand of 6 containers → the two jobs have a complete processing time of 50 Minutes and total demand of 11 containers which is 0.22 containers per minute which is under the maximum of 0.5 containers per minute.

  • Does there anybody see a problem with this approach, for example that some orders are in sum only 30 minutes processing time and sometimes they are about 90 minutes together?
  • What how does the approach from mohansx works with storing the current under/overcapacity of containers?

Reply


Didn't find what you were looking for? Try searching on our documentation pages:

AIMMS Developer & PRO | AIMMS How-To | AIMMS SC Navigator