Python Pulp模型可最大程度地减少库存

问题描述

如何使用Pulp每天获取最少的订单?在PuLP建议的订单下,累计库存始终为零。

下面的代码只能在一天之内计算库存,但是当您考虑累积库存时,它将不起作用。

import pandas as pd
import numpy as np
import pulp

# stock means inventory at the beginning
# Plant stands for inventory located in
# in stands for inventory take in
# out stands for inventory consumption
data = {
    'Date': ['2020-01-01','2020-01-02','2020-01-03','2020-01-04','2020-02-01','2020-02-08','2020-02-15','2020-02-22','2020-02-29','2020-03-07','2020-03-15','2020-03-22'],'PartNumber': ['A','A','A'],'Plant': ['C','C','C'],'stock': [5,0],'in': [14,4,29,2,'out': [-10,-25,-8,-8],'Res': [30,30,30]
}

df1 = pd.DataFrame ( data,columns=['Date','PartNumber','Plant','stock','in','out','Res'] )
# date,PartNumber,plant are indexes
df1.set_index ( ['Date','Plant'],inplace=True )
# in plus out equals the inventory balance with the day
df1['Sum_Stock'] = df1['stock'] + df1['in'] + df1['out']
# cumulative_Stock is the inventory balance

df1['cumulative_Stock'] = df1['Sum_Stock'].cumsum ( axis=0 )
# print ( df1 )
# first step LP minimize
model = pulp.LpProblem ( "MinOrders",pulp.LpMinimize )

# second step create LpVariable
Orders = pulp.LpVariable.dicts ( 'Orders',((date,Plant) for date,Plant in df1.index),lowBound=0,cat='Integer' )

# third steps create object function for PuLP
model += pulp.lpSum (
    [Orders[date,Plant] for date,Plant in
     df1.index]
)
# print ( Orders )
# Forth step create restriction
for date,Plant in df1.index:
    min_AccumulativeStock = df1.loc[(date,Plant),'Sum_Stock']
    model += Orders[(date,Plant)] + min_AccumulativeStock >= 0
print ( model )
# fifth step solve the
model.solve ( )
# pulp.LpStatus[model.status]
# output
output = []
for date,Plant in Orders:
    var_output = {
        'date': date,'PartNumber': PartNumber,'Plant': Plant,'Orders': Orders[(date,Plant)].varValue
    }
    output.append ( var_output )
output_df = pd.DataFrame.from_records ( output ).sort_values ( ['date','Plant'] )
output_df.set_index ( ['date',inplace=True )
print ( output_df )

enter image description here

目标功能旨在最大程度地减少每天的订单。 在我的示例中,限制为:每天的累积库存量必须大于或等于零。换句话说,如果累计库存达到正数或零,我们必须停止增加订单。 RES列代表每天订单的限制。在此示例中,我们可以简单地忽略此列,因为该示例只是一个简单的测试。在示例中未使用RES列。 稍后,我将开发一个更复杂的模型来解决物流库存控制中的实际问题。例如,每天的RES(限制)订单,运输方式(请参阅货运或空运)将引发更复杂的问题。 我认为在开始时问一个太复杂的问题不是一个好习惯。 我要做的第一步就是解决这个基本问题,而不管RES(每天都有限制)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...