question

Emily K avatar image
0 Likes"
Emily K asked Emily K commented

Plan route for AGVs that connected most available fixed resource

Hi there,

1676386425865.pngI would like to get some tips on my simulation.
To simulate the actual site, items are sent from source to processors in random. AGVs capacity is 4, it can carry 4 items at one time. Items are sent to random ports, so in Flexsim default setting, the route of AGV depends on the output port of items. For example, it might send to processors 3>4>5>2.

What I want to achieve is, AGVs will plan the route which connects the most available processor. If all processors are available based on the pic above, AGV 1 will only carry items planned to transport to processors 3, 4 and 5. AGV 2 then carry items planned to transport to processors 2. AGV 3 then carry items planned to transport to processors 3. Moreover, If there are only 2 items need to transport to processors 3, AGV will only transport 2 items althought it has capacity of 4.


Due to my limited knowledge on Flexsim, I haven't find a way to achieve this, is this able to do in Flexsim?

FlexSim 21.2.4
agvroute planning
1676386425865.png (267.3 KiB)
· 3
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 ·

Why would you send it to 3>4>5>2, when you need to pass the pickup point again to reach 2? (as described in this answer)

0 Likes 0 ·
Emily K avatar image Emily K Jason Lightfoot ♦♦ commented ·

The network is unidirectional. As items are sent to random port, Agv will have the chance to pick 4 items that sent to 4 different processors at one time. It will have to pass the pickup point to reach Processor 1 and 2.

0 Likes 0 ·
Jason Lightfoot avatar image Jason Lightfoot ♦♦ Emily K commented ·
I would only plan one circuit of the loop at a time - each time you arrive at the pickup.
0 Likes 0 ·

1 Answer

Jason Lightfoot avatar image
0 Likes"
Jason Lightfoot answered Emily K commented

Put labels on your destination objects to reflect which loop they are on - numbering the 'loop' label 1 through n (your other model had 10 loops) - and to say if it is on the out, centre or return leg of the circuit. When you select an item from the list your next item will be constrained depending on these values.

In your list of items reference the loop by adding an expression field for it and the same for the 'leg type' (try working out what this is and come back if you are stuck)

When pulling items you can then filter items using WHERE and ORDER BY in order to select those with lower (or higher) loop numbers if needed. You may need a few pull activities in a 'decision tree' in the process flow - or to loop back to the same pull while the AGV still has capacity and there are items it can pull. You'll want to track the maximum out and return loop numbers of the items so far selected to assist you with the pull decisions for items needing a processor on a centre leg.

When you have an array or table of item destinations you'll want to sort them by distance from the pickup location before you issue travel and unload tasks for each.

· 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.

Emily K avatar image Emily K commented ·

Your guidance is fully appreciated!

Based on my understanding, it seems like AGV is choosing a loop. If ORDER BY loop number ASC, does it mean if exist 2 loop (Loop 7 and 3), even Loop7 has more available processor than Loop3, it will choose to run Loop3 first?

0 Likes 0 ·
Jason Lightfoot avatar image Jason Lightfoot ♦♦ Emily K commented ·

Yes - order by loop number will do that. You might want to first order by the push time to find the item that's waiting the longest. Or if you want to optimize the journeys then may pull the loop with the most items - the trouble with that is that you have some loops with a maximum only one item I think (so consider a percentage?)

A query like this will allow you to find the loop with the most items queued

Table.query("SELECT loop, count(loop) AS NumItems FROM ItemList GROUP BY loop ORDER BY NumItems DESC")  


0 Likes 0 ·
Emily K avatar image Emily K Jason Lightfoot ♦♦ commented ·

Thanks for giving a hint, I will try it out.

0 Likes 0 ·
Show more comments