Jump to content

dsturrock

Administrator
  • Posts

    1,651
  • Joined

  • Last visited

  • Days Won

    51

Everything posted by dsturrock

  1. A simple approach is to create the highest resolution image you can find using any map program or other software. Save it off in one of the import formats: Hint: some software allows export as a high-resolution pdf. Then you can convert that pdf to a png file for import into Simio. Then import that as a symbol and place that in your model (preferably to its original scale). Then lock that to the background and build your model on top of it. The main down side of this approach is that it is limited by the resolution of your image, so if you zoom in, it might appear fuzzy.
  2. If you haven't already done so, I'd start by reviewing the SimBit ResourceSelectionConcepts. It contains several models that explain different types of resource selection. In particular, I'd suggest a combination of the following approaches: Create a table for each Worker (and/or each Server) where columns in the table represent the constraint or exclusions. For example, you might have a server table with columns for each day, and each column might contain a list of workers who can potentially be used on that day. Use resource lists to select from. possibly with exclusion conditions (maybe referring back to a table) of which resources cannot be used on that server and that day.
  3. You want to make the servers have a Capacity Type of Schedule and follow the default Standard Week. If you don't want to give them a lunch break, just change the definition of the Standard Day. Leave the default Off Shift Rule of Suspend Processing. The easiest approach for arrivals is to have a Source with an Interarrival time of 4.33 weeks (or 4 weeks) and an integer random distribution for the Entities Per Arrival. Doing a "first Monday" is possible, but a bit complicated because Simio time does not have the concept of Month because months are of varying size. You could probably specify the initial Time Offset to be early in a month, then maybe make the interarrival time be something like DateTime.DaysInMonth(DateTime.Month(Timenow),DateTime.Year(TimeNow)) which would make the next arrival be exactly one month later (same day of the month). When you say you have no buffers, what do you mean? If an entity arrives when all servers are busy, should it be balked (possibly disposed) or should it wait somewhere like on the server input node, on a path or in the Source output node? If the above arrival approach isn't exact enough, you can put exact arrivals in a data table. The arrival time could be specified at any exact datetime you desire and still have the Entities Per Arrival be a distribution.
  4. Without seeing the model, I might guess that it is a timing issue - perhaps the SetRow is not executed before the results are used. You might be able to discern that by stepping through the model Trace and Watch window.
  5. Perhaps its a little late, but attached is a possible solution to your problem. This started out pretty simple. The problem was how to specify which server is serviced by which resource. One way to do that is a table. But since its changing over time I chose to use a time-indexed table, that is a table that knows about time and returns different data at different times. In this case, each row corresponds to 12 hours and each column specifies the resource needed by the respective server. As they say, "the devil is in the detail" and in this case the "devil" is that the specified resource may change between seize and release (e.g., seize at 11:59, release at 12:05). Simio doesn't like that and all the easy options re-evaluate the resource expression on release and so may try to release the wrong resource. One option would have been to create a custom server, but that seems to be overkill. Here is a somewhat simpler approach: 1) Add an entity state named MyResource and assign it at the last possible moment before use. This value will be used only for release. The assigned value is drawn from the table using an expression like Table1.S1Resource.TimeIndexedValue.Object. Note that the .timeindexedvalue indicates to get the value associated with the current time. And the .object at the end is used to tell Simio to return that value as an object not a number. 2) Use Secondary Resources - Other Resource Seizes to seize the name specified in the table using the same expression above Table1.S1Resource.TimeIndexedValue.Object. 3) Use Secondary Resources - Other Resource Releases to release the resource saved in MyResource. TimeBasedWorkerSelection.spfx
  6. Have you explored the properties in the Financial property group? It seems like the options there might automatically calculate what you are looking for without any custom objects or states.
  7. there are several easy ways to do this. 1) Subclass the Resource or Worker object with the only change is to add a property or state (ex PTime) to hold the processing time specific to that resource. 2) Put your process times in a table and reference the correct table row for the doctor that is working. The SimBit WorkerPoolWithEfficiency does something somewhat similar.
  8. I have seen this happen sometimes when there are no observations or when one or more of the observations generates an error or a NaN result.
  9. I have attached a simple model using model states to illustrate. I think it should work in a similar fashion using entity states. First, I define the states: Then use those states as Sequence destinations: Until you provide each of those states a value, the Sequence will make no sense and the entity won't know where to go. So on the Source I use an Assign to initialize all the values. This will direct the entity sequentially through Servers 1-4, and then to the Sink: Finally, just to illustrate the technique, on the output node of Server3, I interrupt the normal sequence by Assigning it to instead go to Server5 as its 4th step: If you convert these states to Entity states instead (I was just lazy), I think it should work the same but allow you to selectively override any Sequence Step at any time. UsingStatesInSequences.spfx
  10. This is problematic in Simio because Simio considers only entity length (not width) and only when on a Path or Conveyor. I think the first thing to do is fix the nose to tail problem. If you happen to use Conveyors to model this, there are built-in features to manage spacing while stopped and different spacing while moving. But unfortunately Conveyors are limited to a single direction, so are perhaps not appropriate if this is a bi-directional taxiway. If you are using Paths, you can fix this by making each plane longer when you draw it. For example, if you are drawing a plane that is 50M long and you want it to stay at least 10M behind the plane in front of it, place a nearly invisible dot about 10M in front of the plane's nose, making the total plane length (including safety spacing) be 60M. Although Simio will still put the entities nose to tail, there will be a 10M safety spacing between the physical planes. The problem of conflict at merge points is a bit more tedious to fix. I'd recommend a resource-based approach, like illustrated in the SimBit in Merging Conveyors Controlled by Gate. You can use this approach even when using Paths.
  11. It sounds like you are already set up to use a Source with Arrival Mode of Arrival Time and the Arrival Time Property of MyTable.TimeOffset (assuming that your table above is named MyTable). If the column named Object in your table above is the entity type you want to create, then specify the EntityType in the source to MyTable.Object. If the entity you want to create is something different, then add that new column to your table (say PassengerType) and specify EntityType as MyTable.PassengerType.
  12. We continue to welcome volunteer involvement in our student competitions. 1) We welcome ideas for new competition problems. 2) We welcome your involvement in creating a problem. This could be scaled to any level ... from simply providing some detailed modeling situations and possibly blinded data up to public sponsorship and recognition of your organizations involvement. 3) If you would like to practice your skills by getting early access to a draft of the problem, we would welcome your involveent as long as you have no other competition involvement and commit to secrecy :). 4) We are always looking for judges. It typically requires a time commitment of about 6-8 hours spread out over about 7-10 days. Please contact me (dsturrock@simio.com or academic@simio.com) if you can help us with any of the above. Thanks in advance, Dave Sturrock
  13. The SkyBox icon on the View Ribbon opens a library of static and dynamic scenes that can be placed in the 3D animation. Dynamic scenery includes several options for clouds that move with the animation as the model runs. Typically, the Speed Factor should be set to 5 - 10 or greater to see movement. Static skybox options include many indoor and outdoor scenes. Indoor applications include adding building walls to surround your model. The 'None' option will remove any existing skybox. Users can create their own SkyBoxes as well. The “library” skyboxes are simply *.zip files with images inside them with the names front, back, left, right, top, bottom. They don’t need to have all of those names in them, Simio will use whatever ones it finds. They are located in the Skybox folder under \Public\PublicDocuments\Simio. Note when you first apply the SkyBox, you can only view it in 3D and you may need to use the Ctrl Scroll wheel to move the camera down to where you can see the horizon. There are over 20 SkyBoxes that are installed with Simio. A few more are attached below. Simply download and save these zip files in the C:\Users\Public\Documents\Simio\SkyBox folder. The next time you open Simio you should see something like this under SkyBox options: Here is an example of the MFGPlant SkyBox with a server in the foreground: If you create your own skybox images that you feel might be useful to others, please share them here. Hospital.zip MFGPlant.zip Warehouse.zip Airport.zip CleanMFGFacility.zip NEW NOTE: We just decided to reduce the size of these and some existing skybox files and include them all in Sprint 215. So it is probably better that you just wait a bit unless your need is urgent.
  14. Llario, Thank you for the offer. You are correct that I don't see many current sales in Bulgaria. Do you think a Bulgarian translation of the software would make a significant difference? It is fairly easy to generate a machine translation, but can be fairly tedious to clean up mistakes in the machine translation.
  15. People often miss the fact that a Combiner is basically just a Server with some extra combining logic. It sounds like that is exactly what you need here. Replace your Server with a Combiner, then immediately follow your Combiner with a Separator to restore the entities to their individual members.
  16. I have attached a simple example of one approach. 1) I edited the ModelEntity object and added a state array of type MatrixFromTable. This type of array is automatically initialized from a table. Ideally I might have also added a table to the entity, but Simio doesn't work that way. Instead, I added a RepeatGroup named InitializationValues consisting of a Real property. I used this repeat group as a way to essentially add a "table" into the object, since internal to Simio there is almost no difference between a table and a repeat group. 2) Back in the model I added a table and then imported data into that table from Excel. I used 10 rows, but I could have imported 350 rows with no change to anything else. 3) Now when you place the ModelEntity object into a model, you can pass a table into the InitializationValues repeat group. Again, intead of just typing a bunch of values into the repeat group, I just say go get the whole repeat group from a specified table. This has the result of sizing that state array inside the model entity to match the current size of the table, and then initializing the state values to whatever is in the table. 4) If you run the model, you can open the Watch window on any entity and view the values of its states. I expect this won't solve all your problems, but maybe it will give you a fresh approach to consider. ImportStateValues.spfx ImportStateValues.xlsx
  17. I ran your model until the warning occurs and then examined the Content and Throughput categories in your Results Pivot Grid. I didn't notice any alarming buildups in any of the Combiners, Conveyors, or Servers, but the Entity statistics appear unusual: None of your 3 entity types ever exit the system. Your problem is with creation of too many empty pallets. Another thing I noticed that could be the main problem is that your Empty Pallet source creates 6 empty pallets every .25 minutes, with no limit. When I converted this to a just-in-time (Event Based) creation the entity limit problem went away for that entity type: To answer your specific question, on the Project Home ribbon there is a place to open a Breakpoints window that allows a lot of flexibility to trigger a model break (pause) when a specific condition occurs. I hope this helps.
  18. A couple quick thoughts: Both from your description and from what I know about chair lifts, it seem that using a conveyor might be the best modeling approach. You might consider using a combiner instead of a server to synchronize all waiting skiers together into a lift car.
  19. First, do you really need 5000 different entity instances? What makes them differ from each other? In general, a better approach is to have one, or a few, entity instances, and perhaps add a state (or possibly a property) that indicates their difference from each other (like PartNum, Color, Part Family, Sequence Followed, ...). But assuming you have a good reason for this approach, what you need to do is take advantage of the AutoCreateInstance feature as illustrated in the screen shot. While it is not required, in general when you automatically create instances, you also want to specify where they are displayed. So I added a XLocation column to your data file. When you import that data file, the entity instances are automatically created in your facility view. CVOR Data Table.csv CVOR v2.spfx
  20. As you indicated, you can open and run an RPS or Enterprise model in Professional or Team. But Professional/Team is NOT designed as a "run time" version for scheduling. You cannot see, change, or take advantage of the scheduling-specific features. But I believe that you could change the model, save it, and reload into Enterprise and I think you will not lose any Enterprise features.
  21. Absolutely. Look at SimBits that reference Task Sequences.
  22. Using paths and networks this is pretty easy. You can specify that a worker follows a given network and that network can prevent him from traveling in forbidden areas - for example a visitor network vs an employee network. I expect it is possible in free space but it would likely involve user written code (steering behavior, ...) or some cleverness. But I can't help much beyond that.
  23. To start with, Destinations in Simio are always nodes. So the table should have a column of type Object Reference Property > Node. Although its not on the pull-down list, when you specify a entity destination as Select From List, you can also specify a table column of type node list and it will automatically respect the table rows associated with that entity. Model_RandomRow_FilteredTable.spfx
  24. For each location where you want to start a time interval (Server 1 and "the very beginning" in your example) you would need to add a state to the ModelEntity (NOT to the model). Then for each place you want to end a time interval (server6, "the very end", and server4 in your example), you would need to add a TallyStatistic element and Tally and observation at the point. For example to record the time between between Server1 and Server6: create a modelentity state named TimeDepartingServer1 assign TimeDepartingServer1 the value of TimeNow when entity departs Server1 create a TallyStatistic element named Server1ToServer6Time record a Tally observation (using node or Tally step) at Server6 recording the value TimeNow-TimeDepartingServer1 to Server1ToServer6Time add a status or floor label using the expression Server1ToServer6Time.Average
×
×
  • Create New...