算法设计与分析:第四章 4.4资源分配问题

/*
资源分配问题:
是考虑如何把有限的资源分配给
若干个工程问题。假设资源总数为 r,工程个数为
n,给每个工程投入的资源不同,所得的利润也不
同,要求把总数为 r 的资源分配给n个工程,以获
得最大利润的分配方案。

决策过程:
把资源r划分为m个相同的部分,每份资源为r/m,m为整数。假定利润函数为
Gi(x)=把x份资源分配给第i个工程得到的利润
G(m) = i从1到n 累加求和Gi(xi)
i从1到n 累加求和xi = m
牛逼:问题转化为把m份资源分配给n个工程,使得G(m)最大的问题
m份资源
首先,把各个工程按顺序编号,按下述方法进行划分:
第一阶段:分别把x=0,1,...,m份资源给第1份个工程,确定在第一个工程在各种不同份额的资源下,
能够得到最大的利润
第二阶段:分别把x=0,1,...,m份资源分配给第1,2个工程,确定第1个工程在各种不同份额的
资源分配下,这两个工程能够得到的最大利润和第二个工程的最优分配份额。
在第n个阶段,分别把x=0,1,2,...,m份资源分配给所有n个工程,确定能够得到的最大利润,
以及在此利润下,第n个工程的最优分配份额。

考虑到把m份资源全部投入给所有n个工程一定能够得到最大利润,因此必须在各个阶段中,
对不同的分配份额计算,得到最大利润,然后取其中的最大者,作为每个阶段能够取得的
的最大利润。再取每个阶段的最大利润中的最大者,以及在该最大利润下的分配方案,
即为整个资源分配的最优决策

思想:
前缀法

1设fi(x)表示把x份资源分配给前i个工程时,所得到的最大利润,
di(x)表示使得fi(x)最大时,分配给第i个工程的资源份额。
在第一阶段,只把x份资源分配给第一个工程,有:
{f1(x) = G1(x)
{d1(x) = x        0<=x<=m
第二阶段,只把x份资源分配给第一、第二两个工程,有:
{f2(x)=max{G2(z) + f1(x-z)}
{d2(x) = 使得f2(x)最大的z    ,0<=x<=m,0<=z<=x

非常重要
第i个阶段,把x份资源分配给前i个工程,有:
Gi(x)=把x分资源分配给第i工程的利润
{fi(x)=max{Gi(z) + fi-1(x-z)}
{di(x) = 使得fi(x)最大的z,0<=x<=m,0<=z<=x

令第i阶段最大利润为gi,则:本质上是遍历各种解决方案
gi = max{fi(1),...,fi(m)}
设qi是使得gi最大时,分配给前面i个工程的资源份额,则:
qi = 使得fi(x)最大
  • 8
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值