动态规划之投资策略规划

你所掌握的算法知识帮助你从Acme计算机公司获得了一份令人兴奋的工作,签约奖金1万美元。你决定利用这笔钱进行投资,目标是10年后获得最大回报。你决定请Amalgamated投资公司管理你的投资,该公司的投资回报规则如下。该公司提供n种不同的投资,从1~n编号。在第j年年底,比你会得到drij美元。回报率是有保证的,即未来10年每种投资的回报率均已知。你每年只能做出一次投资决定。在每年年底,你既可以将钱继续投入到上一年选择的投资种类中,也可以转移到其他投资中(转移到已有的投资种类,或者新的投资种类)。如果跨年时你不做投资转移,需要支付f1美元的费用,否则,需要支付f2美元的费用,其中f2>f1。

a。如上所述,本问题允许你每年将钱投入到多种投资中。证明:存在最优投资策略,每年都将所有钱投入到单一投资中(脊柱最优投资策略只需最大化10年的回报,无需关心任何其他目标,如最小化风险)。

b.证明:规划最优投资策略问题具有最优子结构性质。

c.设计最优投资策略规划算法,分析算法时间复杂度。

d. 假定Amalgamated投资公司在上述规则上又加入了新的限制条款,在任何时刻你都不能在任何单一投资种类中投入15000美元以上。证明:最大化10年回报问题不再具有最优子结构性质。

分析与解答:正如a题所言,如果每年都将所有钱投入到单一投资中,存在最优投资策略。一共n年m种投资,每年都有m种方式选择,持续n年,那么一共有m^n种可能的选择方式,但是这指数种选择方式中存在很多重叠子结构,实际上除去重叠的,只有n*m2种子结构。该问题在第j年寻找获得收益最大时所选择的位置将会产生新的子问题,要想求第j年最佳选择,那么需要求第j-1年最佳选择,根据第j-1年最优解来求第j年最优解。假定已经知道第j-1年之前的最佳选择方式,第j-1年每种投资都已经得到最大收益,那么我们只需在第j-1年的这m种投资中结合第j年的每种投资方式选择一种获利最大的方式。假定有比第j年每种投资获利更大的获利方式,那么把此方式“剪贴”上去,从而得到一个第j年获利更大方式.,那么与最初的第j年最优解矛盾。假定共n年m种投资,那么运行时间是O(n*m*m).

代码如下:(本代码只考虑不加限定额度的单一投资,每年都将所有钱投到一种投资上,因为这样投资存在最优子结构)

#include <iostream>
#include <iomanip>
#include <time.h>
using namespace std;
#define n 10
#define m 8
void best_investment(double **r)
{
	double v[n+1][m+1];//二维数组v[i][k]表示到了第i年购买第k种投资
	double f1=0.01,f2=0.04;
	int i,j;
	for (i=1;i<=m;i++)
	{
		v[1][i]=r[i][1]+1.0;//第1年为初始状态,最大值就是本年每种投资的值
	}
	for ( j=2;j<=n;j++)
	{
		for (int k=1;k<=m;k++)//k种投资
		{
			v[j][k]=-0x7fffffff;//第j年第k种投资
			for (int i=1;i<=m;i++)//以第j-1年中的n种投资为依据找到适合第j年第k种投资的最大值
			{//当选择第j-1年第i种投资时,它乘以第j年第k种投资所获得的值与当前v[j][k]比较。
				if ((v[j-1][i]-(i==k?f1:f2))*(1.0+r[k][j])>v[j][k])
				{//r[k][j]=第j年第k种投资
					v[j][k]=(v[j-1][i]-(i==k?f1:f2))*(1.0+r[k][j]);
				}
			}
		}
	}
	cout<<"第i年购买第j种投资的前i年的投资总和为:"<<endl;
	for (i=1;i<=n;i++)
	{
		for (j=1;j<=m;j++)
		{
			cout<<setprecision(5)<<showpoint<<v[i][j]<<"\t";
		}
		cout<<endl;
	}
	cout<<"10年后最大投资额为:";
		double T=-0x7fffffff;
		int t=0;
		for (j=1;j<=m;j++)
		{
			if (v[n][j]>T)
			{
				T=v[n][j];
			}
		}
		cout<<T<<endl;
}
void main()
{
   srand( (unsigned)time( NULL ) );
   double **r;
   int i,j;
   r=new double*[m+1];
   for (i=0;i<=m;i++)
   {
	   r[i]=new double[n+1];
   }
   cout<<"第j年第i种投资回报率如下:"<<endl;
   for (i=1;i<=m;i++)
   {
	   for (j=1;j<=n;j++)
	   {
          r[i][j]=(((rand()%1000+1)/1000.0+1)-1)/10.0;
		  cout<<setprecision(3)<<r[i][j]<<"\t";
	   }
	   cout<<endl;
   }
   cout<<endl;
   best_investment(r);
}

总结:由这个程序得到的结果是:不能简单的选择每年回报率最大的投资,由于可能进行投资转移,所以有可能回报率低一点的投资获得最大投资。由d问结果可以看出,给单一投资加了限定额度,就必须进行多种投资,这样最优子结构就不存在了。具体为什么还有待研究。

动态规划之投资策略规划,布布扣,bubuko.com

时间: 2024-08-27 14:29:47

动态规划之投资策略规划的相关文章

算法导论第十五章动态规划

