We're sorry but this page doesn't work properly without JavaScript enabled. Please enable it to continue.
Feedback

Simulation of logistic systems in Python with salabim

00:00

Formal Metadata

Title
Simulation of logistic systems in Python with salabim
Subtitle
Salabim can help to model complex logistic systems, like warehouses, ports, supply chains, hospitals
Title of Series
Number of Parts
130
Author
License
CC Attribution - NonCommercial - ShareAlike 3.0 Unported:
You are free to use, adapt and copy, distribute and transmit the work or content in adapted or unchanged form for any legal and non-commercial purpose as long as the work is attributed to the author in the manner specified by the author or licensor and the work or content is shared also in adapted form only under the conditions of this
Identifiers
Publisher
Release Date
Language

Content Metadata

Subject Area
Genre
Abstract
Discrete event simulation is a very powerful technique in many fields, like transport, warehousing, hospitals, manufacturing and logistics. There are several commercial packages that provide high end GUIs to design a system and to animate the operations. These packages are neary always close source and are very expensive (think USD 10-20 K per user). Often implementing complex algorithms is cumbersome. On the other end of the spectrum are open source packages that use existing program languages. Python is particularly interesting because of the vast number of (scientific) packages, like machine learning, statistics and databases. In te Python landscape there is SimPy, that is rather limited in functionality. In this poster I will present my discrete even simulation package called salabim. Salabim uses coroutines via generators and makes it very easy to model complex systems. The package offers advanced real time (2D) animation, monitoring and statistical sampling. I will show some applications and how a simple model is built up. Ruud van der Ham, core developer salabim
61
Thumbnail
26:38
95
106
Computer simulationLogistic distributionSystem programmingEvent horizonDiscrete groupFunction (mathematics)Sample (statistics)Data Encryption StandardProbability distributionMilitary operationSequenceArithmetic progressionRoboticsComputer networkLogicGraphical user interfaceTime domainFormal languageLatent heatSimilarity (geometry)Fatou-MengeSource codeVideoconferencingStatisticsProcess (computing)Electric generatorCoroutineSynchronizationThread (computing)Client (computing)Uniform convergenceMiniDiscEvent horizonProbability distributionSimulationBitFamilyHand fanGame theoryMobile appThumbnailStudent's t-distributionOrientation (vector space)NumberPoint (geometry)Device driverMessage passingMusical ensembleConnectivity (graph theory)Electric generatorPlastikkarteClient (computing)String (computer science)System programmingPRINCE2Shared memoryComputer simulationDescriptive statisticsGraph coloringMedical imagingMultiplication signDistanceVideo game2 (number)Set (mathematics)Value-added networkTwitterWebsiteGenderAreaProcess (computing)Smith chartVotingPlanningStapeldateiDuality (mathematics)Web pageMetropolitan area networkBridging (networking)Cartesian coordinate systemArithmetic progressionSoftwareOperator (mathematics)Decision theoryDrop (liquid)Right angleAndroid (robot)Software testingSinc functionCuboidTrailPascal's triangleHydraulic jumpCarry (arithmetic)Interface (computing)RoboticsInheritance (object-oriented programming)Sign (mathematics)Solar timeStatisticsBranch (computer science)Data miningField (computer science)Range (statistics)LogicMilitary baseFormal languageCodeGraphical user interfaceRevision controlContext awarenessMathematical analysisTerm (mathematics)SequenceProblemorientierte ProgrammierspracheReal-time operating systemQueue (abstract data type)Product (business)Service (economics)Uniformer RaumDifferent (Kate Ryan album)Statement (computer science)MathematicsSampling (statistics)State of matterThread (computing)Object (grammar)Flow separationModule (mathematics)AsymptoteComputer animationDaylight saving timeSoftware developerAlgorithmJava appletComputer animationMeeting/Interview
Metropolitan area networkFood energyPressureMoment (mathematics)Computer simulationGame controllerGraph coloring2 (number)Process (computing)Element (mathematics)Musical ensembleString (computer science)Constructor (object-oriented programming)Chemical equationFlash memory40 (number)Key (cryptography)Multiplication signStreaming mediaMiniDiscLoop (music)Software testingSound effectGoodness of fitAddress spaceDressing (medical)Computer-assisted translationLucas sequenceServer (computing)SpreadsheetUniformer RaumBitComputer programmingDataflowLine (geometry)Event horizonConnectivity (graph theory)Revision controlIntegrated development environmentGleichverteilung
NumberLevel (video gaming)Queue (abstract data type)Line (geometry)Information2 (number)Maxima and minimaBitMultiplication signSampling (statistics)Service (economics)Length of stayState of matterSystem programmingLengthComputer simulationDifferent (Kate Ryan album)Client (computing)SequenceAverageStatisticsWordGraph coloringStudent's t-distributionDialectNatural numberPlanningTrailMusical ensemblePerturbation theoryStatement (computer science)View (database)CASE <Informatik>Link (knot theory)Message passingSquare numberMetropolitan area networkProcess (computing)Extreme programmingMaizeFile Transfer ProtocolSource code
Demo (music)Computer simulationElectronic data interchangeHill differential equationClient (computing)MereologyLengthProcess (computing)Different (Kate Ryan album)BitDataflowCASE <Informatik>Multiplication signComputer programmingSystem programmingComputer simulationType theoryNumberDecision theoryAlgorithmMachine learningReal-time operating systemTask (computing)Scaling (geometry)Online helpMusical ensembleAvatar (2009 film)TrailNetwork topologyMorphingVideoconferencingMetric systemRight angleCoefficient of determinationOperator (mathematics)Constructor (object-oriented programming)Group actionComputer fileFormal languageRootLevel (video gaming)Algebraic closureScheduling (computing)Metropolitan area networkForestArithmetic meanChemical equationLine (geometry)Betti numberPole (complex analysis)Saddle pointAxiom of choiceEmailHypothesisSymbol tableSpecial unitary groupOpticsCausalityPhysical lawElectronic mailing listGame theoryCodecSingle-precision floating-point formatBuildingTouchscreenSystem call1 (number)
Information managementVideoconferencingOpen setGroup actionGoogolSource codeLattice (order)Execution unitMaxima and minimaFunctional (mathematics)Variable (mathematics)Value-added networkGroup actionLink (knot theory)Term (mathematics)View (database)Time zoneMusical ensembleBitRoundness (object)InformationComputer simulationProgrammer (hardware)Rule of inferenceMultiplication signSystem callBuildingProjective planeMetreLogic gate1 (number)Online helpComputer fontKey (cryptography)CoprocessorStandard deviationYouTubeClosed setChi-squared distributionFilter <Stochastik>Attribute grammarField (computer science)Suite (music)WeightSingle-precision floating-point formatNumberDot productNetwork topologyCASE <Informatik>InternetworkingMalwareHookingMoment (mathematics)Source codeProfil (magazine)Doubling the cubeCellular automatonInsertion lossGodPressureResultantGleichverteilungComputer programmingLibrary (computing)Parameter (computer programming)WindowMetropolitan area networkGoogolHypermediaElectronic mailing listUniform resource locatorSoftware testingProbability distributionSet (mathematics)Graph coloringVideoconferencingStructural loadLevel (video gaming)Different (Kate Ryan album)Type theoryDevice driverChannel capacityOpen setSimulationMereologyDirectory serviceDecision theoryUniqueness quantificationSource code
Connectivity (graph theory)Musical ensembleNormal (geometry)Cartesian coordinate systemFamilyPlotterCoefficient of determinationCuboidBlock (periodic table)Data structureSource codeShape (magazine)Game controllerIntegrated development environmentState of matterType theoryDifferent (Kate Ryan album)Sampling (statistics)Computer animationSource code
Queue (abstract data type)Different (Kate Ryan album)Computer fileSoftware testingOpen setMusical ensembleComputer animation
Musical ensembleWebsiteStatisticsInterface (computing)Mobile WebMathematical optimizationComputer fileCellular automatonMixed realityDatabaseComputer programmingData managementCuboidData miningSound effectLogical constantRandomizationLetterpress printingMultiplication signVideo gameFunctional (mathematics)Software testingMessage passingNatural numberSlide ruleVolumenvisualisierungSimulationCycle (graph theory)DivisorValue-added networkCASE <Informatik>Different (Kate Ryan album)Machine learningProcess (computing)SynchronizationOrder (biology)Computer simulationFactory (trading post)Host Identity ProtocolBitNewsletterTunisMobile appCondition numberSelf-organizationProbability distributionLibrary (computing)Set (mathematics)Sampling (statistics)Decision theoryLinear programmingFluid staticsProduct (business)LogicLatent heatScheduling (computing)Integrated development environmentSystem dynamicsModule (mathematics)Constraint (mathematics)IntegerCybersexSocial classWhiteboardAlgorithmString (computer science)1 (number)Type theoryDot productConnected spaceSource code
Line (geometry)Normal distributionMaxima and minimaLaplace-VerteilungTesselationElektronisches MarketingSynchronizationNumberClient (computing)Multiplication signModule (mathematics)Memory managementFunctional (mathematics)1 (number)Run time (program lifecycle phase)Mechanism designDifferent (Kate Ryan album)Positional notationSocial classComputer fileProbability distributionBitSampling (statistics)RandomizationSystem programmingParameter (computer programming)Priority queueInternetworkingMetropolitan area networkMusical ensembleLengthElectric generatorSoftware testingTerm (mathematics)SoftwareZoom lensStatisticsWebsiteFormal languageInteractive televisionWordVideo gameShape (magazine)Web 2.0Network topologyPower (physics)Data structureWide area networkDivisorSheaf (mathematics)Link (knot theory)Stress (mechanics)Source code
Execution unitLink (knot theory)Interface (computing)LengthForm (programming)Process (computing)1 (number)Loop (music)Set (mathematics)Data structureQueue (abstract data type)Cellular automatonRevision controlClient (computing)Address spaceChannel capacityDisk read-and-write headPiMultiplication signGame controllerService (economics)SoftwareCASE <Informatik>Zoom lensComputer fileGame theoryMetropolitan area networkDecision theorySource codeVisualization (computer graphics)Musical ensembleComputer simulationVariable (mathematics)Length of stayValue-added networkMathematicsFormal languageGoogolNetwork topologyWhiteboardMaxima and minimaMeasurementBitCuboidState of matterSmoothingGraph coloringNumberLine (geometry)Device driverSpring (hydrology)Type theory
WindowShared memoryMultiplication signException handlingMereologyProjective planeType theoryKey (cryptography)Group actionParameter (computer programming)BitComputer programmingComputer fileDefault (computer science)TouchscreenMeeting/Interview
Game controllerRight angleKey (cryptography)Variable (mathematics)Parameter (computer programming)Doubling the cubeWell-formed formulaDirection (geometry)BitNumberComplex (psychology)Goodness of fitMeeting/Interview
Transcript: English(auto-generated)
This is a poster on the solar beam, which is a discrete event simulation package. And I'm not sure whether anybody, everybody is familiar with what discrete event simulation is. So I just want to give a little bit of an overview
of what's that discrete event simulation is. What kind of tooling is available, a short introduction to solar beam. Then I have some, in this poster, I have some sample models and output, but I can do some online shows and animations
and all that make it much more interesting, I think. So, this is actually the, this I got from Wikipedia, but it is it's a models the operation of systems of discrete sequence of events.
Each event occurs at a particular instant in time change of state in the system. This is important between connectivity of events. No change in the system is assumed to occur. And thus the simulation can jump directly to the occurrence time of the next event, which is called next events time progression.
And that's an enormous difference with fixed time step simulations. So if there are, for instance, there are a couple of events happening on time one, and maybe also one point one, and then there's actually nothing till time 10,
it immediately jumps to time 10, making it a much easier and more powerful tool. What is it used for? Well, all kinds of things that usually have to do with logistics, material handling, warehouse systems and production systems,
robots, that kind of thing, airports, seaports, I'm personally more from this area than a lot of simulations in the field of container terminals. Hospitals, medical care in general, warehousing, AGVs, automated cardiac vehicles, robotics.
Yesterday, there was a talk on simulation. And by someone for fabric, common sense, robotics, and that for particularly, I think, warehouse systems and AGVs. But it can be used in a completely different
setting as well. There are some users who do network simulations with femto computing, if I get the term right. And they just do performance analysis and all that. By simulating it. And another thing that's quite important, I'm not very familiar with that field
is crowd simulation to see how crowds move and particularly in the COVID periods, there are a lot of applications of that to see what the impacts of the distancing, social distancing and all that are. It's not really my field.
And what tools are available? Well, there are very specialized. GUI packages with nice GUI and you just design your system, draw the layout and all that. And those packages are with names like AnyLogic, Simio, Arena, and they have usually
really high quality 3D animations. They're kind of GUI based. So you just draw your system. They usually do have some kind of language connected to it. It's not only the drop in message,
but sometimes you can also specify some, particularly for the divisions, specify those things in a domain specific language or an interface with other languages,
which is usually Java or C++. There are a couple of disadvantages. First of all, they are extremely expensive. This is quite a typical price between 10 and 20, sometimes even more per user. They are very powerful,
but once you want to have some more complicated decision logic and you want to escape, build your own thing, or maybe just use a standard package, for instance, an A star pathfinding algorithm or something like that. Some of them have that available already, but if you don't have that, or it's very specific,
then you have to escape to one of those things, which is usually not so friendly. And in that case, it might be easier to go to language based solutions, where modules and sometimes they extend a language in some with some special simulation features.
And we go back to the, was actually, there was once in the 80s, maybe even the 70s, was a language called Simula. That was actually the first object oriented language. And they had already some possibilities
to do some of their simulation things. And there are several packages and languages that are based on that now. It'd be several generations of that tooling. I make my own myself in the 90s on Pascal, and there were several other generations. And now there are some more there,
which is what languages are and Julia, and of course, Python. And in the Python world there are two, but maybe even more, but I'm aware of two. They are the main packages. SimPy seems to be more of these standards. And there are some of them in my package
and the developer of some of them. And maybe just to say a little bit about SimPy versus some of them, particularly for people who are familiar with this SimPy package. There was once the versions one and two of SimPy
used a concept like activate and hold and passivate and all that. And that's actually from this language. And in SimPy three, they decided to change that, make it more event driven, which makes it more complicated in my opinion
to follow, to write your code. So some of them actually doesn't use that philosophy and uses a slightly different philosophy. And also in theory, they are more or less, they cover the same range. And some of them does much more than that. So we have much more, much more facilities built in than SimPy.
SimPy is just the simulation system as such and nothing else. Some of them uses, they're called the process description methodology. And that means that you have components and components can be activated and then they come on a time screen,
you can passivate and can hold that, we're gonna have a look at it. We can request resources, we can interrupt, process that's for particularly for breakdowns. And they're all based on code routines, implement as a generator. That's the same thing as SimPy does. So we don't use threads or asymptote.
It's just generators and you interact with them with yield statements. We'll come to that in a moment. Salabim has one of the most powerful features actually, he supports real time animation. I'll show you something of that. We have statistical distributions,
which are based on the standards, just to boost a bit more versatile and easier to handle. And we do have a lot of features to automatically connect data on the processes and what something I call monitoring. So let's go for a sample model,
bank with three clerks and there are clients arriving randomly according to the given distribution. We have a couple of bank employees in this case, we have three of them. And they serve the clients one at a time with a uniform service distribution.
And it's one queue for all clerks. Well, here I've got the code, but let's just do this in real time, that's nicer.
So it's very slow and I'll just close all these.
It's extremely slow because of June, I think.
So we do bank, three clerks and that's the standard version.
So what it does actually, we make a number of components. That's a key element of some of the simulations. We have a customer, we have a clerk and we have a customer generator. And that's actually it. So the first thing we do is we have to define
a so-called environment and then we put on trace because then we can follow what's going on. There's a customer generator, we define three clerks. This is just a simple one, just comprehension. We have a waiting line, that's also one of the
key features of some of them. And let's go to the process of the customer generator. Customer generator just says that there's a process and the moment I activate this, it's automatically, it runs this process. So in this case, there's just an infinite loop,
makes a customer and then it holds for a certain time. In this case, some uniform distribution between five and 15 minutes and it samples from that. And then there's a customer, the customer enters a waiting line and then just runs over the various clerks
and see whether one of them is passive. And if so, it activates this one and it's only had to activate one of the clerks. So then it breaks and then it just passivates. And that means it gets a signal from the clerk later and the clerk actually just checks all the time
whether there's something in the waiting line. If so, if there's nothing in there, it just passivates, goes to sleep. And if not, then it's woken up, then it picks up the first customer from the waiting line, holds for a certain moments, in this case, a constant 30 seconds and then activates the customer again.
So let's just run this, okay.
So here you can actually see the exact flow of the, oh, of the program.
Let's see. So now the first is a little bit of initialization. Here it says, at time zero, we always start this times zero. We created a customer generator, we activate it and it's scheduled for time zero
and it's going to process the process process. We bake this three clerks and the three clerks also activated at time zero. We make the waiting line and we just carry on running this up to time 50,000. Then you can see now in sequence,
all those different process become active. So first of all, we have to customer generator. Customer generator, it's all here, here. It generates a customer. So that's this line, customer created, activated. And then the customer generator goes and holds until 14.6 seconds or minutes.
And this is that statement. And then, and this is very important and also one of the most complicated things to understand. Then it gives control to someone else. So there's a clerk and the clerk is going to, it's this process.
Well, the waiting line is zero at the moment. So they all go and passivate to the machine. So if we have a look now, the first event that's going to be coming active is this one at 14.6. So if we just move on now, you will see that what is the customer? That's a customer.
The customer is also activated at time zero. Oh, that's interesting. Customer enters the waiting line and checks whether there's a passive clerk. Yes, there is one that's cleared up to zero. Activated for times zero as well. And then it's a passive itself. Then we see the clerk becoming active.
We see the customer zero is leaving the waiting line that's this statement. And then the clerk holds for 30 seconds. So the clerk doesn't become active until 30. Then the customer generator becomes active.
This is this, this 14, we saw that here, this 14.6. It's this one. And then you can just see what's going on now. What's a nice feature is that in this trace, you can heal even the line numbers. So this is on line 13, is this process.
And for instance, this activations in line 17, that's this one. So you can actually follow exactly where it goes. This is extremely useful for debugging. So then the clerk makes another customer
and customer generator comes active. Customer generator remains where we, customer one,
yeah, that's the, so it samples a new, oh yeah, at 21.998 there's another customer being generated at this one, it generates customer two. And you can see at time, this one,
time 30, the first clerk has finished his job, become a current, activate this customer and then the clerk becomes vaccinated again.
So we can just go through the whole system if it does now, just for much shorter time, otherwise we have this, we can do this and then turn off the trace, then we don't see anything,
but we can do to print the collection automatically, some statistical information on the queues. So for instance, here we can see this is the waiting line, waiting line, duration 50,000 was an average
was eight long, maximum length was 21, minimum was zero. And then we get a histogram as well. You can also feed it into things like a map of Nick if you want, and this is the length of stay in this queue.
So that's actually the waiting for a clerk. Well, you can see here, the minimum is zero. You can see the mean, that's actually it's passing you can just analyze the whole system. And so, but now we've got to make it a little bit more complicated. No, not complicated, more useful by doing the,
oops, sorry, this is just for one,
but I'll make that much different. Well, I'll just do this one.
Same model, but now just with one clerk.
And here you can see the animation, here you can see actually the waiting line. In this case, there's one, I can just change that in a minute. Here we see the waiting line. This is the sequence number of the clients. This is the one that is in service. So please go down. And you can see over time is the length
of the waiting line. The lengths, this is actually in service. This one is nearly always, nearly always one because it's a very busy system. I don't see the steady state.
And then we can, I'm just gonna have a look at this code. No, but we just go and see the click. But this is extremely easy. The only thing we have to do is here, say, animate queue with where it has to be shown.
And we can say, animate monetary, those are just two lines and that's all we have to do. But let's go into something more complicated. This is their model.
So more of these things. This is an interesting one as well. It's quite a bit more complex, but let me show you that one as well.
And the animation part of this is all quite simple. Actually, it's all, it's more or less all the same. This is actually a job shop system in which you can see the task and all that. And we just wanted to show you this one, but it's maybe not, maybe it's too complicated.
I'll just show you something completely different. It's a lock system.
What you see here is a lock. Well, this is obvious, these are the doors. The ships coming in from the right and from the left. The length is actually the length of the vessel. So it can't just hold everything, but we'll just check whether it's okay or not.
And then here you can see the actual, the number of waiting ships. So that's this one on the left and the one on the right. The waiting time of the ship left on the timescale. And then we can actually just play with it. Just let's say, okay, we make the vessels a bit smaller.
So then it can hold more of the same, more vessels in the, we'll see that now. I suppose, yeah, now there's three in there. And three in there. So until we can also, that's a bit busier.
So there's more vessels coming in now. Maybe even more. That's less inter-life time. So after we increase it,
to decrease it, it's a bit more vessels.
You see, it's quite a bit more, maybe the main length is a bit longer. Then you will see the whole system is going into a, to get very busy. We can't keep up with it actually anymore. See, it's just starting.
And here we can also see that in the line already. What we can do actually, let me just continue, make this a little bit more normal. And then we can make the animation faster.
We can just play with that in real time. And this is on a real scale. This is, although it's skipped from time to time, it's actually the time. So it's real time seen synchronized, which is a very nice model itself,
maybe a bit too complicated for now. Let me just show something completely different because that's nice always to see. I don't know where that's cut. One somewhere available.
Pizza delivery, that was a program by one of my users to collect for pizza couriers.
And there were demands of clients and here you can see them actually running. So the, let me see what it is. The clients are those gray ones. And those are actually the restaurants. There's a couple of them, restaurant four, two, one and three. And you can hear actually see this is a courier
and the green one runs from here to there. Then now it doesn't have any load. It goes back to our four, goes to here. This one can only serve as a couple of restaurants. The blue one can order a couple of those ones. And here you can actually just see the whole flow.
There's a red one as well. It's a completely different type of model. And behind this, this was actually, I don't think this version, but he made a genetic algorithm to do the decision metric,
which is one of the nice things of doing this in Python, of course, you have all those things available. You can even connect it to machine learning and that's what you want. So it's all available. You can also hear, you can do it faster.
Notice the time in here can even make it faster. You can see the whole, the whole system here. And let me do something else.
Where's that one? As well as the nice animations.
This is lift system. So here we have a building, which in this case 15 floors. There's a ground floor. You can see here, the visitors,
the number is the floor they want to go to. And red is going up, green is going down. And then you can also see what floor. So this one wants to go from floor 11 to floor zero, from floor 11 to floor five. There are two who wants to go to 11.
And here are the lifts. In this case, there are three lifts. And the three lifts, this is what they contain at the moment, the visitors. So let it run for a while. You can see here, this lift picked up, there's two for 11. You will see that it's going up to 11, but in the meantime, it might pick up some more.
By the moment, there's no one who wants to go up. So it is not very likely, but there might appear some. Yeah, this is just too late to pick this one up. Yeah, here you can see already. This is going to 11, but on floor eight, there's one that wants to go to floor 14.
So I'm pretty sure this one will pick up that one. Yeah, picks up the visitors going down. The simulation part is actually rather simple. The most complex is actually here, the decision logic.
How do you pick up which one and all that. And here again, this is all standard some of them functionality. We can just play with the number of elevators. Let's say we have some, we have one less.
We can also say, well, let's make them a bit bigger. Can have five. We can specify the load from here to the other floors. Let's say we want to have some more visitors
arriving from the floor level. You will see that there will be more here. And soon it will not be enough. So you see this capacity is not enough. I think nearly everything is always to get up a passenger from the floor level.
And this is a load between the floors. That's how it's modeled. And well, this is all done with us that same type of calls.
Let me see the processes, but I can show you those. There's a little bit about the animation part which is slightly more complicated than usual. Let's see here, a visitor generator. And the visitor generator doesn't do much more than just it gets a, so it wants to generate a visitor,
gets the from the floor from uniform distribution integer, uniform distribution. And then it's just tries to get the two location.
But if the same, then we just resample actually. So then we do it again. This could be done a bit more efficient, but I didn't do that here. So then we make a visitor with the front floor and two floor and that's it actually. And then this is little bit where there's no load at all,
but then this is actually the driver time of the visitors sampled from a distribution time. So yeah, it's a lot of time. The visitor itself enters the front floor
requests and this is important. There are something called resources and maybe I just do that a little bit different than this one, we'll just do this three bank system,
but now with resources, which make the model much simpler because now all we have to do is we have a so-called resources, we just say there are three of them in there. We, the customer just have to request for a clerk and if there's one available, it gets that one
and then at the end it releases. So the model is actually quite a bit simpler because it's all done by the request module, by the resource model. It's extremely powerful feature built in. So let me just turn back to the presentation.
This was the elevator model. Something about the technical details. There are no dependencies, unless if you want to do any nation, unique pill pillow video production, unique open CV.
It's also including the animation runs on iPads, which is quite different. They have completely gooey, but I run on there as well. I have a very active Google groups, user group. It's very easy to install.
You can just use PyPy and there's also, it's just one single source file, a big one, but you can just put that one in your directory and then it's also, everything is available. You can even add some sound if you want. That's not really necessary for ordinary simulation,
but if you want to do some creative animations, which I do frequently, then that can be useful. Well, this was actually the announcement of the poster. And well, let me just show you
some of the my creative things that I use in, that I also do in some of it has nothing to do with the simulation as much more with the animation. Well, I use the simulation engine for it,
but let me just show you something. I have to turn on soundtrack.
Where's that sound?
Yeah, and then I can just show you the source code
for this, as you can see, this is a,
it's also a Southern application with an environment. We have components to run the different shapes.
Usually there's a controller and there are the blocks that are also components and they have their same type of structure. And so for instance, here, we have a whole state and so on here, if they hold for three seconds, that's the start. And so we can just run through it and the animation or the animation box, and you can just play with that.
But this is something different. There's nothing to do really to do with the normal application of the picture. So the statistical sampling is interesting.
And why is that interesting? Because it's a little bit different than what you usually see with, you could just say, well, why don't you just do random?
Well, there's a couple of reasons for that. Let me just open the test file for just a few machines, few machines.
Can I interrupt you for a second?
Yes, of course. Yes, please. Yes, cool. I was just wondering, I'm very interested in your tool and I think it's really amazing what functionality you have in there. And just recently, I was at the school of my daughter and I went to the secretary and I saw that they have this huge magnet board over there
where they arrange and organize all the timetables for each class and each teacher and so on. And I was wondering if you could use some of them in some way in order to optimize that, for example, in cases when, I don't know, a teacher becomes sick or a room gets renovated,
how to basically optimize the arrangement of classes, classrooms, teachers, and so on. And do you have any use cases already in your library for optimizing also some setting like this? I'm just thinking about what the connection could be. I don't think really be,
well, one of the, let me just say, one of the major things to use this discrete type of defense simulation is the random effects. What I can imagine, if there's some random effect with those rosters, so for instance, there's a possibility
that a teacher becomes ill, then I, with a certain probability, let's say, okay, and out of 10% of the events, of the time he's ill or something like that, then I can imagine that you could use a discrete defense simulation model
to test what will happen if you apply a certain optimization algorithm. The optimization algorithm itself is definitely never in cyber beam itself, although of course you can connect it to whatever solver you want.
There are several solvers available. You can, for instance, think about some linear program or integer program or constraint programming. There are a lot of those things. You can even think of some kind of machine learning and then test it with salary. But for this specific typical use case,
I'm not sure whether there'll be really random effects involved in it. Otherwise, if there is, you can. So for instance, in scheduling, scheduling products on a production line, then it's very useful because then you just have a certain decision logic
and then you test it under certain conditions. Machines break down, they have different, they have non-deterministic or stochastic conditions run times and all that. And then you can just test how it actually behaves
and you can just run for a year or whatever. But the decision algorithm itself is not included in the package. Does that answer more or less your question? Yeah, that answers the question. I think a solver is more designed towards
like time dependent or dynamic environments as I see it. And yeah, so like this is more the school organization basically it's more like a static set up, I guess. I think so, yeah. Nearly always there are some statistical, well, it's actually always, there's always some statistical behavior
involved in the simulation models. Otherwise, you can just run it actually as such. I just wanted to show you the distributions and why there's a difference from ordinary distributions.
And the key factor is that with a random module, the sampling is actually connected to the model. So if you define a random, then it actually samples it and you can't define the distribution itself
with random module. So for instance, here, we have a same uniform, we can also assign that to a function. So what you can do is with random, you can't do this, for instance,
you can't say X is SIM dot and I just do a uniform distribution, one to two. And then I later add another point, I say X print, X print sample.
And let's just say we also in a strange condition at the moment, but for instance, I do and after that, I say the same
and let's just do it differently. I say X is, and I can also say SIM dot constant, for instance, not even sure whether random supports that constant three. And this, now those ones actually I can design,
which come to this in random and that's very useful for simulations. And what I can even do is you can see that here, I can even say, okay, this comes from a string. And that means that you can have that from a database or a file or whatever like this.
And that's definitely not possible in the random module, that makes it a bit more easy. I can even interface with other modules. So I can, for instance, SciPy, here's an MPY distribution.
I can define this one as an external distribution called the Laplace distribution for random with some parameters for this one. And then I can just sample from this one. This is here, one example of the SciPy distribution.
So here I make a normal distribution.
This is from SciPy and not from random or from NumPy. And then this is the mean, this is a little bit different notation in SciPy. And then you can just also check for that. So you can just whatever random module you use
with my functionality. Monitoring is also very, very, very nice. Let me just show you that one and just monitor.
So for instance, you can just collect things. Usually those are system monitors. So Q-links and waiting times and all that,
but you can also make them yourself. So in this case, we've made a monitor called ML, a monitor level, and there's another one. And then we can just ask for the bean, the person tiles and the maximum. It can be weighted. You can turn on and off and you can merge them. You can take slices out of it.
It's really, very powerful and quite complicated to build, I can show you. And well, just to impress you, I just opened the file Salabim itself.
The one and only file action, that's Salabim. It's against a lot of, there are a lot of people who say this is crazy, but I found it very convenient to have that one.
And so here you can see it's 17,000 clients of coach
in total, but it's structured of course in classes and all that. There are some extremely complicated things in it. The mechanism to call those things is the generators.
It's actually not that complicated. It's the same as more or less the same as the same guy. So the priority queue taken from heap queue, but the more complicated things is the line numbers that you saw to assess them.
There's some more quite tricky part, the animation itself to the synchronization of the animation with the runtime is complicated. So, well, that's more than what I wanted to tell you. Are there any questions?
I see that Jan, Jan, have you alright? Jan, are you alright? Hey, Granddad. Hi. Hi. Okay. The last question. I'm glad that you're here.
Have we seen you? Yeah, he was the last one before, and he was the last one before, so I'll take you home. Okay. Okay, well, he's the last one. He's the last one. He's the last one. Oh, you're the last one. Oh, you're the last one. That's awesome. Yeah, yeah.
You're the last one. You're the last one! You're the last. You did the discussion you wanted to have. For my kind of knowledge, I've been in the A becomes an actor and I was with my fellow actors. For me, I'm a major musician.
The only thing that you have to think about is the automatics. How do the automatics work? Do they work with the automatics?
I can't remember what the name is. And then I'm going to start with the resources. Here... Oh, I can't remember the name, the statistics.
Well, I guess the answer is that, in my opinion, the animatics are very popular. Yes, yes. They're the ones that are the most popular. Yes, they're the ones that are the most popular. Yes, but there is... Also here, with the internet market, that's very interesting.
Yes, there are a lot of people who are very long-term. For example, who are long-term upstarts. They're the most popular in the world. Yes, but I think that there are a lot of people who work with the internet market. Yes, the Zoom software.
Oh, yes. Oh, yes, here are the clerks. That's not so interesting.
Oh, yes.
I see. I see. So, the I'm a special studio coach. I see, yes. Do you have a job? Yes, I have a lot of problems. I don't have a job at the moment, I don't have a job. When? When. I work with, what is it?
Pie Flakes. They stop when I can. You can start them. No, I've never done it like this. No place is like this, what a beautiful place. I've been doing it a lot of times. And this is the back of your head.
You're here, the clerk, thinks of a request and the request says... ...that the client has the money, that he needs it on a clerk. The links of Sté, in the queue. The length of the claimers, the claimers are the ones who have the resources, the service types.
And then you have the length and the length of the sale. The length is approximately 3, because it's the same as 3, but you can add it to it. And then you have the capacity, in this case, the capacity is the same as 3.
You can add it to it. But the available quantity is the quantity, which is the percentage. The claim quantity is the quantity of the drugs, which is the same as the occupancy, which is the quantity. And that is the exact same quantity. And the animations of the set are very similar.
One of the things you find is that the story form in the game is predefined. And that's what I always say. There are no claims. You can't make any claims about the animation.
Yes, exactly. I'm a designer. I can't make any claims about it. OK. But you can't make any claims about it. Yes, exactly. You can't make any claims about it. You can't make any claims about it.
The generator, but there are some other things that I can add. An anonymous resource, which you can add to it. You can add a link to it, or a link to it.
But that's not the case. You can add a link to it. Yes, there are other ways to think about it. Maybe you can add a link to it. Yes, I think so.
I can add a link to it. You can add a link to it.
Yes. OK. I'll add a link to it. I'll add a link to it. I'll add a link to it.
There is an address you can add to it. There is a link to it, or a complete generator. I would like to add a link to it.
And you can add a link to it, to the processing. That I got. OK, we can add a link. Okay, is that an older Python? Yes, it's a little bit older, but it can be included in the older version of Python.
It's a bit older, but it's a little bit older. I think it's a bit older.
Yeah, cool, controllers. Yes, it's a bit older, but it's a bit older, but it's a bit older, but it can be included in the older version of Python.
It's a crazy process. Yes, the structure of all the performance of the cells in the lab. The setup and the loop. How does this interface work? I don't know, I'm not sure. I'm not sure how to translate it. I'd like to know if you can tell us. I'd like to know if you can tell us.
The command line interface is... Yes. And the packets are the ones that you're doing. Would you like to show... No, I'm just saying, on the other hand, to a file for the cell, or for the vehicle, I'd like to know. I'd like to know...
If I can have a look at the type of the test, and what to do. I'm not sure how it works, because I'm not sure how it works on the file, and I'd like to see that, and I'd like to see that, I'd like to see that, and if you want to know that. I'd like to know how it works.
This is the R-par, and this is also our packet, the one that the command line interface is with.
with Dash Hyrule and Dash Halep. Well, I don't know if that's enough, but at least it's a site, and I'm going to put it up here. Yes, I understand that I'm in the demonstration of simple GUI,
but with the black GUI, and the black interface, I think that's a very important part of the project. In the past, there were a lot of bad things going on, but I'm not sure if that's the case,
and you're going to have to go through the rest of the session to find out what's going on. Yes, I don't know what's going on. I'm not sure what's going on, but I'll tell you what's going on. I'm a little nervous. The director couldn't see it, and there is the button.
I'm a little nervous, and I'm a little nervous about how things are going, and how they're planning the airsliding. I'm going to ask you about the file pack, and what you're doing, and what you need to have,
and then we'll talk about it in a bit. you can do. Yeah, and this works, well, this works in a parameter world. Yeah. So you can see what it does, so you can see what it does. Yeah, I think that's what it does, I think so.
And there is a simple way to do it, if you want to, if you want to... Is Mike Barnett, is Mike Barnett here? No, I don't know what he's doing, but I can tell you what it does in the Discord channel, he's been working on it for a couple of days now.
Yeah. And he, what else can I say about that? I'll share it with screen here. And the other guy, he's doing it, okay, where do we start? Maybe if you're here, you can have a break and let me break out.
Yeah, I can, I can. Okay, okay. I'm not sure if you can hear him, but he's doing it in a very positive way. Oh yeah, I can hear him, yeah. And he's doing it in a positive way. Yeah, he's doing it in a positive way. Oh, here's the, I can hear him, he's doing it in a positive way.
This is what it does, and he's doing it in a positive way. So I can share it, if you're here, if you're watching this video,
I'm going to share with you my ideas, what my day was. And I'll share it with you, it's very good. I'm going to share it with you, and we'll find out. And that's the only thing.
I'm going to share it with you, because we're going to have a good time. But what's really good is that the key is there, you can have a very good key. And you can have a very good key with the key. You can have the key, and you can have a key with the key. And that's a technical way of doing it.
So the key is there, what's the key for that? An exception or something like that. The default action is that there's a pop-up here.
And if there's a pop-up here, it can be the key defender. I don't know if you can see it, but you can see the window. You can see the window. Yes, you can see the window. So you can see that this is your program. You can have a pop-up like that, but it's not there. And you can see that there's an exception there.
Yes, yes.
Number one, double quote. The key is there. The key doesn't have a variable. You can't have that when you're doing it. Yes, that's what I'm saying.
The key doesn't have a variable, does it? Yes, the key doesn't have a variable. You can have one of the numbers. The key doesn't have a variable. No, it's a yammer, it doesn't have a variable. Yes, the key doesn't have a variable. If you know it's the wrong formula.
Yes, the key doesn't have a variable. Yes, so you know the control. The key doesn't have a variable. The key doesn't have a variable. non non non non non non
the that's my that's my name okay the item yeah and it could be that is all the problem with clever clever complex he is name yeah i double
he and there is and the keys are connected with multiple different directions. So that's what we're talking about. We can't really talk about that, but that's what we're talking about.
I'd like to talk about that. And then the other thing is, if you're in the keys at the other end, you're right on the machine. So that's why we're missing a few parameters. yes, as if you are a child, so you can have a little parameter yes, yes can you please tell us a bit about your work?
yes, I think we can talk about it ok, we can talk about it, you speak a bit about it yes, we can talk about it, I think we can talk about it yeah, ok, yeah, yeah Yes, I think so, because we have to try something that is in our system, not in the book.
No, no, I'm sure that's what I'm saying. I can't think of something in life, but I think it's awesome. Yes, I think so. And I think it's a Q&A session, I don't think so.
It's really a key note. I think it's a good thing, but... I don't think it's even a question. Yes, I think it's a question. I think it's a question. Yes, I think it's a question.
Yes, yes. No, I don't think so. I think it's a question.
Can I have a nine-time mark? Yes. And display your credit please. OK, bye.