美好的一天!
我目前正在编写一个python程序,可以模拟某种股票的库存水平。每只股票都有一定的最大和最小水平,我想尝试一系列最小和最大值,并确定最小和最大值的最佳组合,以最大程度地减少总库存水平,但同时又要防止缺货(缺货)
基本上,数据(存货)如下所示。它由库存数量和交易日期组成。初始库存设置为最大水平。现在,假设我们开始时的初始库存为400,最低为300,交货时间(LT)-从订购之日起收到库存所需的时间-3天。一旦达到最小水平,便会以等于(最大-当前水平)的大小触发定单。实际收到的库存(库存水平增加)在3天后发生。
grouped_by_sum仅包含DATE和QUANTITY列。我仅添加了“库存水平”和“订单尺寸”作为示例。
DATE QUANTITY INVENTORY LEVEL ORDER SIZE
0 01/11/2017 -10.0 390 0
1 01/18/2017 -42.0 348 0
2 01/19/2017 -12.0 336 0
3 01/24/2017 -35.0 301 0
4 01/27/2017 -33.0 268 400-268 =132
5 02/21/2017 -50.0 218 0
6 03/07/2017 -10.0 208 0
7 03/30/2017 -3.0 208-3+132=337 0
我正在尝试使用datetime / timedelta明确指定何时将订单收据反映在库存中的方法。但是,我很难解决这个问题,这可能需要更长的时间。请查看下面的代码,该代码仍处于初始阶段。该代码仅涉及最内部的循环,该循环涉及从字符串date到datetime的转换。我还没有包括另外2个for循环,它们会在一系列最大值和最小值之间运行。 有没有更有效,更优雅的方法来执行此模拟?
import collections
import datetime
from datetime import timedelta
date_pair=collections.defaultdict(list)
order_size = collections.defaultdict(list)
grouped_by_sum =grouped_by_issuances['000139'].cumsum() + 400
def AddDatePair(Key, Pair):
date_pair[Key].append(Pair)
def AddOrderPair(Key, Pair):
date_pair[Key].append(Pair)
for date in grouped_by_sum.index:
date_select = datetime.datetime.strptime(date, '%m/%d/%Y')
AddDatePair(date_select,date)
for value in date_pair.values():
if grouped_by_sum[date_pair[key]]<=250: #
order=400-grouped_by_sum[date_pair[key]]
AddOrderPair(date,order)
模拟之后,将进行优化,然后根据缺货,订购成本和存储成本等条件找到最大值和最小值的最佳组合。
提前感谢您的帮助!