ATTENTIONThis FlexSim Community Forum is read-only. Please post any new questions, ideas, or discussions to our new community (we call it Answers) at https://answers.flexsim.com/. Our new Question & Answer site brings a modern, mobile-friendly interface and more focus on getting answers quickly. There are a few differences between how our new Q&A community works vs. a classic, threaded-conversation-style forum like the one below, so be sure to read our Answers Best Practices. |
flexsim.com |
|
Downloads |
Q&A Using Flexsim and building models |
#1
|
||||
|
||||
Anything AnyLogic can do, we can do better - hopefully!
We're trying to replicate an existing AnyLogic model in Flexsim, as part of a Flexsim evaluation, but one issue is getting complicated.
In direct comparisson with AnyLogic, there is one very notable difference in how AnyLogic and Flexsim handle resources. They both handle resources at very different levels of fidelity. Whilst in Flexsim resources are individually created and assigned to processes AnyLogic utilizes the concept of “resource pools”. Resource pools play a similar role to the dispatchers in Flexsim– they facilitate the delegation of resources to tasks. However, instead of having discrete individual resources to manage, the resource pool merely has a total number of available resources and manages the number of idle vs utilized. Our application requires us to be able to vary this quantity at run time or during setup for optimization or Monte Carlo runs which is quite easy in AnyLogic – the “resource quantity” attribute is set. It was suggested that we could simply create an arbitrary maximum number of resources and just toggle them on and off in an experiment, as required - probably via a Global Variable. This would possibly be an acceptable solution if the actual operator numbers were all that needed to be varied, however as processors that utilize operators can only process 1 flow item at a time we would need to create an arbitrary maximum number of processors to match. There are also different operator types so I guess they need to be managed by individual type or to carry a Type-Label. This seems like it would involve a lot of manual port management and setup. Any thoughts on simple ways to model this? Thank you . . . Kenny |
The Following User Says Thank You to Kenny Macleod For This Useful Post: | ||
Tom David (06-22-2010) |
#2
|
||||
|
||||
Kenny,
If I understand correctly Anylogic can also have 1 processor with capacity of more than one and asign each flow item a operator? And how does Anylogic deal with the fact that there are different operators for different tasks? Maybe a possible solution would be to use a visual tool and on reset create the right nr of processors, (copies of the first, so that all settings are correct) and then connect those on the inside of the visual tool (using a input and output queue). Also include the dispatcher in the VT. Then save the tool off and you have 1 object that functions as multiple processors. There is not a lot of code involved there just 4 for loops, 1 for the creation and 3 for the connections (you could even use the on reset triggers of the queue or the processors to create the connections) Then you can use the solution with simply switching on or off the nr of operators (you can also actually create them instead of switching them on or off) Hope this helps a bit. |
The Following User Says Thank You to Steven Hamoen For This Useful Post: | ||
Tom David (06-22-2010) |
#3
|
||||
|
||||
Thanks for that Steven, I'll confirm how AnyLogic manages the multi operator types.
So then when running an experiment, the VT can be reset for the correct number of processore/operators each time? Kenny |
#4
|
||||
|
||||
Yes, if in the on reset you use a number from a global or a label on the VT and you change that during the experiment you are set!
|
#5
|
|||
|
|||
Personally I feel that there is a fault on this kind of design. When resource is triggered there should be time to response and time for loading/unloading. If they used such method, something is missing.
David
__________________
Advent2 Labs David |
The Following User Says Thank You to David Chan For This Useful Post: | ||
Tom David (06-22-2010) |
#6
|
||||
|
||||
Sample_OneProcessorModelsMultipleProcessorsOperato rs_TD
I agree with Steven and David, that we speak here about two totally different model concepts.
Simulators which are only handle resources like operators as a number/variable are not able to simulate certain scenarios. They just check if the number of total operators is not used yet and just take one if available. No modeling of the time the operator needs to get to the processor (ways). Not able to use the operator as a “transporter” (carry the item to the processors) and also does the setup/process. No information about the distance an operator travels. Hardly visualization of the operators (maybe an icon appears is there is an operator at the processor). I am not sure which data/statistics get collected in such a simulator, but I guess they are poor. I am pretty sure there are more scenarios which are difficult to model in these simulators. The above examples are the first things which come to my mind. In Flexsim you can examine more scenarios in my eyes, but to model the simple scenario is a bit tricky, because Flexsim is designed in another way. I agree with Steven, that there are ways to model the scenario with the Flexsim standards and use some automatically model building stuff (e.g. copy processors, make connections, etc.) to make it easy for the user to modify the number of processors and operators. I built a small model where I tried to use the concept of this other simulators. There is a description in the model for some explanation. In general the user defines the number of processors and operators in two labels on the processor. The input of the processor is controlled depending on the number of operators. Some information is shown under the processor. If it would be sure that always a 3D view is open and makes a lot of screen refreshes, it could be use to update the labels on the processor. But because this is not certain, the OnMessage on the processor is used to update the labels, every time an item enters or leave the queue or the processors starts or finish the process. It was a bit tricky to figure out the number of processors waiting for an operator, but it is solved. Because the main parameter (number of processors and operators) are labels, they can be changed in the experimenter. What I do not really like on that model is that not all code is on the processor but the queue also needs to send messages. But at least the main code is on the processor. If there are more data/statistics needed like how long a processor is waiting for an operator, more code and more data collecting is needed. But it is sure to collect everything needed. I really wonder which data/statistics the other simulator provide. Anyway, that’s my model solution in the moment. I hope I did not overlook something. Feedback is very welcome and I hope we get a good discussion about this task, because I think it is very interesting and helpful for all of us. Here is the link to the model, because I put it into the download section. Sample_OneProcessorModelsMultipleProcessorsOperato rs_TD
__________________
tom the (A)tom: "We have solved our problems ... now we have to fight the solutions." |
The Following 4 Users Say Thank You to Tom David For This Useful Post: | ||
Nico Zahn (06-24-2010) |
#7
|
||||
|
||||
This is something pretty high on the Flexsim priority list for future development. There needs to be a way for modelers to just automatically change the number of resources through the Experimenter. So the Experimenter's variable list would provide a "Number of Resources" option. The user would provide simple options for how to create those operators (copy a dispatcher's output port 1 operator for example), and how to duplicate connections, etc. I think HC does it seamlessly, so it's already done to some extent. We just need to translate it over.
|
The Following 7 Users Say Thank You to Anthony Johnson For This Useful Post: | ||
Tom David (06-22-2010) |
#8
|
||||
|
||||
Thank you guys - some good pointers here. Yes it would be good to have a way to alter resources directly in Experimenter.
While we're on the subject, has anyone found any other ways that Flexsim has replicated the functionality of AnyLogic? |
#9
|
|||
|
|||
Kenny
Not the most efficient method but it could work. You could set up several dispatchers each with a different number of operators attached to them. You could then connect every machine to each dispatcher and then change which centre port is used in the experimenter to alter the number of operators being used. If its only a small model you want to do this could be a quick and easy solution. Anth |
#10
|
|||
|
|||
Hello all,
Thanks for taking the time to respond. This is very useful stuff. Steven, Thank you for your suggestion. It sounds like it is definitely possible to vary resource quantities at reset time and I’ll experiment with your approach. And you are correct. In AnyLogic the concept of a “processor” and operators is a little different to Flexsim from my experience. For example in AnyLogic an item flows through a series of “seize” objects to acquire the required resources, flows through a “delay” which simulates the process time, and finally flows through a “release” that releases all resources or just a resource of a particular type back into the resource pool. David, Tom, I think what most people seem to be missing is processes can be modeled at different levels of fidelity depending on your objectives. For example if one of your goals is to determine the average distance travelled by an operator during a certain time frame you will of course need to model the process at that level of fidelity. However not all processes are concerned with these types of things. For example if you are modeling a network of 50 hospitals and you need to determine what impact a change in “process time” for a single operation within a single department within a single hospital has across the whole network over a year you don’t need to explicitly model, or see an animation of, the time it takes for patient A to be transported from Room 5 to Room 6 on the 3rd of March; an approximation merely needs to be taken into account in the “process time”. Modeling things at a higher level of fidelity is just introducing unneeded complexity into the model. Also, when you're modelling such processes as training pipelines, the time it takes to walk from classroom to classroom is negligible when each step in the process can take days to complete. I’m not sure what these different fidelities of process modeling are officially called or even if they have names, but in AnyLogic you have the option of creating what they call a “Network Process Model”, or a “Process Model”. The former is essentially where Flexsim’s strength lies. You have a model that is “spatially aware” where the distance between objects has a real meaning - the further apart two objects are, the longer it takes for a flow item to pass between them. You can see objects moving around as operators carry them from point A to point B. Operators are individually tracked so you can gain statistics on a person by person basis. i.e. How often was Fred working on Friday? The latter which I think AnyLogic refers to as simply a “Process Model” seems to be more suitable for modelling at a much higher level of abstraction. E.g. “I have 500 workers here, I don’t care what Fred is doing on Friday, I just care what the average utilization rate was for everyone over a couple of months.” This is quite useful from an operations analysis and planning perspective. Another example (and this is just an example) is you may have a finite quantity of memory and a number of software agents that take up a certain amount when performing different tasks. Here there is no concept of physical space or distance, and the operators are no longer operators, they simply represent a resource quantity. The latter method also supports reallocation of workers from workshop A to workshop B at run-time quite easily, which I think is the main point that may have been lost in the question. Being able to do this during a simulation run allows the model to be used as a training tool for resource management exercises as well as a planning tool. For example you can simulate a sudden influx of orders in workshop B at time X and the trainee must find the most effective method for reallocating resources to ensure you get the maximum throughput in workshop B whilst still keeping workshop A adequately staffed. Being able to vary the quantity of a particular resource type before each run in Monte Carlo simulation is also incredibly useful for performing cost/benefit for capital expenditure: “I have X dollars to spend. Investing in which resources yields the best returns?” It’s great to hear that it is indeed in the pipeline for future development. Both of these methods are supported to varying degrees in both Flexsim and Anylogic and I think it is important to understand the benefits and drawbacks of both approaches. Thanks again to everyone for your input. It has helped to answer a number of questions. Cheers - Joel |
The Following 5 Users Say Thank You to Joel Schmidt For This Useful Post: | ||
Tom David (06-23-2010) |
#11
|
|||
|
|||
Anylogic uses classes of operator to distinguish the different multiple operator types and each is connected to the resource pool. Delays for loading and unloading are part of the process map, as are the 'travelTo' processes, while travel times are drawn from the Network that you create. So it's not as simplistic as some of the posts here suggest, however my own feeling is that it isn't as accessible/flexible and doesn't handle complex workflow concepts like synchronisation as well as Flexsim. In the past it has had a very 'schematic' feel to both modelling and animation, rather than a single view with an almost physical feel that Flexsim has which I find more intuitive and enjoyable (I'm sidetracking here I think - sorry)
In Flexsim, if travel is not important just connect all destinations to a single network node where the operator stands, and turn off travel offsets on the operator (a lot of people instead set the operator speed really high). I'd manage the number of available operators through the closing of input port connections, and by dynamically adding them into the model when I get jobs and don't have any free operators (up to the maximum number variable or label). Basically we just need a couple of checkboxes and a new numeric field on the dispatcher to create operators as needed, limit by the maximum and say what that number is. If the dispatcher is connected to the network, we can use that to decide if the new operators should be connected too. Most of you reading this could I'm sure put this together pretty quickly. |
The Following 5 Users Say Thank You to Jason Lightfoot For This Useful Post: | ||
Tom David (06-27-2010) |
#12
|
|||
|
|||
A start
Hi, thought I'd kick this off. Attached is an updated dispatcher in a user library.
I put the create code in it's own trigger - and added an optional delay after the job is received - effectively limiting the waiting time for jobs. ToDo: 1) Create picklist options with templates 2) Check if that the tasksequence hasn't been started when using the delayed create ? (could have been started and returned by preemption through the TE output) Last edited by Jason Lightfoot; 06-28-2010 at 08:00 AM. Reason: Added Todo |
The Following 7 Users Say Thank You to Jason Lightfoot For This Useful Post: | ||
Tom David (06-27-2010) |
#13
|
||||
|
||||
Now you're just showing off!!
Thanks Jason, I assume you "just" hacked the standard object and added the operator bits - Yes? |
#14
|
|||
|
|||
Yes it's just the standard dispatcher. I've not tested it with the experimenter yet though (see below), and I'm not sure the delay idea is worth much but it sparked my imagination, so I thought I'd share it.
Currently the reset process trims off any excess operators rather than closing ports etc.. - needs testing with the experimenter to see when the maxops variable gets set. |
The Following User Says Thank You to Jason Lightfoot For This Useful Post: | ||
Kenny Macleod (06-29-2010) |