存储系统

存储问题是人们最熟悉又最需要研究的问题之一。例如企业储存的原材料、在制品等,存储太少,不足以满足生产的需要,将使生产过程中断; 存储太多,超过了生产的需要,将造成资金及资源的积压浪费。商店储存商品,存储太少,造成商品脱销,将影响销售利润和竞争能力; 存储太多,将影响资金周转并带来积压商品的有形或无形损失。

一、存储系统概述

存储是协调供需关系的常用手段。存储由于需求(输出)而减少,通过补充(输入)而增加。存储论研究的基本问题是对于特定的需求类型,以怎样的方式进行补货,才能最好地实现存储管理的目标。根据需求和补充中是否包含随机性因素,在储系统分为确定型和随机型两种。

存储论研究的基本问题是,对于特定的需求类型,讨论用怎样的方式进行物质的供应、商品的订货或者产品的生产,以求最好地实现存储的经济管理目标。具体地说,存储论是研究如何根据生产或者销售活动的实际存贮问题建立起数学模型,然后通过费用分析求出产品、商品的最佳供应量(量)和供应周期(期)这些数量指标。不论哪种存储系统,一般都可用下图的模式来表示。

存储系统可以用“供-存-销”三个字来描述,即一个存储系统,通过订货以及进货后的存储与销售来满足顾客的需求。存贮论所要解决的问题有两个:(1)存贮多少数量最为经济(2)间隔多长时间需要补充一次,以及补充多少?寻求合理的存贮量、补充量和补充周期是存贮论研究的重要内容,由它们构成的方案叫存贮策略。

二、存储问题描述

某公司采用(s,S)订货策略,即当前库存小于s且当前无订货时,就进行采购补充库存至S。假设该公司每天都有顾客,且顾客的需求分布情况可通过统计得到,见下表所示。已知初始库存为x = 100,交货延迟时间L = 1天,存储成本为h=1元/个/天,零售价为r=30元/个,运费+成本函数为d = 10+15x,即每个产品成本为15元,每次订货运费为10元。问应取怎样的(s,S)能使T =100天内的日平均收益最高?

需求量 50 100 150 200
需求概率 0.1 0.2 0.5 0.2

三、存储系统的R模拟

通过sample(values,1,T,probs)产生一个某一天的随机需求。sample函数中的第二个参数1表示产生一个随机量,第三个参数T表示True即有放回。

library(lattice)
data1=matrix(c(50,100,150,200,0.1,0.2,0.5,0.1),nrow=4)
data1=as.data.frame(data1)
values = as.numeric(data1[,1])
probs = as.numeric(data1[,2]) inventory = function(s,S){
x=100; #初始库存
L=1; #交货延迟
h=1; #存储成本h元/个/天
r=30; #零售价r元/个
T=100; #总时长
d = function(x) {10 + 15*x} #运费 + 成本
t=1; t1=Inf; #t是当前时间,t1是下次到货时间
H=0; C=0; R=0; #H累计库存费用,C累计订货费用,R累计收入
y=0; loss=0; #y订货量,loss缺货次数 while(t <= T) {
H = H + h*x; #一天的库存费用
#若当天有货物到达
if(t1 == t){
C = C + d(y); #成本费用
x = x + y;
y = 0;
t1 = Inf;
} D = sample(values,1,T,probs); #随机产生的需求量
w = min(D,x) #实际购买量
R = R + r*w;
x = x - w;
#若需求大于库存
if(D > x){
loss = loss + 1
}
#若满足订货条件
if(x < s && y ==0){
y = S - x;
t1 = t + L;
}
t = t + 1;
}
return ((R-C-H)/T)
}

对某个特定的(s,S)组合,我们用t表示当前时间,T表示模拟的总时长,while(t<=T)中每天为循环的一次。t1表示下次到货时间,在没有订货的情况下则为无穷大(Inf)。我们只需在每一天的循环中检查当天有无到货,然后随机产生一个需求量,并通过需求量与库存的关系做相应的操作更新相应的值。循环T次以后,即可通过(营业额-成本)/时长T算出每天的平均利润。

s <- 590:600
S <- 990:1000
data <- expand.grid(s,S) #将s与S的可能值两两组合
for (i in 1:121) {
#对每种组合计算10次取均值
data$mean[i] = mean(replicate(10,inventory(data$Var1[i],data$Var2[i])))
} #查看平均收入前10名的(s,S)组合
data[order(data$mean,decreasing=T)[1:5],]
Var1 Var2 mean
70 593 996 1274.97
108 598 999 1271.01
45 590 994 1266.19
3 592 990 1265.15
86 598 997 1263.29

四、计算结果的可视化

#画二维热图
levelplot(mean ~ Var1 * Var2, data = data,xlab = "再订货点",ylab = "订货数量")

#画收入分布
first = data[order(data$mean,decreasing=T)[1:1],]
Revenue <- replicate(1000,inventory(first$Var1,first$Var2))
hist(Revenue,main="收入分布展示")

五、总结

例子中s、S各取了11个值,对每个组合运算了10次,所以inventory函数执行了111110= 1210次。随着存储问题的日趋复杂,所运用的数学方法日趋多样,不仅包含了常见的数学方法,还采用了概率统计、数值计算方法。可以预见随着企业管理实践的不断深化,存储论将得到更广泛的应用。

