frePPLeOpen source Production Planning
  • Home
  • Documentation
  • C++ API

Buffer solver

Standard buffer

The buffer is asked for a quantity Q at the date D
For each flowplan on the buffer
  If the on-hand value is positive
    Set the variable ExtraInventoryDate if it is not set before. This variable stores the date when there is additional, unallocated inventory available
  Else if the on-hand value is negative
    Compute the shortage as current onhand – required minimum quantity + known shortage from previous dates
    If a producing operation exists
      Try to get extra supply for the shorted quantity.
      Any replenishments that are created will update the onhand value of the current flowplan
    If the onhand is still less than the required minimum quantity – the known shortage
        This situation happens when the producing operation can’t replenish the buffer enough, or when all supply in a buffer without producing operation has been exhausted
        Increase the variable storing the known shortage at previous dates
        Reset the ExtraInventoryDate if it was set
    If there is a shortage, a producing operation exists and the above loop didn’t already
      Try to get more supply at the requested date
      Not only can this reduce the shortage, but also important is the next-date returned by the producing operation.
      Note that if this step creates more supply to meet the demand, that supply is not positioned such that inventory is minimized. The flowplan loop does minimize the inventory by replenishing only when the inventory drops below the minimum.
The final results are now:
  Returned quantity: requested quantity – shortages
  Returned date:
    = requested date if there is no shortage
    Or = reply date of the producing operation
    Or = ExtraInventoryDate if that is less than the operation reply date
todo Not up to date with the pre-op time loop…

Procurement buffer

Find the date of the latest locked procurement plan. No additional will be created before this date
Loop through all dates
  Keep track of the total consumed and produced quantities
    Calculate the current inventory as the difference between these quantities.
    If this date is within the minimum timeframe from the previous purchasing operation.
      If the inventory goes negative and the plan is material constrained.
        Record the earliest time for an additional purchase as the next ask date.
        Move to the next date
    If the inventory is above the minimum inventory level and we have not reached the maximum interval between purchases
      Move to the next date
    If we are the earliest new purchase date where a new purchase can be created and the inventory is below the minimum inventory level
      Try to increase the quantity of the previous purchase to avoid that the inventory falls below the minimum inventory level.
      Record the next ask date if this resizing fails to bring the inventory above 0.
    Create a new purchase to bring the inventory back to the maximum inventory level.
    This is done by updating the date and the quantity of an already existing purchase or by creating a new one.
    Remember the earliest and latest date for the next purchase.
Delete eventual purchases that have become redundant.
Report the answer quantity and the next ask date.

Infinite buffer

Always reply for the full quantity.
    • Getting started
      • 1 – Introduction
      • 2 – Installation
      • 3 – Entering data
      • 4 – Modelling concepts
      • 5 – Your first model
      • 6 – Your first plan
    • Modeling guide
      • Simplified domain model
      • Detailed domain model
      • Environment variables
      • Python interpreter
      • Global parameters
      • Buffer
      • Calendar
      • Customer
      • Demand
      • Flow
      • Item
      • Load
      • Location
      • Operation
      • Suboperation
      • Operationplan
      • Problem
      • Resource
      • SetupMatrix
      • Skill
      • Resource skill
      • Solver
    • User guide
      • Supported browsers
      • Getting around
        • Logging in
        • Logging out
        • Changing password
        • Navigation
          • Menu bar
          • Jump search
          • Context menus
        • Filtering data
        • Sorting data
        • Selecting time buckets
        • Exporting data
        • Importing data
        • Customizing a screen
        • User preferences
        • User permissions and roles
        • Comments
        • History – Audit trail
      • Data maintenance screens
      • Supply Path / Where Used
      • Plan analysis screens
        • Problem report
        • Constraint report
        • Inventory report
        • Inventory detail report
        • Resource report
        • Resource Gantt report
        • Resource detail report
        • Operation report
        • Operation detail report
        • Demand report
        • Demand detail report
        • Demand Gantt report
        • Forecast report
        • Performance indicator report
      • Execution screen
      • Batch commands
        • frepplectl
        • frepple
        • freppleservice.exe (Windows only)
    • Installation guide
      • Windows installer
      • Compiling on Windows
      • Linux binary packages
      • Compiling on Linux
      • Compiling from the source code repository
      • Running the VMWare virtual machine
      • Other platforms
      • Configuring multiple models in the user interface
      • Configuring as a Python extension module
    • Extension modules
      • Forecast module
      • Order quoting module
      • REST web service module
      • OpenERP connector module
      • Linear programming solver module
    • Technical guide
      • Architecture
      • Source code repository
      • User interface
        • Creating an extension app
        • Translating the user interface
        • Adding or customizing a report
        • Style guide
      • Solver engine
        • Code structure
        • Class diagram
        • Planning algorithm
          • Top level loop
          • Demand solver
          • Buffer solver
          • Flow solver
          • Load solver
          • Operation solver
          • Resource solver
        • Cluster and level algorithm
        • Extension modules
        • Style guide
        • Portability
      • Security
      • Unit tests
        • buffer_procure_1
        • calendar
        • callback
        • cluster
        • constraints_combined_1
        • constraints_combined_2
        • constraints_leadtime_1
        • constraints_material_1
        • constraints_material_2
        • constraints_material_3
        • constraints_material_4
        • constraints_resource_1
        • constraints_resource_2
        • constraints_resource_3
        • constraints_resource_4
        • constraints_resource_5
        • datetime
        • deletion
        • demand_policy
        • flow_alternate_1
        • flow_alternate_2
        • flow_effective
        • forecast_1
        • forecast_2
        • forecast_3
        • forecast_4
        • forecast_5
        • forecast_6
        • jobshop
        • load_alternate
        • load_effective
        • lpsolver_1
        • multithreading
        • name
        • operation_alternate
        • operation_available
        • operation_effective
        • operation_pre_post
        • operation_routing
        • pegging
        • problems
        • python_1
        • python_2
        • python_3
        • safety_stock
        • sample_module
        • scalability_1
        • scalability_2
        • scalability_3
        • setup_1
        • setup_2
        • skill
        • xml
        • xml_remote
    • FAQ
    • License
      • GNU Affero General Public License
      • GNU Free Documentation License
    • Third party add-ons
  • Copyright © 2010-2013 frePPLe bvba