question

Cody Barniak avatar image
0 Likes"
Cody Barniak asked Cody Barniak answered

Warehouse Picking

data1.png

data-2.png

modelo-propuesto.fsm

Hello everyone, I´m hoping someone could help me out with a issue regards a picking process.

Here is my problem.

In my model I´ve got 9 source that create different types of flowitems according to either a scheduae or a statistical distrubution assigned to a interarrival that has been generated by experfit.

Al flow items go first to a Q that represents a waiting line to be recieved, next flowotem go through a processer that simulates the unloading process from a truck. Next items are sent to a Q who routes each item according a gobal table to its designated storage area, either on racks or floor storage.

That part of me model works fine, here is where my problem begins: To solve the following to information is provided in a table in attachment.

Each storage unit contains a specific type of flow item, which should be realeaed at an average number of pallets rate per week.

Each item realeased must be trasnported from rack to a docking area (represented by Q) and from docking Q, materials must be loaded onto a taskexecuter (that represents a flat bed truck), resource that can contain 6 pallets at once hence transport 6 pallets at once. Once taskexecuter is full must transport flowitems from warehouse to production plant where materials can be deposited at 4 different Transit storage areas and from there to a sink. 2 flowitems ("azucar" and "carton") share two different drop off points which I plan to route by percentage (if this is proper approach) PSAPRE and PSAEST. Once Taskexecuter is emptied must return to docking area to be loaded if flowitems have been released from racks.

I have seen numerous models and im going to tag several users who I have seen have been of good assitence. But all help is appreciated.

@Brandon Peterson @Jörg Vogel

FlexSim 7.7.4
rack
data1.png (75.7 KiB)
data-2.png (171.1 KiB)
5 |100000

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

Adrian Haws avatar image
1 Like"
Adrian Haws answered Adrian Haws edited

Cody,

I've made a few changes to your model to show one way this could be done. Each storage area pushes items to a global list, partitioning them by their itemtype. I added a small process in Process Flow to pull items each week based on values in a global table and move them to the docking area. The queue then determines where to send items based on their itemtype, and transports them with the taskexecuter in batches of 6. Obviously the specific values such as number of pallets to release each week and where to send each item type to will need to be changed to match your model.

If you have more specific questions regarding this, please let me know.


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

Cody Barniak avatar image Cody Barniak commented ·

Hi Adrian,

