News:

Use the "Forum Search"
It may help you to find anything in the forum ;).

Interactions between Passenger Transport and Goods Transport

Started by knightly, March 05, 2009, 08:48:14 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

knightly

May I know, if I have successfully supplied goods to those in-city end-consumer stores (e.g. pharmacists, supermarkets, shopping malls), will the town grow faster? I hope the answer is yes, for that is not only logical and reasonable, but also raises the importance of goods traffics, which can boost passenger traffics by increasing local population. It's difficult to start with a full scale passenger network in the early phase of a game, and it would be advantageous that goods traffics can also help improve population growth. After all, if a town has sufficient supplies of different goods, it can attract more people to reside there.

Besides, I think it is quite strange that one can build transformers next to such end-consumer stores to speed up goods consumption. Goods consumption should depend on demand.

I think it may be a good idea to give each end-consumer store a certain service area (say, 8 x 8 tiles) where demand is calculated based on population within that service area. Or, alternatively, demand can be calculated based on those passengers whose destination is that particular end-consumer store, and randomize the quantity of goods that passenger buys from that store.

The latter travel-buy-return choice may be the better choice, as that follows the logic of the game : if you can supply more connections to an end-consumer store, that store will have more customers and more sales. In turn, you will expand your goods transport network to cope with the increasing end-consumer demand. And the factories may also expand themselves gradually (just like grain farms in Pak128) if they can constantly maintain uninterrupted production, causing positive interactions.

EDIT : below + above 2nd paragraph split into 3 for readability

Lastly, any satisfied consumer (those who successfully buy something from the end-consumer stores) will raise a consumer satisfaction index and any disappointed consumer (those who fail to buy anything from the end-consumer stores) will lower that index. Such index can be used as a determinant of town growth which I mentioned above. The only logical flaw is that, cross-town buyers will also affect local town growth, but that is not important, as we can think in this way : if the stores can really offer constant supply of different goods, more people are willing to reside locally anyway.

I don't know if it is desirable, but some passengers can be generated with a goal to purchase certain goods, and they will choose from the available stores as their travel destinations.

The Hood

1st paragraph - that is what happens I think.

2nd paragraph - interesting idea, but expanding industries would be hard from a graphics point of view (fields are obvious and all the same for farms, but how to produce a one-tile expansion building for most factories? - I suppose there could be a generic "warehouse" type graphic).

prissi

All consumbers that accept workers from a certain town will stimulate growth of those cities. Also supplying a power plant will generate jobs and thus attract people to living in this area.

And imagine power as a lighted parking lot, neon advertizements, and air conditioning: More customer will come and shop here ...

knightly

Quote from: The Hood on March 05, 2009, 09:03:43 AM
1st paragraph - that is what happens I think.
Ah, you are right. I should have tested this myself before asking. Sorry!

Quote from: The Hood on March 05, 2009, 09:03:43 AM
... I suppose there could be a generic "warehouse" type graphic).
Agree. Some industries are really difficult to make them grow graphically by automatic addition of new surrounding tiles. Your "generic warehouse" idea is good.  :D Even if that can't be done, I guess it doesn't matter if we simply increase the monthly production unit figure of the factory. I guess that would do already.

Quote from: prissi on March 05, 2009, 09:23:33 AM
All consumbers that accept workers from a certain town will stimulate growth of those cities. Also supplying a power plant will generate jobs and thus attract people to living in this area.
Both concepts are very nice indeed.  :) But these stimuli on town growth are from the angle of employment, not consumption. As I have said above, if a town has sufficient supply of many goods, it should be able to attract more people to reside in it. Off-topic : does the employment effect on town growth exist only when the factories are engaged in production?

Quote from: prissi on March 05, 2009, 09:23:33 AM
And imagine power as a lighted parking lot, neon advertizements, and air conditioning: More customer will come and shop here ...
You are right in that.  ;) But I guess that is just one of the less important factors that determine demand. If the population is low or if no transportation brings people to the consumer stores, what use is of extra power supply? Besides, the power-supply concept has nothing to do with transportation which is the main theme of this game.

My travel-buy-return suggestion above is transportation-centric :

If you are able to bring more people to shop at the consumer stores, you have higher demand and higher sales, which in turn allows you to expand your goods transportation and boosts your profits on it as you have more goods to deliver.

