用于库存级模拟的Python代码

时间:2018-07-27 14:53:35

标签: datetime optimization timedelta inventory

美好的一天!

我目前正在编写一个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)

模拟之后,将进行优化,然后根据缺货,订购成本和存储成本等条件找到最大值和最小值的最佳组合。

提前感谢您的帮助!

0 个答案:

没有答案