Your solution works great once entered the correct number for weekly pallet requirement. But I had been considering giving the model a little more variability with the amounts of pallets transfered to production. i.e for a givin flowitem (itemtype #) I have calculated the average amount of pallets required weekly and also the Std Deviation of this demand. I was considering using somehow using a normal statical distrubution de to the pulling because I have all the parameters calculated. Where can this be programmed?

Thanks for your help!

0 Likes 0 ·
Adrian Haws avatar image Adrian Haws Cody Barniak commented ·

@Cody Barniak I added a Custom Code activity right after the scheduled Source in Process Flow with this code:

string table = "GlobalTable7";
int numberOfItemtypes = 8;
int numberOfWeeks = 5;
double statDist = 0;

for (int i = 1; i <= numberOfItemtypes; i++) {
	for (int j = 1; j <= numberOfWeeks; j++) {
		switch(i) {
		case 1: statDist = normal(10, 2); break;
		case 2: statDist = normal(20, 2); break;
		case 3: statDist = normal(30, 2); break;
		case 4: statDist = normal(40, 2); break;
		case 5: statDist = normal(50, 2); break;
		case 6: statDist = normal(60, 2); break;
		case 7: statDist = normal(70, 2); break;
		case 8: statDist = normal(80, 2); break;
		default: statDist = normal(10, 2);
		}
		settablenum(table, j, i, statDist);
	}
}

That will set those values to the global table at the beginning of the model run, which your Assign Labels activity will use to determine each week's demand.

1 Like 1 ·
Cody Barniak avatar image Cody Barniak commented ·

Hola Adrian, I'm sorry but I dont really understand how the code works? What I understand is that the global table that is used to do the pulling from the racks will not have fixed values but now will vary according to the "statdist" that is programmed for each itemtype. If this is correct, I believe it should work as wished.

I have downloaded the model again but can not see any extra coding in the schedule source . Where should I paste the code?

Thanks

0 Likes 0 ·
Adrian Haws avatar image Adrian Haws Cody Barniak commented ·

@Cody Barniak Sorry about that. You're correct about the function of the code. This code is defined in the "Custom Code" activity directly after the schedule Source activity. I defined that there are 8 different itemtypes, and the model will run for 5 weeks. Then the code loops through each week for each itemtype and sets them to a value within their defined statistical distribution. To modify this to fit your model you can change the values for numberOfItemtypes and numberOfWeeks. If you add itemtypes you would just add more cases below case 8, set up in the exact same way. You will also need to change the parameters in the normal distributions to match your data. Let me know if I can add further clarification. I've attached the updated model.

1 Like 1 ·
Cody Barniak avatar image Cody Barniak commented ·

Hi Adrian, thanks a lot for you're help. Works great once I started using the transporters to move objects from rack to docking. Really appreciat your time and effort. I have more questions in order to finish my model. I hope you can help me with some. - Using a StatDist to define the numbers to update the global table that does the pulling weekly, I suppose that there is a possibility that the program is using decimals, is there any way to roundoff to the next number i.e 10.1 = 11. Since my flow items are pallets I dont know what is happening if the transported is ordered to pull 10.1 items from rack hence I wish to round all decimals aff to next higher number.

- Givin I have 2 process intergrating my model "Material reception" and "material tranfer", I see the need to priortize the reception of SKU's entering the system, because I have a higher frecuency of items exiting the system than those entering and upon any givin arrival, I believe there could be case where I have many tranfer activities in a task secuence lined up for a transporter and the entering SKU's will have a long wait before being attended and that is not the real case. What happends is, upon the arrival of material, one transporter must be separated from the operation (transporter Linde 3), first he would finish task that is currently being executed (if performing task at the time of new arrival), then Linde3 will move to the Q "BahiaCarga" and begin moving all items arrived until Q is empting and delivery has been moved to storage. Than trnsporter should be intergrated again to the daily operation (material tranfer).

Thsnks again for your help. My current model is for me engineering thesis so really appreciate any advice or suggestons regards my model. Still a bit new in flexsim but enjoy learning new things.

Saludos

Cody Barniak

0 Likes 0 ·
Adrian Haws avatar image Adrian Haws Cody Barniak commented ·

@Cody Barniak You can use integer values instead of doubles to achieve this. Here I slightly modified the code:

string table = "GlobalTable7";
int numberOfItemtypes = 8;
int numberOfWeeks = 5;

for (int i = 1; i <= numberOfItemtypes; i++) {
	for (int j = 1; j <= numberOfWeeks; j++) {
		int statDist = 1;
		switch(i) {
		case 1: statDist += normal(10, 2); break;
		case 2: statDist += normal(20, 2); break;
		case 3: statDist += normal(30, 2); break;
		case 4: statDist += normal(40, 2); break;
		case 5: statDist += normal(50, 2); break;
		case 6: statDist += normal(60, 2); break;
		case 7: statDist += normal(70, 2); break;
		case 8: statDist += normal(80, 2); break;
		default: statDist += normal(10, 2);
		}
		settablenum(table, j, i, statDist);
	}
}

Every time the "for" loop begins, statDist is reinitialized to 1. Then the given distributions are used to increment its value. Integer values always round down.

As far as the taskexecuter prioritization, it would be helpful for me to see how you have currently set up the logic for those processes. Also, we recommend asking new questions (other than follow-up questions) in a new post. This makes it easier for users to find previous answers and for us to see which questions have not been answered yet. This article contains other tips for getting the most out of this Answers site.

1 Like 1 ·
Cody Barniak avatar image
0 Likes"
Cody Barniak answered

@Adrian Haws thanks again for your help. I have changed my model to do the pulling from rack by days (5 days a week and plan de rum model during 90 days, figure the conditions would stabalize by the end of the run in that time lapse) but it seems to be not working correctly. Once I run the model, during the whole runningtime the system only picks 20 units of "carton" (brown pallets). None of the rest seem to be working correctly. I believe there is an issue in the process flow because in the "move object" activity, there seems to be many tokens lining up but not beeing processed or pulled to be sent downstream to production PSA.

I have programmed the routing and the quantities of picking according to my data.

Thnks for advice on how to use this answer page correctly. Future questions I will post in new forums.

Saluds

Cody Barniak

modelo-propuesto-dias.fsm


5 |100000

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