On the other way round, if you manage to maintain sufficient supply of various goods, more people will board your buses or trains for shopping and you will have room to expand your passenger transport and you can earn more (Maybe we can give each consumer store a grade based on goods availability so that passengers can choose which stores to visit?).

This is what I refer to as positive interactions between passenger transportation and goods transportation.

I suppose the travel-buy-return suggestion would be more in line with the philosophy of this transportation game, one that works well with and extends Hajo's initial design of giving passengers a destination, one that bridges the gap between passenger transportation and goods transportation, and one that IMHO is worthwhile to explore further.

Edit 1 :

Another possible interaction between passenger transportation and goods transportation is that, if a player successfully brings workers to a factory, there can be a production boost of certain percentage, so that goods transports can benefit by having more goods to deliver. I believe this is better than supplying electricity, which is outside the scope of transportation.

Edit 2 :

As a final comment, currently passenger transport and goods transport seem like 2 isolated, independent systems which have little or no relation to one another. But I believe that some interesting interactions between the 2 are not only reasonable but can also make Simutrans more playable and more interesting.

Look forward to comments from all of you.  ;)

Edit 3 : Topic renamed to better reflect coverage

knightly

I have a short discussion with Isidoro. And I have his authorization to reproduce the relevant parts here :




Quote from: isidoro

Many people ask ST to evolve to a more city-building simulation game or to make all different parts of it more connected (so that several subsystems influence each other).  There are two problems: first, ST already has a steep learning curve as it is.  If you complicate it more, new users would be overwhelmed.  Veteran users, however, push for more features or a more consistent game.  Second, many ST players really want a pure transportation game:  you have some stuff here that wants to go there.  Your job is to transport it, no matter how that stuff appears there at the beginning.  My opinion is that they may be right: if we move far apart from that, we may be talking about a different game.

Technically speaking, as ST is now, having passengers with "routes" (i.e. go to that shop, then to job, then back home) is not feasible.  Only convoys have routes.  Passengers and goods have destinations and, in present version, they don't even know where they came from.  If that were added, more city-like events could be simulated: day-night, workdays-weekend, etc. patterns.  But the game would be "heavier" (slower, requiring more memory, etc.)





Quote from: Knightly

Quote from: isidoro
ST already has a steep learning curve as it is.  If you complicate it more, new users would be overwhelmed. 

I also have this concern. I would suggest giving each consumer store a smaller service area (like 2 x 2) in addition to my travel-buy-return suggestion. In that way, as long as there are some civilian residences around the store, there should be some basic level of demand and consumption to make each store functional.


Quote from: isidoro
many ST players really want a pure transportation game:  you have some stuff here that wants to go there.  Your job is to transport it, no matter how that stuff appears there at the beginning. 

First of all, I think my suggestions can be made as a customizable option.

Secondly, while there are players who just want to transport goods/people regardless of how they arise in the first place, I guess this kind of players is rare nowadays. Simutrans is not a transportation simulation utility program -- it is a transportation simulation game.

Thirdly, my suggestions make the game more intuitive than it currently is -- it would be bizarre to see automatic consumption of goods if the consumer store is situated in the middle of a desert which is void of any population or transportation link.

Fourthly, I don't think my suggestions are really complicated to players (maybe complicated to coders though), as they are just common sense. One has to go to the shop to buy, and if more people buy the goods, the shopkeeper will order more goods, simple as that. I guess it is more a matter of expectation -- a new player has no predetermined expectations but play with common sense. If common sense works, I don't think they will complain.


Quote from: isidoro
Technically speaking, as ST is now, having passengers with "routes" (i.e. go to that shop, then to job, then back home) is not feasible.  Only convoys have routes.  Passengers and goods have destinations and, in present version, they don't even know where they came from.

You are right. But I am not suggesting giving people routes. As far as I can recall from one of Hajo's posts, once passengers arrive at a certain destination, a return trip will be automatically generated. In short, travel-return is already in place. What I now suggest is, before the passengers embark on the return trip, they can buy something from the store they have arrived at. It would be ideal if the goods they intend to buy is determined before the journey starts and is remembered as they travel, but if that can't be done easily, it is still good enough that they choose what they buy on spot when they arrive at the store.





Quote from: isidoro

Talking about the technical part: making the consumption of end-factories (shops, etc.) dependent on population around + people transported there would be easy. Each time a passenger arrives, some goods are consumed.  Your idea of making the passengers and goods network interact would be fulfilled this way and it's nice, in my opinion.

