frePPLev2.0
open source Production PLanning
  • Home
  • Documentation
    • Getting started
    • Modeling guide
    • User guide
    • Installation guide
    • Developer guide
    • FAQ
  • C++ API

Buffer solver

Standard buffer

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. This replenishment 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 do the following

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
    • 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
      • Extension modules
        • Forecast module
        • REST web service module
        • Linear programming solver module
        • OpenERP connector module
    • User guide
      • Main features
      • Supported browsers
      • Getting around
        • Logging in
        • Logging out
        • Changing password
        • Navigation
          • Menu bar
          • Jump search
          • Context menus
          • Browser bookmarks
        • Filtering data
        • Sorting data
        • Selecting time buckets
        • Exporting data
        • Importing data
        • User preferences
        • User permissions and roles
      • Screens
        • Data input
        • Supply Path / Where Used
        • Comments
        • History – Audit trail
        • Plan analysis
          • 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
        • Execute
      • Batch commands
        • manage.py (manage.exe on Windows)
        • frepple (frepple.exe on Windows)
        • freppleservice.exe (Windows only)
    • Installation guide
      • Windows installer
      • Compiling on Windows
      • Linux binary packages
      • Compiling on Linux
      • Compiling on debian-based linux
      • Compiling on Red Hat based Linux
      • Compiling from the subversion source code repository
      • Running the VMWare virtual machine
      • Other platforms
      • Configuring the user interface
      • Configuring multiple models in the user interface
      • Configuring as a Python extension module
    • FAQ
    • Developer guide
      • Code structure
      • Class diagram
      • Solver
        • Solver features
        • Planning algorithm
          • Top level loop
          • Demand solver
          • Buffer solver
          • Flow solver
          • Load solver
          • Operation solver
          • Resource solver
        • Cluster and level algorithm
      • Extension modules
      • Version control
      • Style guide
      • Portability
      • Security
      • Internationalization
      • Translating the user interface
      • Adding or customizing a report
      • 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
    • License
      • GNU Affero General Public License
      • GNU Free Documentation License
    • Third party add-ons
  • Copyright © 2010-2013 frePPLe bvba