Main > Reference Manual > Modeling > Buffer
A buffer is a storage for a item.
It represents a place where inventory of an item is kept.
Different types of buffers exist:
- buffer_default:
The default buffer uses an "producing" operation to replenish it with additional material. - buffer_procure:
A buffer that is replenished by a supplier. A number of parameters control the re-ordering policy: classic re-order point, fixed time ordering, fixed quantity ordering, etc... - buffer_infinite:
An infinite buffer has an infinite supply of the material is available.
Fields
Field | Type | Description |
name | non-empty string |
Name of the buffer. |
description | string |
Free format description. |
category | normalizedString |
Free format category. |
subcategory | normalizedString |
Free format subcategory. |
owner | buffer |
Buffers can be organized in a hierarchical tree. |
members | list of buffer |
Buffers can be organized in a hierarchical tree. |
location | location |
Location of the buffer. |
item | item |
Item being stored in the buffer. |
onhand | double |
Inventory level at the start of the time horizon. |
carrying_cost | double |
The cost of carrying inventory in this buffer. |
minimum | double |
Refers to a calendar storing the desired minimum inventory level, aka safety stock. The safety stock target is expressed as a quantity. If you want to define a safety stock target as a time value (aka days of inventory), you can set a post-operation time on the producing operation of the buffer. |
minimum_calendar | calendar |
Refers to a calendar storing the desired minimum inventory level, aka safety stock. |
maximum | double |
Refers to a calendar storing the maximum inventory level. |
maximum_calendar | calendar |
Refers to a calendar storing the maximum inventory level. |
producing | operation |
This operation will be instantiated by the solver to replenish the buffer with additional material. |
detectproblems | boolean |
Set this field to false to supress problem detection on this buffer. |
flows | list of flow |
Defines material flows consuming from or producing into this buffer. |
flowplans | list of flowplan |
This field is populated during an export with the plan results for this buffer. It shows the complete inventory profile. |
level | integer |
Indication of how upstream/downstream this entity is situated in the supply chain. |
cluster | integer |
The network of entities can be partitioned in completely independent parts. This field gives the index for the partition this entity belongs to. |
hidden | boolean |
Marks entities that are considered hidden and are normally not shown to the end user. |
action |
A |
Type of action to be executed:
|
buffer_default
The default buffer uses an "producing" operation to replenish it.
No fields are defined in addition to the ones listed above.
buffer_procure
A procurement buffer is replenished by a supplier.
A number of parameters control the re-ordering policy: classic re-order point, fixed time ordering, fixed quantity ordering, etc...
The parameters LEADTIME, MININVENTORY and MAXINVENTORY define a replenishment with a classical re-orderpoint policy. The inventory profile will show the typical sawtooth shape.
The parameters MININTERVAL and MAXINTERVAL put limits on the frequency of replenishments. The inventory profile will have "teeth" of variable size but with a controlled interval.
The parameters SIZE_MINIMUM, SIZE_MAXIMUM and SIZE_MULTIPLE put limits on the size of the replenishments. The inventory profile will have "teeth" of controlled size but with variable intervals.
Playing with these parameters allows flexible and smart procurement policies to be modelled.
Note that frePPLe doesn't include any logic to set these parameters in an optimal way. The parameters are to be generated externally and frePPLe only executes based on the parameter settings.
At a later stage a module to compute these parameters could be added.
The PRODUCING field is unused for this buffer type.
Propagation through a bill of material will be stopped at a procurement buffer.
Field | Type | Description |
leadtime | duration |
Time taken between placing the purchase order with the supplier and the delivery of the material. |
fence | duration |
Time window (from the current date of the plan) during which procurement orders are expected to be released. |
mininventory | Positive double |
Inventory level triggering a new replenishment. |
maxinventory | Positive double |
Inventory level to which we try to replenish. |
mininterval | duration |
Minimum time between replenishments. |
maxinterval | duration |
Maximum time between replenishments. |
size_minimum | Positive double |
Minimum quantity for a replenishment. |
size_maximum | Positive double |
Maximum quantity for a replenishment. |
size_multiple | Positive double |
All replenishments are rounded up to a multiple of this value. |
buffer_infinite
An infinite buffer has an infinite supply of the material is available.
The PRODUCING field is unused for this buffer type.
Propagation through a bill of material will be stopped at an infinite buffer.
Example XML structures
- Adding or changing a buffer
<plan> <buffers> <buffer name="item a @ location b"> <item name="item a" /> <location name="location b" /> <onhand>10</onhand> </buffer> </buffers> </plan>
- Update the current inventory information of an existing buffer
<plan> <buffers> <buffer name="item a @ location b" onhand="100" action="C" /> </buffers> </plan>
- Deleting a buffer
<plan> <buffers> <buffer name="item a @ location b" action="R"/> </buffers> </plan>
Example Python code
- Adding or changing a buffer
it = frepple.item(name="item a") loc = frepple.location(name="location b") buf = frepple.buffer(name="item a @ location b", onhand=10, item=it, location=loc)
- Update the current inventory information of an existing buffer
buf = frepple.buffer(name="item a @ location b", onhand=10, action="C")
- Deleting a buffer
buf = frepple.buffer(name="item a @ location b", action="R")
- Iterate over buffers, flows and flowplans
for b in frepple.buffers(): print "Buffer:", b.name, b.description, b.category for l in b.flows: print " Flow:", l.operation.name, l.quantity, l.effective_start, l.effective_end for l in b.flowplans: print " Flowplan:", l.operationplan.operation.name, l.quantity, l.date