Events

India Seminar
Mumbai, India
20-22 Nov, 2019    
 
MUGI 2020
Seville, Spain
19-24 April, 2020    
 
MUG 2020
Chicago, Illinois
27 Sept-Oct 2, 2020    
More
"Do most use a single “transfer price” for gas and diesel and other products or do they use a series of pricing levels, each with a finite layer of volume with lower and lower prices I would describe as a “tiered pricing/volume” basis that better captures the incremental markets available to the model?"
 
Tiered pricing is very common in planning models.  It isn’t used all the time, of course.   That depends on the time horizon in question and the commercial situation of the refinery.   Some refineries do serve only their local market.  For investment studies, macro-economic overviews and other long-look ahead cases, single pricing per product is more typical.  This is not surprising given the uncertainty in price forecasting.  For doing a budget or evaluating crudes – a more medium-term planning horizon -  models often have at least a basic split between, say, local market and export, or term and spot.   This is certainly worth doing where it is clear that there will be a price differential and there is some past experience to indicate what the potential volumes would be.  I have even seen a model where the spot price was adjusted based on amount sold, as the refinery was a big enough contributor to the regional balance to suppress the price if it put sufficient volume into the open market.  An interesting relationship to model as it affects the price for all the spot gasoline once the threshold is reached, not just the excess amount. 

Some refiners are able to take their market division a bit further and add terminals, or something like that, to represent a number of alternative sales options.    In some cases, incremental volumes are made to different specifications than the main production and so are represented as distinct products.  For example, in Europe,  models sometimes contain options to make a gasoline pre-ethanol base oil blend to ship to the US, or a low octane gasoline that could be exported to Africa, if the price is right. 
 
Some models go quite a bit further in having product demand divided up into multiple small portions – down to the level of the district or even the customer.  These are usually specialized distribution models built to decide which of several transport options should be used to fulfill each contract. (Sometimes integrated with the full refinery model - sometimes with the refinery production simply as an available quantity)  Even if you are not a multi-refinery business you can have alternative supply options such as buying product from another producer or setting up an exchange deal.  ("Swop you some gasoline in the north for some diesel in the south" sort of thing).  Such models often cover several grades of product and can have 1000s of sales. Managing the data becomes quite challenging and it will probably need to be linked to some sort of order tracking system.

How do you go about setting up pricing tiers when you want to sell the same product more than once?  You can’t put the same record into the sales table twice:
 
53 DuplicateRowRedDot
What can you do to make them different?
 
1. Use different Cost Accounts
If you have more than one sales account, products can be sold in each:
53 DifferentAccount
This is particularly convenient when the tier represents a market where you sell multiple products.  The revenue will be sub-totaled in the economic report and the activities sorted together in the list of sales.   Adding extra accounts is quite easy if you are using database input.  If you are using spreadsheet-based data, it is not so convenient as you must add them to a CLASS and classes don’t have a modify mode.  However, if this is something that is going to be part of your normal case set up, adding them to the master file is a one-time job.


2. Sell a Different Stream

I hope it is obvious that it is NOT a good idea to create multiple products with the same specifications (recursion nightmare!). It is much better to define an alias using Composite Groups [Table 1xx.2].  A product can be set to correspond to any number number of alternative stream names, each of which are sold.

53 DefineAlias 
 
53 SellWithAlias
 
3. Sell it at a different location
Transport modelling can be used to transfer the stream to another location, where it can be sold at a different price.
53 SellOtherLocation
If you used multiple accounts or aliases the prices could be adjusted to take into account the cost of accessing that market: wholesale price less pipeline fees, for example.  However, if you have a lot of sales to consider, constraints on movements, or multiple transport options, it might be more useful to model the movements explicitly and separate the costs from the revenue.  You will be able to see an input/output balance for each location.  With a 2-character identifier you can define something like 40,000 location codes, so that is unlikely to be a limit in itself, but they do start ending up with rarther hard to type names after the first 4000 or so, and of course the bigger the model gets the slower it will be and the more complicated to understand - so maybe districts rather then petrol stations!
 
Pricing
As a final thought on adding multiple sales, always remember that the optimization will choose the most profitable activities first.  This may be exactly the question you are asking  - which options are most worth pursuing.  However, if the tiers represent an ordered sequence (First sell so much for price A, then next amount will earn B) – the prices need to be decreasing or the volumes constrained.  If the second tier has a higher price but you must fulfill the first one before it is available, unless that previous tier is a fixed amount, you will need some kind of MIP control structure to impose that logic.
 
 
 Thanks to Doug Keene for the question.
 
P.S.  Don't be tempted to use the non-linear pricing system to do tiers or switch prices based on sales amounts.   You can certainly set it up using IF statements but stair-step functions don't linearize well, as the slope will either be 0 or the jump to the next price, making it difficult for the optimizer to predict what happens if you change the amount.
From Kathy's and Richard's desks 
28th March 2019.

Comments and suggestions gratefully received via the usual e-mail addresses or here.
You may also use this form to ask to be added to the distribution list so that you are notified via e-mail when new articles are posted.