投资问题-算法分析与实践作业7

1.问题

设 m 元钱,n 项投资,函数 表示将 x 元投入第 i 项项目所产生的效益,i=1,2,…,n.
问:如何分配这 m 元钱,使得投资的总效益最高?

2.解析

组合优化问题:
假设分配给第 i 个项目的钱数是 xi ,问题描述为:

目标函数:max{f1 (x1 ) f2 (x2 ) … fn (xn)}
约束条件:x1+x2+…+xn = m, xi∈N

实例:

递推公式:
设Fk(x)表示x万元投给前K个项目的最大效益,k=1,2,……,m

递推方程: Fk(x) = max{f k(xk )+Fk-1 (x -xk )}, k =1,2,3,…,n
边界条件: F1(x) = f1(x), Fk(0) = 0, k = 1, 2, …,n

说明:第K步,前后共分配X万元
 分配给第K个项目为xk;
 x-xk万元, 分配给前K-1个项目。

优化原则: 一个最优决策序列的任何子序列本身一定是相对于子序列初始和结束 状态的最优决策序列。
已知:这个序列 L1 是最优决策序列
那么:这个序列 任何子序列 本身一定是相对于子序列的 初始 和 结束 状态的最优决策序列。

3. 设计

伪代码

xi(x) = k: 新加第 i 项时,总共分配 x 元时,第 i 项分配了 k 元(xk)
建立小f表(已知的),建立x表,建立大F表;
递推方程: Fk(x) = max{f k(xk )+Fk-1 (x -xk )}, k =1,2,3,...,n


For  k =1,2,3,...,n		// 第 k 个项目
For 𝑥 = 1,2,3,...,𝑚	 // k 个项目共分配 x 万元
For  xk = 0,1,2,3,...,x		 // 第 k 个项目分配 xk

实例:
小f的情况是:
例如:f1(1) = 是分配给第一个项目1万元 获得多少收益看上图

  1. F1(x),k=1,只有一个项目
    x=1: F1(1) = f1(1) = 11 xi(x) = x, x = 1, 2, 3, 4, 5
    x=2: F1(2) = f1(2) = 12
    x=3: F1(3) = f1(3) = 13
    x=4: F1(4) = f1(4) = 14
    x=5: F1(5) = f1(5) = 15

  2. F2(x),k=2,有两个项目
     x=1,总共分配 1 万元
    x=1, xk=0: f 2(0)+F1 (1) // 第二个项目投0万元时 + 剩下的钱投一个项目的最大收益(1万元分配给一个项目的最大收益)
    x=1, xk=1: f 2(1)+F1 (0)
    F2(1) = max{f2(0)+ F1 (1),f2(1) +F1(0)}= max{0+11,0+ 0} = 11
    x 2(1) = 0 // 两个项目分配1万元时,利益最优的情况下,投资第二个项目的钱为0;

     x=2,总共分配 2 万元
    x=2, xk=0: f 2(0)+F1 (1) //
    x=2, xk=1: f 2(1)+F1 (0)
    x=2, xk=2: f2(2) +F1(0)
    F2(2) = max{f2(0)+ F1 (2),f2(1) +F1(1),f2(2)+}= max{0 11,0+ 0} = 11
    x 2(2) = 0
    。。。。。。。
    把每个X=*的值的情况写出来。

实验截图:
在这里插入图片描述

4. 分析

在这里插入图片描述

5. 源代码地址

https://github.com/Lin02993/Algorithm-Analysis-and-Practice-on-the-job

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值