概述: 1.动态规划是通过组合子问题的解而解决原问题的. 2.动态规划适用于子问题不是独立的情况,也就是各子问题的包含公共的子子问题. 3.动态规划对每个子问题只求解一次,将其结果保存在一张表中. 4.动态规划的设计步骤:a.描述最优解的结构b.递归定义最优解的值c.按自底向上的方式计算最优觖的值d.由计算出的结构构造一个最优解 15.1钢条切割 钢条切割问题:给定定长的钢条和价格表,求切割方案,使得收益最大.如果n英寸的钢条的价格足够大,则不需要切割. 代码如下: //朴素递归求解钢条切割收益

算法之道:形而之上谓之道

1966年3月的一天,美国加州大学洛杉矶分校的Andrew J. Viterbi教授在给研究生讲解缠绕编码的时序译码算法SDCD.但不管他如何讲解,学生就是听不明白.思来想去,Viterbi觉得学生不能理解的原因是该算法的证明过于复杂.于是他开始考虑如何简化这个证明.在经历了持久的烦躁和困惑后,他灵感顿现:需要简化的不是算法的证明,而是算法本身.于是Viterbi对SDCD算法进行了少许修改,提出了基于Trellis的概率译码算法.这个算法就是后来著名的CDMA技术的基石.Viterbi也因此而

O2O已死?不!美团点评们迎来新风口

当年的千团大战,巅峰时期曾涌入了5000多家团购网站,刘旷本人也参与了此次团购大战.而就在当时很多人都唱衰团购的时候,美团和大众点评却最终脱颖而出,市值一路飙升,人人网旗下的糯米网因为卖给了百度,也得以在市场上占得了一席之地. 2015年的上半年,O2O全面爆发,资本市场一片火爆,所有人都盲目风:2015年的下半年,无数O2O创业公司倒闭,于是资本市场和创业者们都开始唱衰O2O.实际上,O2O淘汰的都是那些实力较弱的公司,只不过因为参与者过多.涉及行业较广,于是很多人误认为O2O创业根本就不会成

最优化发展概况

最优化的概念最早可追溯到变分法和Euler及Lagrange的工作. 20世纪40年代的线性规划的发展拓宽了这个领域,并激发了持续60多年的现代最优化理论和方法的研究. 按照数学观点, 最优化有时又称数据规划,其中规划的英文词汇是"programming".非常有趣的是这个词汇在20世纪40年代突然发生奇遇, 首先被研究优化的数学家看中, 用来表述各种优化问题,比较确切的中文翻译是"规划".与之相关的词组有线性规划,非线性规划,动态规划,组合规划等. 接着它又被计算

PDA手持终端让生鲜供应链更透明

随着新零售与社区团购模式的发展,生鲜消费在前端出现了许多新探索--生鲜电商,成为2018年以来的又一巨大风口.截止至2018年,中国生鲜电商行业市场规模达到1950亿元,同比增长了40%,2019年此规模更预计会达到2670亿元左右,同比增长37%左右.(数据来源:前瞻产业研究院<中国生鲜电商行业解决方案与投资策略规划报告>)作为新零售中当之无愧的潜力股,生鲜电商市场每年保持50%以上的增长率,在市场迅猛发展的情况下,美菜网凭借10.5亿美元融资成为2018年生鲜行业获得较大融资的平台,市场估

商学院

前 言 中南大学以“建设特色鲜明的世界一流大学”为办学目标,主动对接国家重大发展战略需求,为行业和地方社会经济发展服务,坚持将“质量提升”作为构建一流本科教育的核心任务.为进一步深化本科教育教学改革,完善本科人才培养体系,全面提升人才培养质量,学校从2014年3月开始,启动2016版本科人才培养方案的修订工作,同时组织了各教学单位对其开设课程的教学大纲进行修订.教学大纲是实施专业培养方案,实现高校培养目标及要求的教学指导文件,是组织教学过程.进行教学质量评估和实施教学管理的主要依据.制订与本科教

算法整理之动态规划

我现在介绍的这个版本,是从算法爱好者中看到的一个别人的漫画版本.题目:有一座高度是10级台阶的楼梯,从下往上走,每跨一步只能向上1级或者2级台阶.要求用程序来求出一共有多少种走法.比如,每次走1级台阶,一共走10步,这是其中一种走法.我们可以简写成 1,1,1,1,1,1,1,1,1,1.再比如,每次走2级台阶,一共走5步,这是另一种走法.我们可以简写成 2,2,2,2,2. 分析:这种问题是典型的使用动态规划解决的问题,在使用动态规划的方法之前,能想到的方法可能就是使用排列组合,这是一个非常复

算法(四)--------动态规划问题

动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若?个?问题.但是经分解得到的?问题往往不是互相独?的 动态规划策略通常?于求解最优化问题.– 在这类问题中,可能会有许多可?解.每?个解都对应于?个值,我们希望找到具有最优值的那个解,即最优解.– 动态 • 在?定条件下,当前阶段的状态和下?阶段的状态之间的转移.– 规划 • 建?状态转移?程(或称各阶段间的递推关系式),将各个阶段的状态以表格式?法存储. • 表格式?法:??个表来记录所有已解决的?问题的解 过程: • 阶段 stag

无关算法的动态规划

动态规划是一类算法,Leetcode上有39题挂上了DP的标签,还有很多也可以用DP求解:博客园有很多对动态规划的讲解,譬如五大常用算法之二:动态规划算法.不敢再写这个算法,随便写写我的2015总结. 研究生二年级,工科,做的多是数据链路层的处理,主要是信道纠错编码.刚刚连续看了两个退学的帖子,没有经历过也不好评价,但是大学四年真的能学到很多,一个词就是——心性. 这一年,我的研究生涯多是围绕项目展开的:研究生做项目,不同的人会有不同的体会吧.至于我,纠错编码这个东西,基本上所有通信系统都有涉及