数学建模教程四、动态规划——生产计划问题
(2014-03-09 00:04:50)
标签:
动态规划生产计划r语言it |
分类: 数学建模 |
动态规划(dynamic
programming)是运筹学的一个分支,是求解决策过程(decision process)最优化的数学方法。
下面是几个著名的动态规划问题以及它们的R语言求解过程。
- 案例二、生产规划问题
工厂生产某种产品,每单位(千件)的成本为
1(千元),每次开工的固定成本为 3 (千元),工厂每季度的最大生产能力为
6(千件)。经调查,市场对该产品的需求量第一、二、三、四季度分别为
2,3,2,4(千件)。如果工厂在第一、二季度将全年的需求都生产出来,自然可以降低成本(少付固定成本费),但是对于第三、四季度才能上市的产品需付存储费,每季每千件的存储费为
0.5(千元)。还规定年初和年末这种产品均无库存。试制定一个生产计划,即安排每个季度的产量,使一年的总费用(生产成本和存储费)最少。
这一类生产计划问题(Production planning
problem),阶段按计划时间自然划分,状态定义为每阶段开始时的储存量x(k),决策为每个阶段的产量u(k),记每个阶段的需求量(已知量)为d(k),则状态转移方程为:
x(k+1)=x(k) +
u(k) − d(k) x(k)≥0, k=1,2,...,n
设每阶段开工的固定成本费为a,生产单位数量产品的成本费为b,每阶段单位数量产品的储存费为c,阶段指标为阶段的生产成本和储存费之和,即
v(x(k), u(k))
= cx(k) + (a + bu(k))
if
u(k)>0
v(x(k), u(k))
= cx(k) + 0
if u(k)=0
最优值函数f(x(k))为从第k段的状态x(k)出发到过程终结的最小费用,满足 :
f(x(k))=min(v(x(k), u(k)) + f(x(k+1)))
以上分析过程R语言的实现代码:
#每阶段单位数量产品的储存费为c
C = 0.5;
#每阶段开工的固定成本费为a
A = 3;
#生产单位数量产品的成本费为b
B = 1;
#市场对该产品的需求量数组
ds <- c(2, 3, 2, 4);
#市场对该产品的需求量函数
d <- function(k) {
};
#生产目标,所有初始化为NA,在每次遍历的时候,需要更新这个值!!!
us <- rep(NA,
times=length(ds));
u <- function(k) {
}
#每阶段开始时的储存量x(k)
x <- function(k) {
}
#阶段的生产成本和储存费之和
vs <- c();
v <- function(k) {
}
f <- function(k) {
}
uss <-
expand.grid(s1=c(0:sum(ds)), s2=c(0:sum(ds)), s3=c(0:sum(ds)),
s4=c(0:sum(ds)));
uss <-
data.matrix(uss[which(rowSums(uss)==sum(ds)),]);
#i<- 2
#uss[which(rowSums(matrix(uss[,1:i],
ncol=i))>=sum(ds[1:i])),];
for(i in 1:length(ds)) {
}
rs = c();
for(i in 1:nrow(uss)) {
}
min(rs)
uss[which(rs==min(rs)),]
计算结果:
> min(rs)
[1] 20.5
> uss[which(rs==min(rs)),]
870 5
0 6 0
6920 7
0 0 4