Karan avatar image
Karan asked Felix Möhlmann answered

Assembly Line Balancing via Experimenter

I am basing this as a follow up to Jordan's answer to this question: Line balance with flexsim. - FlexSim Community

I have a fairly sizeable model where each token represents an operator and loops through a set of task sequences. However the way I have it set up right now is impossible to re-assign work content to different operators through an experimenter because I would have to make process flow changes.

I thought of using Task Sequence Lists and somehow triggering which operator pulls what task based on a chosen parameter. However this would mean I need to break all tasks into smaller sequences within/before which operators get acquired and released.

However, this acquiring and releasing with multiple operators tends to cause hold ups when multiple tokens are requesting to acquire an operator and a processor. I quickly start to see situations where one token has a particular operator but is waiting for acquiring a station while another token has acquired that station and is waiting to acquire the same operator. To solve this, I need to come up with a resource "dump" flow where I have a max wait timer on the acquire activity which then dumps the acquired resource, allowing any other tokens in the process to move forward. This does not seem elegant.


So I wanted to ask, are there any example models on how I could achieve re-assigning tasks via the experimenter?

Ideas I have had, none of them are 100% thought through or tried:

  1. Task Sequence list
  2. "Send" the token to a subflow or a separate task flow, and restore its original location after task is complete - this may run into the same acquire and release issue I mentioned
  3. Create identical task sequences for each operator with all the delays controlled via parameters. Change cycle time to 0 for the delays that an operator is not meant to perform. This would mean too many parameters, more than I could possibly manage in the future

Any recommendations are helpful! Thank you

FlexSim 23.0.2
task sequenceline balancetask sequence list
1680020734050.png (32.8 KiB)
· 4
5 |100000

Up to 12 attachments (including images) can be used with a maximum of 23.8 MiB each and 47.7 MiB total.

Jason Lightfoot avatar image Jason Lightfoot ♦ commented ·

How many products with different variants requiring different assembly operations are being sent down the line? Do they all have the same task profile? Do you need to allocate the tasks to stations by variant in a such they they are fixed in place or can they float between stations? Do you know the assembly precedence diagram for each product/variant from eg. swept volume analysis and interference of operations? Do you need to concentrate the varying tasks into key stations that 'mop' up the variation?

0 Likes 0 ·
Karan avatar image Karan Jason Lightfoot ♦ commented ·

@Jason Lightfoot
Lets use Task A through G, here's a precedence diagram. A triggers B and C that can occur simultaneously. F is a sub-assembly that is needed to proceed to the final step G. B is always going to be completed before F is ready, hence the operator, once done with B, should move back to working on A.


The following chart shows different scenarios that I plan on using the experimenter for:


Using @Felix's suggestion I created an sample model where I apply the Acquire query strategy where I acquire and release operators repeatedly between tasks. DynamicLineBalancingExample.fsm. Op1 from table = Ops Group 1 and Op2/Op3 from table = Ops Group 2.


I think the model I attached achieves my goal,

Couple potential concerns that come to mind:

  1. It would be tedious to add the acquire and release for every task in a much larger model. For some perspective, one production line may have at least 5 such process flows as shown in the screenshot above with some change in logic, and the model would have 6 such production lines. Could something else be better/easier to implement in such a case?
  2. I am not creating or finishing task sequences because those would be two additional activities for each of the sub tasks. Any concerns there?
0 Likes 0 ·
1680307395322.png (9.8 KiB)
1680700720246.png (4.8 KiB)
1680700765153.png (141.5 KiB)
Jason Lightfoot avatar image Jason Lightfoot ♦ Karan commented ·
I think I would adopt a more data driven approach rather than creating a process flow for each product/process.
  • Define the operation steps and their precedences.
  • Define the resources needed for the operations.
  • Define the part requirements for each op.

Then set up lists of available resources and pull based on rules or preassignment from an optimizer.

That approach will scale to very large lines/number of station/steps with multiple products and variants without having to manually create process flows for each. You may even have the definitions in a process planning tool that you can export for use in FlexSim.

1 Like 1 ·
Show more comments
Felix Möhlmann avatar image
1 Like"
Felix Möhlmann answered
If each token is representing an operator, why do you also represent them as a resource? Do some task use more than one operator? In that case I would suggest to change the Process Flow so that a token represents a task (sequence). With one-to-many relationships I find it best to have the tokens represent the one thing rather than the many.
In regards to the model locking up due to tokens requiring each others resource; that should be fixable by always acquiring the resources in the same order (operators first, fixed resources second or vice versa)
· 6
5 |100000

Up to 12 attachments (including images) can be used with a maximum of 23.8 MiB each and 47.7 MiB total.

Karan avatar image Karan commented ·

Felix, thank you for the response.

When you say change the flow so that tokens represents tasks, they would have to acquire and release operators as resources and to make the work assignment dynamic I could change the resource referenced by the acquire via a parameter?

0 Likes 0 ·
Felix Möhlmann avatar image Felix Möhlmann Karan commented ·

Yes, this is mostly what I meant. Though I wouldn't change the reference resource. I would group all operators into one group/resource but give them labels to differentiate between different types, then use the query when acquiring a resource to filter for the correct subset. This query could depend on a label on the token which in turn gets set differently depending on parameters.

1 Like 1 ·
Karan avatar image Karan Felix Möhlmann commented ·
Felix, this worked as you described it. I am just curious to know is there a reason to choose the route of using one process flow resource with all our TaskExecuters differentiated via labels instead of having different resource activities for each group of TaskExecuters?
0 Likes 0 ·
Show more comments
Jordan Johnson avatar image
Jordan Johnson answered Karan commented

Hi @Karan,

One of the problems you described is a deadlock situation. If you have tasks that need multiple resources (such as an operator as well as a machine), one solution is to make sure all resources are available before acquiring any of them. See this question:

You could also solve the deadlock problem by using the Max Wait Time field. If you acquire one thing, but can't acquire the next after some time limit, you could release the acquired resource and then try again.

Another problem you described is using the Experimenter to re-assign tasks. I think the issue here is that you need to find a way to assign work before the model runs. Once the model is running, the Experimenter doesn't intervene.

If you are balancing work across several lines, then you can create one parameter per task and assign that work to a specific line (Task 1 goes to Line 1, Task 2 goes to Line 3, etc.). If you are balancing stations within a line, then it depends more on the options you are using to achieve balance. For example, you could add parameters to change the equipment or employees assigned to each station. In either case, you'll need to configure the model so that the Experimenter (or Optimizer) can set parameter values, then run the model, and then measure the performance of those parameters.

· 1
5 |100000

Up to 12 attachments (including images) can be used with a maximum of 23.8 MiB each and 47.7 MiB total.

Karan avatar image Karan commented ·

Hi Jordan, thank you for your response.

Deadlock - I am currently using the max wait timer field to "dump" or release all the acquired resources so other acquires get a chance. I am going to try Felix's suggestion on using the same acquire sequence each time. If that does not work I will try your multi list pull model.

Experimenter Line Balancing - Assigning tasks at the start of model run is not a problem since I am looking to evaluate the difference between different line balance scenarios throughout a model's run time. I think I have a working model through Felix's suggestions above. I have attached it to Jason Lightfoot's comment. Not sure if it is robust enough for a larger scale model.

0 Likes 0 ·

Write an Answer

Hint: Notify or tag a user in this post by typing @username.

Up to 12 attachments (including images) can be used with a maximum of 23.8 MiB each and 47.7 MiB total.