参考文献

R语言初探之存储模型/报童问题

存储系统模拟—R实现的更多相关文章

  1. 数据攻略●R语言自述

    (注明:以下文章均在Linux操作系统下执行) 一.R语言简介 R语言是用于统计分析,图形表示和报告的编程语言和软件环境.R语言由Ross Ihaka和Robert Gentleman在新西兰奥克兰大 ...

  2. R语言手册

    在R的官方教程里是这么给R下注解的:一个数据分析和图形显示的程序设计环境(A system for data analysis and visualization which is built bas ...

  3. 如何创建R包并将其发布在 CRAN / GitHub 上--转载

    转载--https://www.analyticsvidhya.com/blog/2017/03/create-packages-r-cran-github/ 什么是 R 包?我开始创建 R 包的原因 ...

  4. 关于在C++中调用R函数以及RCpp使用

    最近因为项目要用到,所以在想办法把R语言用到C++中. 网上查了看到有一个Rcpp的工具.所以在这里总结一下. 现在能想到的几种在C++中调用R语言的方法如下: 1. 使用Rcpp R高级编程技巧及R ...

  5. ABAP术语-R/3 Repository Information System

    R/3 Repository Information System 原文:http://www.cnblogs.com/qiangsheng/archive/2008/03/11/1100076.ht ...

  6. Filecoin:一种去中心化的存储网络(一)

    开始初步了解学习Filecoin,如下是看白皮书的内容整理. 参考: 白皮书中文版 http://chainx.org/paper/index/index/id/13.html 白皮书英文版 http ...

  7. 【转载】 C++中回车换行(\n\r)和换行(\r)的区别

    原文:http://blog.csdn.net/xiaofei2010/article/details/8458605 windows下的点一下回车,效果是:回车换行,就是\r\n unix系统下的回 ...

  8. R语言学习 - 热图绘制heatmap

    生成测试数据 绘图首先需要数据.通过生成一堆的向量,转换为矩阵,得到想要的数据. data <- c(1:6, 6:1, 6:1, 1:6, (6:1)/10, (1:6)/10, (1:6)/ ...

  9. R语言构建蛋白质网络并实现GN算法

    目录 R语言构建蛋白质网络并实现GN算法 1.蛋白质网络的构建 2.生物网络的模块发现方法 3.模块发现方法实现和图形展示 4.附录:igraph中常用函数 参考链接 R语言构建蛋白质网络并实现GN算 ...

  10. R语言简单介绍

    R语言 概述 R语言是用于统计分析,图形表示和报告的编程语言和软件环境. R语言由Ross Ihaka和Robert Gentleman在新西兰奥克兰大学创建,目前由R语言开发核心团队开发. R语言的 ...

随机推荐

  1. nuxt.js的导航守卫

    一.使用router.js 重构项目时还行使用原来的router.js也是可以的,需要下载插件惊醒配置,这时候vue-cli中怎么用,nuxt中就怎么使用导航守卫,几乎一样 二.使用nuxt.js 1 ...

  2. 视觉里程计--视觉slam7.1/相机运动估计视觉算法

    视觉里程计 本篇文章记录了少许阅读<视觉slam14讲>的阅读整理,不是特别全面,只是为了本次项目中特定任务搜查资料,时间比较紧,文章并没有全面涵盖所有知识点.日后若时间有空闲,将回来补充 ...

  3. 当前SAT主要关键技术及其相关文献2022-11-1

    摘录自: Tasniem Nasser Al-Yahya, Mohamed El Bachir Menai, Hassan Mathkour:Boosting the Performance of C ...

  4. k8s利用endpoints和service访问外部服务

    一.原理解析 在k8s集群中我们通过创建service去访问对应pod内的服务,而在创建service的时候会同时创建一个与service同名的endpoints对象,endpoints与pod实际建 ...

  5. springboot 项目启动后访问不论什么请求的是spring的注册页面Please sign in Username || springboot禁用security

    解决方法: 1.在启动类上添加注解@EnableAutoConfiguration(exclude = {SecurityAutoConfiguration.class}) 2.或者:@SpringB ...

  6. Dubbo调用 Mybatis 实体类一对多时,报错

    添加fetchType="eager"属性 ,急加载 作为笔记,供个人参考

  7. Glinux 1395 build ENV setup

    1.安装ubuntu 14.04.05 LTS 64bit 2.初始化root 密码 sudo passwd  Password: <--- 输入安装时那个用户的密码  Enter new UN ...

  8. COM调用 – VB、PB

    本文使用Delphi和C++创建CRC32的COM文件(Dll). VB: V9.0 PB: V8.0 Delphi创建的文件,提供给VB9调用:C++创建的文件,提供给PB8调用. 一.VB部分 C ...

  9. 入门级java开发环境的配置安装

    为了能够在计算机上开发Java程序和运行Java程序,就需要在Windows操作系统上配置Java开发环境. 首先,安装JDK: 1.在Oracle官网上下载JavaSE: 2.在Download下载 ...

  10. SpringCloud之旅

    现在大部分公司的项目架构都选择了微服务,我们公司也不例外,那么什么是微服务呢?今天就来开启SpringCloud之旅! SpringCloud是基于SpringBoot的一整套的微服务架构.他提供了微 ...