But you got it wrong about the return ticket issue.  When a new passenger is generated, another one is generated with the opposite route.  It doesn't work the way you understood.  The passenger is not generated when the first reaches destination, among other reasons because origins in transported "packets" is not kept.





Now, my feedback to Isidoro's 2nd reply :

Quote from: isidoro
But you got it wrong about the return ticket issue.  When a new passenger is generated, another one is generated with the opposite route.  It doesn't work the way you understood.  The passenger is not generated when the first reaches destination, among other reasons because origins in transported "packets" is not kept.

Even if that is the case, it doesn't matter. As long as passengers arriving at a store can buy something (just reduce the available goods quantity), that will do. We don't need to simulate their bringing the purchased goods back home  ;)

isidoro

That sounds very interesting to me.  It would connect the two subsystems in an easy way.

knightly

Thanks for your interest in this, Isidoro.  :D

I mention above that stores with stable and sufficient supply of goods should attract more consumers. To set up a Customer Satisfaction Index (a non-negative figure) per store based on successful or unsuccessful purchases should not be difficult to code, I guess ;).

To change the level of customer patronage, I would suggest making the Passenger Level of the store dependent on its Customer Satisfaction Index. Of course there would be a base level of Passenger Level as well as a ceiling. When the index rises, so is the Passenger Level; and vice versa. In that way, increased patronage can be simulated to reward stable supply of goods by well-developed goods transport.

Of course, this suggestion depends very much on whether Passenger Level can be adjusted during runtime. Do you think that can be done :D?

Besides, the Customer Satisfaction Indices of the in-city stores can be added up, and the resulting sum would be a factor determining town growth. I hope this would be technically feasible too.




On the other hand, can we adjust the Monthly Production Unit figure whenever workers from designated towns arrive at the factories, and whenever the factory has been steadily engaged in production?

The latter case seems to be easier; but for the former case, in what way should a newly arrived worker affect production rate? Increase certain percentage of production for a certain duration per worker? It's difficult to set, as there will be workers arriving from time to time. Any idea?

isidoro

Your ideas are similar to James Pett's ones.  Perhaps you can convince him to try some of them in ST Experimental.

I would only be for the most simple one: passenger arrived, product consumed.

Now, the technical part, afaik:

  • You can increase factory production at runtime.  Now, it is done with electricity.  A similar approach can be followed for passage arriving at a factory
  • Looking at the code, I'm sorry to inform you that passenger level is a property of a "type of factory", i.e., if you modify it, you modify for all factories of the same kind.  In fact, it is the same quantity for pax level and mail level.  Of course that everything can be changed, but it is not direct.

knightly

Quote from: isidoro on March 09, 2009, 01:46:22 AM
Your ideas are similar to James Pett's ones.  Perhaps you can convince him to try some of them in ST Experimental.

Oh, really? Is there a thread by James Pett which discusses it?

Quote from: isidoro on March 09, 2009, 01:46:22 AM
I would only be for the most simple one: passenger arrived, product consumed.

It's already very good that you support the key component of my suggestions. Though I do hope that you can reconsider the proposal of increasing Passenger Level based on Customer Satisfaction Index : it is the way Goods Transport has impact on Passenger Transport. Implementing the customer purchase suggestion alone will only give unilateral impact on Goods Transport by Passenger Transport. I think it is worthwhile to have bilateral interactions.

Quote from: isidoro on March 09, 2009, 01:46:22 AM
Looking at the code, I'm sorry to inform you that passenger level is a property of a "type of factory", i.e., if you modify it, you modify for all factories of the same kind.  In fact, it is the same quantity for pax level and mail level.  Of course that everything can be changed, but it is not direct.

Thanks for your info. I guess changing class properties into an instance properties would not be difficult.




A clarification : The base level and ceiling of Passenger Level can be computed based on the existing Passenger Level figure store in the DAT files. So, no need to change existing DAT files.

jamespetts

Knightly,

I am not currently planning to code this specific feature, but the thread discussing Simutrans-Experimental is here.
Download Simutrans-Extended.

Want to help with development? See here for things to do for coding, and here for information on how to make graphics/objects.

Follow Simutrans-Extended on Facebook.

knightly

Thanks, James. I guess your modified passenger generation which biases more towards local travels will work pretty well with my customer purchase suggestion.




Here, my proposal for worker-factory relationship. It's a bit complicated, I admit. But I am not smart enough to come up with a simpler and better model which is also reasonable :P

