Skip to main content

A Python package for inventory optimization

Project description

Stockpyl

PyPI Documentation Status GitHub GitHub issues Twitter Follow

Stockpyl is a Python package for inventory optimization. It implements classical single-node inventory models like the economic order quantity (EOQ), newsvendor, and Wagner-Whitin problems. It also contains algorithms for multi-echelon inventory optimization (MEIO) under both stochastic-service model (SSM) and guaranteed-service model (GSM) assumptions.

Most of the models and algorithms implemented in Stockpyl are discussed in the textbook Fundamentals of Supply Chain Theory (FoSCT) by Snyder and Shen, Wiley, 2019, 2nd ed. Most of them are much older; see FoSCT for references to original sources.

For lots of details, read the docs.

Some Examples

Solve the newsvendor problem with a holding (overage) cost of 2, a stockout (underage) cost of 18, and demands that are normally distributed with a mean of 120 and a standard deviation of 10:

>>> from stockpyl.newsvendor import newsvendor_normal
>>> S, cost = newsvendor_normal(holding_cost=2, stockout_cost=18, demand_mean=120, demand_sd=10)
>>> S
132.815515655446
>>> cost
35.09966638649737

Use Chen and Zheng's (1994) algorithm (based on Clark and Scarf (1960)) to optimize a 3-node serial system under the stochastic-service model (SSM):

>>> from stockpyl.ssm_serial import optimize_base_stock_levels
>>> S_star, C_star = optimize_base_stock_levels(
...     num_nodes=3,
...     echelon_holding_cost=[4, 3, 1],
...     lead_time=[1, 1, 2],
...     stockout_cost=40,
...     demand_mean=10,
...     demand_standard_deviation=2
... )
>>> S_star
{1: 12.764978727246302, 2: 23.49686681508743, 3: 46.28013742779933}
>>> C_star
86.02533221942987

Optimize committed service times (CSTs) for a tree network under the guaranteed-service model (GSM) using Graves and Willems' (2000) dynamic programming algorithm:

>>> from stockpyl.gsm_tree import optimize_committed_service_times
>>> from stockpyl.instances import load_instance
>>> # Load a named instance, Example 6.5 from FoSCT.
>>> tree = load_instance("example_6_5")
>>> opt_cst, opt_cost = optimize_committed_service_times(tree)
>>> opt_cst
{1: 0, 3: 0, 2: 0, 4: 1}
>>> opt_cost
8.277916867529369

Resources

Feedback

If you have feedback or encounter problems, please report them on the Stockpyl GitHub Issues Page. (If you are not comfortable using GitHub for this purpose, feel free to e-mail me. My contact info is on my webpage.)

License

Stockpyl is open-source and released under the GPLv3 License.

Citation

If you'd like to cite the Stockpyl package, you can use the following BibTeX entry:

@misc{stockpyl,
    title={Stockpyl},
    author={Snyder, Lawrence V.},
    year={2022},
    url={https://github.com/LarrySnyder/stockpyl}
}

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

stockpyl-0.0.2.tar.gz (126.5 kB view details)

Uploaded Source

Built Distribution

stockpyl-0.0.2-py3-none-any.whl (131.5 kB view details)

Uploaded Python 3

File details

Details for the file stockpyl-0.0.2.tar.gz.

File metadata

  • Download URL: stockpyl-0.0.2.tar.gz
  • Upload date:
  • Size: 126.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.8.13

File hashes

Hashes for stockpyl-0.0.2.tar.gz
Algorithm Hash digest
SHA256 5f8cff3f5adc4a89c919fc778483ad6ca8fd872049344ad033f48bcbe32cf5b6
MD5 8755fa2369bb57c9c546b44dac9fa92a
BLAKE2b-256 f5a6397f54c1a0c2aff519198ccfd83573d4560b823f4a08b61cb1a6885ebffc

See more details on using hashes here.

File details

Details for the file stockpyl-0.0.2-py3-none-any.whl.

File metadata

  • Download URL: stockpyl-0.0.2-py3-none-any.whl
  • Upload date:
  • Size: 131.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.8.13

File hashes

Hashes for stockpyl-0.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 9b3d15b95b65bb655cd6d1b06140cbfa2b305735f71f2152bd643315256913ac
MD5 219c6d8d7036015669914569c52c7bc2
BLAKE2b-256 298ec0070054e0ea0fbe917524ca5c5d9f2afb32a20113cd059c5a23db7bebee

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page