存储系统模拟—R实现
存储系统
存储问题是人们最熟悉又最需要研究的问题之一。例如企业储存的原材料、在制品等,存储太少,不足以满足生产的需要,将使生产过程中断; 存储太多,超过了生产的需要,将造成资金及资源的积压浪费。商店储存商品,存储太少,造成商品脱销,将影响销售利润和竞争能力; 存储太多,将影响资金周转并带来积压商品的有形或无形损失。
一、存储系统概述
存储是协调供需关系的常用手段。存储由于需求(输出)而减少,通过补充(输入)而增加。存储论研究的基本问题是对于特定的需求类型,以怎样的方式进行补货,才能最好地实现存储管理的目标。根据需求和补充中是否包含随机性因素,在储系统分为确定型和随机型两种。
存储论研究的基本问题是,对于特定的需求类型,讨论用怎样的方式进行物质的供应、商品的订货或者产品的生产,以求最好地实现存储的经济管理目标。具体地说,存储论是研究如何根据生产或者销售活动的实际存贮问题建立起数学模型,然后通过费用分析求出产品、商品的最佳供应量(量)和供应周期(期)这些数量指标。不论哪种存储系统,一般都可用下图的模式来表示。

存储系统可以用“供-存-销”三个字来描述,即一个存储系统,通过订货以及进货后的存储与销售来满足顾客的需求。存贮论所要解决的问题有两个:(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语言自述
		(注明:以下文章均在Linux操作系统下执行) 一.R语言简介 R语言是用于统计分析,图形表示和报告的编程语言和软件环境.R语言由Ross Ihaka和Robert Gentleman在新西兰奥克兰大 ... 
- R语言手册
		在R的官方教程里是这么给R下注解的:一个数据分析和图形显示的程序设计环境(A system for data analysis and visualization which is built bas ... 
- 如何创建R包并将其发布在 CRAN / GitHub 上--转载
		转载--https://www.analyticsvidhya.com/blog/2017/03/create-packages-r-cran-github/ 什么是 R 包?我开始创建 R 包的原因 ... 
- 关于在C++中调用R函数以及RCpp使用
		最近因为项目要用到,所以在想办法把R语言用到C++中. 网上查了看到有一个Rcpp的工具.所以在这里总结一下. 现在能想到的几种在C++中调用R语言的方法如下: 1. 使用Rcpp R高级编程技巧及R ... 
- ABAP术语-R/3 Repository Information System
		R/3 Repository Information System 原文:http://www.cnblogs.com/qiangsheng/archive/2008/03/11/1100076.ht ... 
- Filecoin:一种去中心化的存储网络(一)
		开始初步了解学习Filecoin,如下是看白皮书的内容整理. 参考: 白皮书中文版 http://chainx.org/paper/index/index/id/13.html 白皮书英文版 http ... 
- 【转载】 C++中回车换行(\n\r)和换行(\r)的区别
		原文:http://blog.csdn.net/xiaofei2010/article/details/8458605 windows下的点一下回车,效果是:回车换行,就是\r\n unix系统下的回 ... 
- R语言学习 - 热图绘制heatmap
		生成测试数据 绘图首先需要数据.通过生成一堆的向量,转换为矩阵,得到想要的数据. data <- c(1:6, 6:1, 6:1, 1:6, (6:1)/10, (1:6)/10, (1:6)/ ... 
- R语言构建蛋白质网络并实现GN算法
		目录 R语言构建蛋白质网络并实现GN算法 1.蛋白质网络的构建 2.生物网络的模块发现方法 3.模块发现方法实现和图形展示 4.附录:igraph中常用函数 参考链接 R语言构建蛋白质网络并实现GN算 ... 
- R语言简单介绍
		R语言 概述 R语言是用于统计分析,图形表示和报告的编程语言和软件环境. R语言由Ross Ihaka和Robert Gentleman在新西兰奥克兰大学创建,目前由R语言开发核心团队开发. R语言的 ... 
随机推荐
- Django框架搭建web项目(一)
			建议查看官方文档:https://docs.djangoproject.com/zh-hans/4.0/intro/tutorial01/ 1.本地安装python环境(略) 2.本地安装Django ... 
- AntD为Form的List设置默认值 (antd form.list 设置默认值 )
			import React from "react"; function demo() { const FormConfig = { labelCol: { span: 8 }, w ... 
- pytorch卷积模块
			nn.Conv2d() 常用的参数有in_channels,out_channels,kernel_size,stride,padding; 除此之外还有参数dilation,groups,bias ... 
- Audition导入视频文件出现错误
			错误: We were unable to open this file using any of the currently available importers. If you would li ... 
- Scala操作Kakfa API
			如需大数据开发整套视频(hadoop\hive\hbase\flume\sqoop\kafka\zookeeper\presto\spark):请联系QQ:1974983704 由于我使用的是kafk ... 
- Pytorch 感知机
			单层感知机 \[\begin{aligned} & y = XW + b \\ & y = \sum x_i*w_i+b\\ \end{aligned} \] Derivative \ ... 
- java.Text.ParseException:Unparseable date:"undefined 00:00:00"
			request.getParameter() 获取的日期要toString一下再parse,否则就会报这个异常 
- python,数据类型和变量,数据类型和变量,集合,字符串拼接
			可不可变: 可变:列表,字典 不可变:字符串,数字,元祖 访问顺序: 直接访问:数字 顺序访问:字符串,列表,元祖 映射:字典 存放元素个数 容器类型:列表,元祖,字典 原子:数字,字符串 集合 1. ... 
- 关于Maven的使用
			Maven基础入门 一.maven是什么 Apache Maven,是一个项目管理及自动构建的工具,有Apache软件基金会所提供. Maven是用Java语言编写的,是一款可以跨平台的软件. Mav ... 
- java 1.8 API帮助文档
			链接:https://pan.baidu.com/s/1MNZqIokMDWNZF-nXnoHzxA 提取码:zw13 
