Suggestions for future developments

Use this forum to post Vensim related questions.
Post Reply
Augusto Carena
Junior Member
Posts: 9
Joined: Fri Jul 23, 2004 9:28 am

Suggestions for future developments

Post by Augusto Carena »

While I know that this is not within the original body of SD, i'd like the developers evaluate the opportunity of including some more sophisticated tools to manage discrete simulations (e.g. personnel chains for small numbers of units, etc.) that include conveyors with material outflow (all-in-once, not leakage), and similar, in order to properly deal with hiring cancellations, etc.
As alternative, I would like to exchange semi-standard solutions developed by members, to refine this kind of problem solutions with the traditional tools.
As a business simulation developer, I find sometimes difficult to make clients digest the continuous simulation logic, at least about some parts of the model.

Thanks

Augusto Carena
bob@vensim.com
Senior Member
Posts: 1107
Joined: Wed Mar 12, 2003 2:46 pm

Post by bob@vensim.com »

Take a look at Chapter 9 of the Modeling Guide - that may be helpful.
Augusto Carena
Junior Member
Posts: 9
Joined: Fri Jul 23, 2004 9:28 am

Post by Augusto Carena »

Thanks bob, i read it. But I can't find simple (for me at least) solutions to a problem like this. I start hiring 5 people, who are put in a conveyor (possibly with variable hiring time) before arriving. At some time i cancel 2 hiring. How can i simulate it? Leakage, as far I can understand, is fractional and distributed.
LAUJJL
Senior Member
Posts: 1477
Joined: Fri May 23, 2003 10:09 am
Vensim version: DSS

Post by LAUJJL »

Hi

One solution is to use a subscripted variable, whose size is the maximum number of people.
Each variable subscripted can have a value of 0 or 1.
If the value is 1, then there is an employee hired.
To fire one set one of the variable subscripted and having a value of 1 to 0.
Same for hiring. To hire one person set the value the subscripted value equal to 0 equal ot 1. It gives you complete control on what happens at each step.
Regards.
JJ

[Edited on 2-7-2008 by LAUJJL]

[Edited on 2-7-2008 by LAUJJL]
bob@vensim.com
Senior Member
Posts: 1107
Joined: Wed Mar 12, 2003 2:46 pm

Post by bob@vensim.com »

If you want to be able to cancel 2 specific individuals then you will need to use subscripts. Generally this would be formulated continuously as simply

starting work = in hire process / hire and process time
in hire process = INTEG(new offers - canceled offers - starting work, initial in hire)

Unless the dynamics of the problem are highly dependent of a discrete workforce counts this is usually a very effective, and simple, approach.
Augusto Carena
Junior Member
Posts: 9
Joined: Fri Jul 23, 2004 9:28 am

Post by Augusto Carena »

Thanks, JJ
In my experience, using subscripts adds further complications; apart from the case of dozens of units, when I need to cancel or fire people (not that specific person) I need prioritization routines, nested "if", etc.
My solution has been until now calculating a theorical hiring (based on a fixed delay) , a cancellation flow on the stock and an actual hiring rate that accounts for the current people really "on hire". However, it is far from a satisfying one. Another typical problem difficult to deal with in a discrete way is the minimum task duration in a project (Ford & Sterman). I'm sure that many practitioners have done much better than me, and not having to reinvent (tricky) wheels every time is the reason for my post

AC
bob@vensim.com
Senior Member
Posts: 1107
Joined: Wed Mar 12, 2003 2:46 pm

Post by bob@vensim.com »

I still don't really understand the issue but if you are need to have a discrete residence time so that anything going in really needs to not come out for 3 months then should all come out you might want to use the QUEUE functions. These are FIFO, but will allow forced residence times.

A fairly simple alternative is to use a sequence of DELAY FIXED with decision points between them. eg curing takes 3 months but bad batches can be discarded after 1, 2 or 3 months. Then sequence 3 delay fixed with the input to stage 2 the output from stage 1 * success at stage 1 fraction.

The SHIFT IF TRUE function can also be used to do this with somewhat more flexibility though also a bit more complexity.
LAUJJL
Senior Member
Posts: 1477
Joined: Fri May 23, 2003 10:09 am
Vensim version: DSS

using queues

Post by LAUJJL »

Hi

If you use subscritps you have much more control of what is happening, but the drawback is that you have to make all the calculations. If the queue is a FIFO, you have to choose which one of the subscripted is the older, take it away, and then carry on until the adequate number of elements are taken away from the queue. Same if you want to add some new elements. It is better if you use subscripts to be fluent using them.
In general the FIFO queue in Vensim is already powerful, but you must still practice with it using the accompanying functions like queue age average etc... Lots of thing are automatic and you need only little programming.
The best thing to do would be to start explaining your problem with current english word, starting eventually with something very simplified and adding more features later on.
Maybe your problem has nothing to do with queuing and can be solved using much more simple functions.
It is very easy in SD, to think that adding more precision, will add more value. It is often the contrary that happens. To know the level of details needed, one must know the purpose of the model.
Regards.
JJ
Post Reply