Firstly, concepts. I think that the factory scale should depend on goods demand only, and it will in turn affect the maximum number of workers that can be hired. Worker availability should not affect factory scale, though it can affect the actual production level.

Secondly, some algebra to illustrate my model.


  • Let P be the production level stored in DAT files.
  • B = base level of factory scale = a function of P (e.g. B = 0.4P)
  • C = ceiling of factory scale = a function of P (e.g. C = 2P)
  • E = expansion of factory scale 

         
    • If a factory has been engaging in steady production, E will rise gradually
    • If a factory remains idle for a long time, E will fall gradually
    • current factory scale = (B + E) <= C
  • A = actual production level = a function of (B + E) and W, where W refers to worker availability

         
    • e.g. ( (0.4)(B + E) + ((1-0.4)(B + E) x W) )
    • 0.4 is an arbitrary ratio to ensure that the factory will produce goods even without any supply of workers. This ratio can be customized for different difficulty levels.
    • If W = 1 (or 100%), factory will be working at its current maximum production level allowed by the current factory scale
  • W = worker availability = number of workers in effect / expected total number of workers

         
    • A linked-list will be created to store in its nodes

               
      • the number of workers in each worker packet, and
      • the expiry time of the packet's effect on production level (= arrival time + predefined Expiry Interval)
    • When a packet of workers arrive at the factory, the above data will be extracted/computed and added as a node to the linked-list. A separate count variable would also be incremented to avoid traversing the linked-list. This count variable actually stores "the number of workers in effect".
    • Expiry checking is done on the "oldest" packets and when certain packets of workers expire, the count variable will be decremented and the corresponding node will be removed from the linked-list in FIFO fashion.
    • "Expected total number of workers" is a function of Passenger Level of the factory as well as Expiry Interval of worker packets. This figure should estimate the total number of workers arrived within the Expiry Interval given the current Passenger Level. Since I don't know how passenger generation actually works with the Passenger Level figure, I leave it to any interested coder to decide the proper forumla.
  • Passenger Level, in my model, behaves like the factory's demand for workers. It will again have a base level and a ceiling, both of which will be a function of the level stated in DAT files. The actual Passenger Level will be dependent on (B + E), the current factory scale. The larger the current factory scale, the higher the Passenger Level; and vice versa.
  • Mail Level can behave similarly as Passenger Level too




Mail Level can also vary with Customer Satisfaction Index at consumer stores, just like Passenger Level.




These are all the ideas I can offer on this topic. While these suggestions apparently require some changes and additions to existing code, I have tried to make them work within the existing paradigm as much as possible.

Any comments and suggestions are most welcome. :D I will wait till the end of this week before summarizing my ideas into an extension request.

isidoro

Quote from: Knightly on March 09, 2009, 07:22:01 AM
Thanks for your info. I guess changing class properties into an instance properties would not be difficult.

It's not a class property.  It's a separate class.  Every actual factory has another class; its factory type.  In that factory type instance, the pas level is stored.  But it's not difficult, as you say.


Quote from: Knightly on March 09, 2009, 10:00:43 AM

  • W = worker availability = number of workers in effect / expected total number of workers

         
    • A linked-list will be created to store in its nodes

I wouldn't go for a linked list for such a simple thing...  Simply declare a variable "task force" or something like that.   Decrease that variable with time and increase it each time workers arrive.


colonyan

@Knightly
 
  Does this model influences growth?
  Increased sales result of bigger demand given by passengers assisted facotries and shops impacts how cities grow?
  I want more detail of your model.

knightly

@Colonyan

Quote from: colonyan on March 17, 2009, 12:05:32 AM
  Does this model influences growth?

Yes, it does influence city growth. As mentioned above, a customer satisfaction index (CSI) will be calculated per month based on customer purchase successes and failures (fail if desired goods are out of stock). This index will be a determinant of city growth. It is on per month basis to average out the short term shortages.

Actual monthly consumption (AMC) will also be considered in determining city growth.

To illustrate how the 2 act together to influence city growth, please see the following example below :
    Case 1 :  CSI = 100% & AMC = 200
    Case 2 :  CSI = 40% & AMC = 200
Boost on city growth should be higher in Case 1 than in Case 2. The reason is that, while the same quantity of goods is supplied in both cases, the quantity in Case 2 is far from sufficient to meet demand and will generate discontentment.

colonyan