模型制作介绍(精选8篇)
我们的学校,经常举行一些活动,你看,这次,老师又让我们自己做一个科学小制作,我决定去做在军事用图很广大的浅望镜。
我首先找来材料,有木料、玻璃镜片、小刀、万能胶,还有绳子。
要做浅望镜就要把木头削成像z的形状。我一点一点地削,生怕削坏了木头,又要重削。突然,手抖个不停,一不小心,小刀切到了我的手,鲜血顿时流出来了。我就像一个泄了气的皮球,把刚削到一半的木头丢到椅子上,这时,我突然看到墙上‘勤奋’二字我又来了劲,想着已往的事情,我每次做事,都是靠坚持而获得成功的。于是,我又拿起了木头,重新开始削,再把镜片用万能胶粘起来,浅望镜就做成了。
无论做什么事情都要有毅力,就能成功。
就拿上个星期天来说吧,那是除夕,早上,我在爸爸这里读书,到了中午的时候,我回到奶奶家里去,我到了奶奶家里的时候,吃完饭,我就去教堂了,回来时顺便买了一个9.8元的密码笔记本。后来,我回到家里,把笔记本的密码忘了,差一点就打不开了。晚上,我们吃了年夜饭。
春天,同学们在温柔阳光下奔跑着,周末全家出去放着五颜六色的风筝,星期一的早上,戴着红领巾,看着五星红旗在空中飘扬;夏天,我坐在树荫下喝汽水,和可爱的小狗跑来跑去,玩累了,就躺在床上咕噜咕噜大睡一觉。睡觉醒来的时后,天以经黑了一大片。谁敢说这些欢乐难道还会不是战士们用鲜血换来的;秋天到了,我坐在我家门前看着从树上飘落下来的树叶,看着一片片的树叶,像一个的个士兵投入了祖国的怀抱;冬天来了,我穿上了漂亮的新衣,收到了很多红包,这不难道不是用战士们的牺牲所换来我们今天幸福的生活……
(一) 传统利率期限结构的经典理论
所谓利率模型, 是指对债券收益率关于离债券到期时间的依赖关系的一种数学描述, 这一关系被称为利率期限结构。上世纪70 年代以前, 利率期限结构的研究主要集中在定性的研究, 核心是研究何种力量决定了期限结构的形状变化, 其中包括预期理论、流动性偏好理论和市场分割理论等。
预期理论认为, 长期债券的即期利率是短期债券的预期利率的函数, 长期利率与短期利率之间的关系取决于现期短期利率与未来预期短期利率之间的关系。流动性偏好理论认为, 远期利率应该是预期的未来利率与流动性风险补偿的累加。市场分割理论认为, 由于市场是分割开来的, 是低效率的, 所以投资者的证券买卖的行为不能有效进行, 所以机构的借贷活动或者投融资行为总是有其特殊的期限模式。
(二) 经典单因子模型的最初构建
按照对利率期限结构建模的过程来区分, 可以将其大致分为两种类型, 第一类是根据市场均衡条件推导出的均衡模型, 第二类是通过相关债券之间必须满足的无套利条件建立的无套利模型。
均衡模型包括许多严格的假定条件, 并且要求考虑个人偏好, 模型的动态路径是瞬时短期利率, 模型的参数相对稳定, 不同的时间具有一定的连贯性。模型可以应用于债券价格、利率期限结构的预测。主要包括Merton模型、Vasicek模型、CIR模型等。
无套利模型假定条件宽松, 不需考虑个人偏好, 属于无偏好模型, 模型的动态路径是瞬时短期利率、瞬时远期利率和债券的价格, 要求债券的模型定价符合债券的市场定价。模型的参数特征是参数需要随市场而进行调整, 不固定。该类模型适用于衍生证券的交易。主要包括Ho- Lee模型、Hull- White模型、HJM模型 (Heath- Jarrow- Morton) 等。
(三) 多因子期限结构模型的发展
凭借着前人的模型研究, 近年来经济学家们逐渐将之前的模型进行改进, 尝试用多因子模型来研究利率期限结构。多因子模型的特点是包括了影响期限结构变化的尽可能多的因素, 因此其与实际更接近。多因子模型假定利率期限结构的动态过程是由几个因子共同推动的。这些多因子可以是宏观经济的变量, 也可以是收益率曲线本身的性状, 如收益率曲线斜度、曲度、利率波动等。
郎恩斯塔夫和斯瓦兹在1992 年提出了郎恩斯塔夫和斯瓦兹双因子模型 (Longstaff- Schwarts model) , 而布瑞安和斯瓦兹双因子模型是在利用无套利的约束条件下的一个以长短期利率为为状态变量的双因子利率期限结构模型。切恩 (Chen) 和巴尔杜茨 (Balduzzi) 在1996 年研究的三因子模型是在前人的基础上的一个改进和提升。Brace, Gatarek和Musiela (1997) 提出了LMM模型。他们假定远期LIBOR服从对数正态分布, 得到伦敦同业拆借远期利率的变化模型 (LMM模型) , 利用对数正态LMM可以直接对利率上限与下限进行界定。
(四) 仿射期限结构模型的发展
利率期限结构需要解释利率的历史变化特性和其风险中性属性。风险中性分布常常用来决定利率期限结构的形式。相对比即期利率分布, 利率的历史分布可以用来预测利率未来的期限结构、衍生品将来的价格和债券资产的在险价值 (VaR) 。仿射期限结构模型 (Affine Term Structure Model) 可以很好的解释利率的期限结构。潜在状态变量的仿射函数可以用来确定债券的收益率。Duffie and Kan在1996 年开始最早做这方面的研究。他们研究带有线性漂移和波动率的连续时间多维分布的仿射函数, 其中包含了单因子和多因子的Vasicek模型、CIR模型和Chen and Scott (1992) 的多因子模型, 还有Longstaff- Schwartz (1992) 的多因子模型。Duffie等 (2003) 在原有基础上, 得出了仿射期限结构模型的一个统一的表达式, 即连续时间过程下基于Laplace变换的指数型仿射结构模型。这类模型也是包含了CIR模型和Ornstein- Uhlenbeck模型。之后, Duffie的模型又向二次方期限结构函数的多维Ornstein-Uhlenbeck模型发展。 Dai and Singleton (2003) 和Cheng and Scaillet (2007) 得出二次期限结构模型 (Quadratic term Structure Model) 是通过状态变量的堆叠得到的仿射期限结构模型。Cheridito (2007) 得出了扩展形式的仿射模型, 可以更好地拟合实际数据。
近来, 国际学术界中有许多学者提出了用Wishart模型来模拟状态变量的动态相关结构。Wishart过程是一种仿射的、多变量的、含有对称正定矩阵的随机过程。其风险因素被假定为正定矩阵的连续时间仿射过程。Wishart模型最早由Bru在1991 年引入金融工程。国外在Wishart模型上有过许多深入的研究, 对此做研究的学者及文献有Gourieroux&Sufana (2003) 、Donati- Martin, Doumerc and Yor (2004) 、Gourieroux (2006) 、Buraschi, Porchia and Trojani (2006) 、Da Fonseca等 (2007) 、Da Fonseca等 (2008) 、Buraschi等 (2008) 、Cuchiero等 (2009) 、Gourieroux等 (2009) 、Gourieroux and Sufana (2010) 、Carl Chiarella等 (2013) 。此外还有许多学者也做了大量研究, 在此不加列举。
Gourieroux (2006) 的文献主要对Wishart过程做了连续时间变化方面的研究, 而Gourieroux等 (2009) 则主要做了离散时间的Wishart过程的研究。Singleton (2006) 提出了特征函数的估计方法, 使之运用到模型的参数估计中。Buraschi (2008) 等人在研究中提高了Wishart模型的灵活性来拟合数据, 得出了许多收益率曲线分析特性, 如债券超额收益率预期、收益率的波动性和相关性、远期波动率结构等。Buraschi的Wishart模型也是均衡模型的一种, 尽管在均衡状态下的市场价格风险规范较为简单, 但仍然可以模拟不同特征的收益率曲线。Jose Da Fonseca (2012) 等提出了Wishart模型是Heston模型的多变量改进。他提出, 波动性矩阵是在Wishart动态变化以及有平方根过程的均值回复的条件下建立的。在估计参数方面, Chacko and Viceira (2003) 和Buraschi (2008) 均是使用了GMM方法来估计参数的, Carrasco (2007) 提出了一种建立在特征方程上的矩条件估计法来估计参数。Cheridito (2007) 则是用了似然函数的方法来估计的。Jang and Yoon (2010) 也做了类似的工作来估算模型参数以及状态变量的值, 但我们的方法与Jang and Yoon (2010) 的方法有所不同, 我们通过扩展卡尔曼滤波方法的最大似然估计同时估计了参数和状态变量的值, 而Jang and Yoon (2010) 的模型的参数是固定的, 作者只是改变了状态变量的值, 这导致了定价时产生了差异。状态变量的价值其实是由整个估计过程得出的, 如果改变了他们就等于是无视了状态变量可以有的最优化结果。我们的模型同时估计了参数和状态变量, 使得状态变量的估计值在变化中得到最优解, 所以更加动态地贴近实际市场数据。如果我们设估计的参数为固定值, 而改变状态变量的值, 就会得到不同的利率曲线。换句话说, 状态变量是不宜人为设定的。Jang and Yoon (2010) 论文中的参数是借鉴于其他文献的, 但是作者并没有同时借鉴状态变量的值, 所以在Jang and Yoon (2010) 的论文中, 参数值和状态变量的值是没有直接联系的, 那么这对于模型定价是不利的。在我们这篇论文中, 我们用中国银行间固定利率国债收益率数据来估计模型参数, 同时也估计了状态变量x的值, 所以状态变量是在最大似然估计法得到模型参数之后得出的最优解。所以在对债券定价时我们的模型具有更好的精确性。
二、Wishart模型基本形式和运算
Wishart过程最先是由Bru在1991 年引入金融工程学的。Wishart过程的基本形式如下, 该过程是一个矩阵形式的随机微分方程
其中xt是一个n×n维的正半定矩阵, 因为xt是正半定, 那么的存在就有意义。m, σ 均是n×n维的矩阵, {Bt; t≥0}是n×n维矩阵形式的布朗运动。矩阵 ω 是对称矩阵, ω=βσσT且满足 β> n- 1, 这样才能保证xt的正定性。
短期利率rt被假定为与Wishart因子xt有线性相关性, 其表达式中 δ0是标量, δ1是常数对称矩阵, tr[. ]表示矩阵的迹。
我们上面给出的Wishart过程是在现实世界中的模型, 然而市场价格是有风险的, 所以我们用 λt来表示市场价格的风险, 其中 λ0和 λ1都是n×n维的矩阵, 这种表示方式我们可以在Cheridito等 (2007) 的文献中找到依据。
并且需要是半正定, β=2, 3. . . 这样xt在风险中性条件下才是严格为正的。关于这个规定我们在Cuchiero等 (2009) 的文献中可以找到依据。以上就是Wishart模型在现实世界和风险中性世界中的具体形式。其中公式作为关键的一步把Wishart过程中的状态变量xt代入了利率r的表达式, 这是模型定价的第一步。
Bru (1991) 指出Wishart过程是仿射的, 仿射函数是一种多维到多维的映射关系。在状态变量中的矩量母函数是指数型仿射的。下面我们用Wishart过程给债券做定价, 我们先定义零息债券价格如下
其中c是一维函数, a是矩阵函数。我们定义Wishart过程的矩量母函数为
其中, θ1, θ2, θ3都是实对称矩阵, v∈R, 初看vθ3像是多余的, 但是我们在后面的计算中会发现加上vθ3会更方便于计算。最后, 零息债券的价格可以由下式给出
即在矩量母函数 Φ (t, T, θ1, θ2, vθ3) 中, 我们设 θ1=- δ1, θ2=0, vθ3=0, 我们联系公式, 会发现这样的设定正满足了最初给出的零息债券的价格公式。
三、Wishart模型与经典CIR模型的比较
Chiarella等 (2011) 的研究的主要内容是在Buraschi (2008) 的基础上比较了三种模型, 关于Buraschi (2008) 提出的模型rt=tr[δ1xt], 其实是将我们公式去掉了截距项 δ0, 这样会使得rt的值有可能在数据拟合的过程中产生负值。我们的论文中只比较二维的CIR模型和Wishart模型。在Wishart模型中, 令n=1, 可以得到它的表达式为
这也就是一维CIR过程的形式, 所以我们得出一维CIR模型是1×1 维的Wishart模型。更深一步, 如果在n×n维的Wishart模型中, 矩阵m, σ 都是对角矩阵, 并且布朗运动Bt也是对角矩阵, 那么由该方程式得出的xt也必定是对角矩阵, 在xt这个矩阵中的每一个对角上的元素都是一个一维的CIR过程。且每个对角线上的xi过程相互之间是独立的, 其中的mi和 σi分别是矩阵m和 σ 对角线上的元素。值得注意的是, 多变量的对角过程比一般的多重独立一维CIR模型更加严格, 在中漂移系数项 βσi2与其方差 σi2有线性关系, 然而在一个多重独立的一维CIR过程中, 每一个xi有其不同的 βi。
根据以上的论述, 我们要研究的二维CIR模型的对角线上含有两个独立一维CIR过程, 所以它也可以看做是Wishart过程的一个特例。
在Wishart过程当中, ω-βσσT需要是半正定, β=2, 3. . . , 由波动率 σ 和长期价值 ω 来确定过程的正定性。矩阵 δ1也是正半定矩阵, δ0在估算的时候有可能出现负值, 最后, 不失一般性, 我们规定δ111=δ122=1 (主要为了方便后续的模型参数估计) , 详见Chiarella等 (2011) 。
Wishart框架下的二维CIR模型 (Two- dimensional Cox- Ingersol- Ross, 简称TCIR) , 这个模型是在Wishart过程的框架下面的, 换句话说就是TCIR模型是一个特殊的Wishart模型, 是把一般Wishart模型中的状态变量xt里的对角线上的元素设为特定的一维CIR过程。其一维CIR过程分别作为特殊Wishart过程的状态变量对角线上的元素, 短期利率公式同上。其中 δ1是一个对角矩阵, 并且对于Wishart过程来说, 所有的参数都是对角的。证明过程参见Benabid (2009) 。
作为变量的矩量母函数。如果在公式中矩阵 (ω, m, σ) 和在公式中的矩阵 (θ1, θ2) 是对角的 (对于一个矩阵xt, 第i个对角线上的元素写作xii, 那么对于一个矩阵xk, 它的对角线上第i个元素就写作) 。
对于TCIR模型来说, δ0被发现可能会等于负数, 也就是说该分布可以使短期利率为负值。对于Wishart模型来说, 为了不失一般性, 使 δ111=δ221=1 (便于后续参数估计) 。
参考文献
[1]周荣喜, 王晓光.基于多因子仿射利率期限结构模型的国债定价[J].中国管理科学, 2013, (4) :27-29.
[2]周生宝.仿射利率期限结构:理论和应用[D].大连:东北财经大学, 2013.
[3]吴盈盈.国内结构性理财产品定价及收益研究[D].北京:首都经贸大学, 2014.
[4]龚厚文.Wishart自回归模型的贝叶斯算法研究[D].长沙:湖南师范大学, 2014.
一、 正比例函数模型:f(x)=kx(常数k≠0).
性质:f(x±y)=f(x)±f(y).
例1 已知函数f(x)的定义域为R,且满足条件:①对任意x,y∈R,有f(x+y)=f(x)+f(y);②当x>0时,f(x)<0;③f(1)=-2.求f(x)在区间[-3,3]上的最大值与最小值.
分析 由于正比例函数满足条件f(x+y)=f(x)+f(y),且正比例函数既为奇函数又是单调函数,故f(x)的最值应在区间[-3,3]的端点处取得.
解 设-3≤x1<x2≤3,则x2-x1>0,由题意,知f(x2-x1)<0.
因为f(x2)-f(x1)=f[(x2-x1)+x1]-f(x1)=f(x2-x1)+f(x1)-f(x1)=f(x2-x1)<0,即f(x2)<f(x1),所以f(x)是[-3,3]上的减函数.
令x=y=0,则f(0)=f(0)+f(0),所以f(0)=0;令y=-x,则f(0)=f(x)+f(-x),所以f(-x)=-f(x).故f(x)是[-3,3]上的奇函数.
所以f(x)的最大值为f(-3)=f(-1-2)=f(-1)+f(-1-1)=3f(-1)=-3 f(1)=6,f(x)的最小值为f(3)=3f(1)=-6.
点评 利用正比例函数的性质,挖掘出了对应抽象函数的性质,明确了解题的目标.
二、 指数函数模型:f(x)=ax(常数a>0且a≠1).
性质:f(x+y)=f(x)f(y).
例2 设函数f(x)定义于实数集上,对任意实数x,y,f(x+y)=f(x)f(y)总成立,且存在实数x1≠x2,使得f(x1)≠f(x2),求证:对任意实数x,f(x)>0.
分析 易知指数函数满足条件f(x+y)=f(x)+f(y),而指数函数的值是恒大于零的.
解
若f(0)=0,则对任意x∈R,f(x)=f(x+0)=f(x)f(0)=0均成立.这与存在实数x1≠x2,使得f(x1)≠f(x2)矛盾,故f(0)≠0.
下面来证明对任意x∈R,有f(x)≠0.
假设存在x0∈R,使f(x0)=0,则f(0)=f(x0-x0)=f(x0)f(-x0)=0.这与f(0)≠0矛盾,因此对任意x∈R,有f(x)≠0.
于是可知对任意x∈R,有f(x)=fx2+x2=f2x2>0.
点评 请大家思考:满足题意的f(x)是不是一定是指数函数呢?
三、 对数函数模型:f(x)=logax(常数a>0且a≠1).
性质:f(xy)=f(x)+f(y).
例3 设f(x)是定义在正实数集上的增函数,且对任意正实数x,y,有f(x)=fxy+f(y),又f(3)=1.若f(x)-f1x-5>2,求x的取值范围.
分析 易知对数函数满足条件f(x)=f(xy)+f(y),从而可借助于对数运算的性质,将已知不等式化为左右两边都仅含一个函数符号f的不等式,再利用函数f(x)的单调性解决问题.
解 因为f(3)=1,所以f(9)=f93+f(3)=f(3)+f(3)=2.
因为f(x)=fxy+f(y),即f(x)-f(y)=fxy,所以f(x)-f1x-5=f[x(x-5)].
所以f[x(x-5)]>f(9).
又因为f(x)是定义在正实数集上的增函数,则有x>0,x-5>0,x(x-5)>9,解得x>5+612,即为所求.
四、 幂函数模型:f(x)=xα(常数α∈R).
性质:f(xy)=f(x)f(y).
例4 设定义在区间(0,+∞)上的函数f(x)对任意x,y∈(0,+∞),恒有f(x)>0,f(xy)=f(x)f(y);且当x>1时,f(x)>1;又f(2)=2.试求不等式f(x2-3x)>2的解集.
分析 欲求抽象函数不等式的解,必须判断出此函数的单调性,对已知条件进行适当配凑并根据函数单调性的定义可解决问题.
解 设0<x1<x2,则x2x1>1,由已知,得fx2x1>1,且f(x1)>0.
因为f(x1)-f(x2)=f(x1)-fx2x1•x1=f(x1)-fx2x1f(x1)=f(x1)1-fx2x1<0,即f(x1)<f(x2),所以f(x)在(0,+∞)上单调增.
因为f(4)=f(2×2)=f(2)•f(2)=2,故不等式f(x2-3x)>2x2-3x>4,解得x>4,即为所求.
点评 解抽象不等式时,应根据抽象函数的单调性是“脱去”抽象函数符号“f”.而证明抽象函数单调性时,需根据单调性的定义并对已知条件进行适当的配凑.
五、 余弦函数模型:f(x)=kcosx(常数k≠0).
性质:f(x+y)+f(x-y)=2f(x)f(y).
例5 设函数f(x)定义在R上,对任意x,y∈R,都有f(x+y)+f(x-y)=2f(x)f(y),且f(0)≠0.若存在常数c∈R,使fc2=0,试问f(x)是否是周期函数?若是,求出它的一个周期;若不是,说明理由.
分析 由题设条件很难发现f(x)的周期性,但若联想到三角恒等变换公式,可发现f(x)=cosx满足题设条件,则可猜想函数f(x)以2c为一个周期.
解 因为fx+c2+c2+fx+c2-c2=2fx+c2fc2=0,即f(x+c)+f(x)=0,
所以f(x)=-f(x+c)=f(x+2c),所以f(x)是以2c为一个周期的函数.
点评 先用具体函数模型的性质去猜想抽象函数f(x)的性质,然后有针对性地进行证明,从而获得正确判断.
六、 正切函数模型:f(x)=tanx.
性质:f(x+y)=f(x)+f(y)1-f(x)f(y).
例6 已知f(x)是定义域为R的函数,且满足对任意x∈R,有f(x+2)[1-f(x)]=1+f(x).若f(1)=2+2,求f(2 009)的值.
分析 将条件式变形,得f(x+2)=1+f(x)1-f(x),
印章作为一种辅助艺术运用在绘画、书法等艺术上,或用来说明主题内容、作者姓名、创作年月、收藏者等,或用来增加画面构图完整,成为世态作品的一个重要组成部分。现在社会很少有人还有属于自己的印章,下面就给大家简单介绍一下印章的制作过程,有兴趣的可以学习一下。
首先是将所要刻的字体打印好,并将其反向放置在尺寸相吻合的印章原料上。在创作中,为求全套印谱之形式多变,可以依照古印的形式,在印章中加以各类界划,边框。所要注意的是,是所采取的界划同所配的文字要合乎印章的传统体制如在周秦格式中。
有时由于印文笔画繁多或稀少,难以安排妥贴、为了审美需求,在不
违背造字原则的前提下,可对部分笔画作增减处理。
传统认为,篆刻必先篆后刻,甚至有“七分篆三分刻”之说。篆刻本身是一门与书法密切结合的艺术。篆刻家的作品与刻字铺师傅刻出的领工资用的印章的根本区别,在于前者是“写”的,讲究章法篆法,后者是靠“描的”,并不计较章法篆法。
photoshop cs6
人物头像素材
方法/步骤
首先,打开photoshop 导入人物头像素材,还是***惯,ctrl+J复制一个图层。
新建一个图层,使用画笔在自己感觉不错的部位涂上灰色,一般是鼻下与嘴下部位,
执行“滤镜-杂色-添加杂色”
添加杂色:数量为14.21%,高斯分布,单色。
执行“滤镜-模糊-径向模糊”
径向模糊:数量10,模糊方法为旋转,品质为好。
图层类型为柔光,使用加深工具将胡须加深,让其更加明显。
自己制作蛋糕的要点介绍
1.使用好的材料。原料的好坏直接影响到蛋糕的品质,虽然好原料会增加到蛋糕的制作成本,可是它具有和同业竞争的优越条件,不但能提高产品的品质,且可增加产品的销量,确立店铺的声誉;
2.须要了解各种原料的性质和它们在蛋糕内的功能。做蛋糕固然要使用好的原料,但是在选用原料之前我们必须先了解各种原料在蛋糕内起着什么样的作用,有着怎样不可替代的好处,以及它的组合成分包含哪些物质,在面糊搅拌过程和烘烤过程中可产生出哪些化学反应和物理变化。例如,做蛋糕用的油有奶油、玛琪琳、氢化油、乳化油、沙拉油、起酥油等,而奶水又有鲜奶、蒸发奶、浓缩奶、脱脂奶、酸奶、奶粉等,鸡蛋有蛋白、蛋黄、全蛋之分,这些同类而不同成分和不同性质的原料,在使用时各有不同的特性,这些都是职业烘焙师所必须具备的基本知识。做蛋糕的主要原料是面粉、糖、油、蛋、盐、奶、化学膨大剂等七种,其他还有香料、可可粉和巧克力等调味原料总共有数十种之多,在这主要的七种原料中我们可以将它们归为干性、湿性、柔性、韧性,以及产生香味的物种性质。所谓干性原料是指这些原料用在蛋糕配方中可使蛋糕产生干的特性,必须要有足够的液体原料来溶解它,面粉、糖、奶粉、酵粉、盐、可可粉等都属于干性原料。湿性原料包括奶水、鸡蛋和糖浆等数种,它们在蛋糕配方内时主要水分的来源,供应足够的水分来溶解其他干性原料,使蛋糕保持湿润和膨大。柔性原料是指油、糖、化学膨大剂、蛋黄等,它们的功能是使蛋糕保持柔软膨松。韧性原料亦可称为结构原料,它在蛋糕内可产生坚韧的性质,或是可增加面粉的筋性而产生了韧性,是构成蛋糕骨架的主要原料,主要有面粉、奶粉、盐、可可粉、蛋白等。产生香味的原料是包括了糖、奶水、油、蛋、可可粉、香料等,因为这些原料进烤箱后可产生独特的香味,使蛋糕芳香可口。注意每种原料独有的特性,灵活应用后产品的品质可控制自如,万一发生不应有的弊病或因故变换原料时,可根据原料属性来做适当的调整,使产品恢复正常。
3.平衡。充分了解各种原料在蛋糕内的功能之后,还需要进一步了解各种原料因蛋糕性质不同用量也随之不同,在设定一个蛋糕配方时,先决定这款蛋糕属于高成本还是低成本的,蛋糕质地属于松软还是坚硬。原料有干、湿、柔、韧之分,而使蛋糕产生较好香味的主要原料有糖、油、蛋、奶这四种,这四种原料用得多成本就较高,但蛋糕的品质就较好,但需注意,即使是好的原料,也不是越多就越好,而需遵照一定的使用比例,不可因强调其中一种特性,而打破原料之间的平衡,终破坏蛋糕的好品质。
4.需要正确的搅拌方法。面糊搅拌有两个大的作用,第一是将配方中各种原料搅拌均匀,使每一种原料都能均匀的分布在面糊的每一部分。第二是借不同的搅拌器具和速度,在面糊中打入适量的空气,使烤出的蛋糕具有膨大和细腻的组织。在有了优质的原料和配方后,如果搅拌不当,仍是前功尽弃,得不到理想的产品,所以在搅拌面糊前要先确定所做的属于哪一种类型的蛋糕,确认需要的搅打器和搅拌速度,才不至于遭遇失败。
5.正确的烘烤温度和时间。每种蛋糕因性质不同,所以烘焙的温度和时间也不一样,尤其若使用的是箱式烤箱,烤箱的温度控制分为上下火,控制温度的温度计又常出现不准确的情况,在烘焙蛋糕时应特别小心,平时要养成烘焙的经验才能运用自如,否则火力的太大或太小都会影响到蛋糕表面的颜色和内部的组织。原则上凡是用模具烤的蛋糕,重量在100g以下的,需用200℃的温度烤12-18分钟左右,上下火同火力;如果在100-450g之间的,要用180℃下火比上火略大,烘焙时间在18-40分钟之间;如果重量超过450-1000g的,则同样使下火比上火大,用170℃烘焙40-60分钟。如果所烤的蛋糕不是用模具而是直接铺平在烤盘内烘烤的,则应该用上火来烤,下火用得极其微小,只要能使蛋糕底部能产生颜色即可。一般而言,烘烤蛋糕要视蛋糕的大小和蛋糕的类别决定烘焙的温度和时间,小的蛋糕应用高温而缩短烘焙的时间,大而厚的蛋糕要用低温而延长烘焙时间。通常所称的高温是指190℃-232℃,常温是171℃-190℃,低温是162℃-171℃。乳沫类的蛋糕和轻奶油蛋糕应该用高温,重奶油蛋糕和戚风类蛋糕应该用常温,水果蛋糕和大型蛋糕应该用低温,如果烤箱温度低于应有的温度,所烤出来的蛋糕往往顶部平坦而粘手,四周向中央收缩,烤盘内侧含有粘附的面糊,同时内部组织非常松软。相反,如果烤箱温度高于应有的温度,蛋糕中央会向上隆起,顶部破裂,蛋糕外缘从烤盘向内收缩,但烤盘内侧光洁而不会有面糊粘附在上面,此类蛋糕内部组织较为紧密。如果蛋糕烤得不熟,上部在表皮以下会有一层胶粘的生面糊,如果蛋糕下层接近底部处有这种生面糊,则是配方内的水分过多,或者底火太弱和搅拌时未能将配方中油脂搅拌均匀等缘故。
6.冷却与包装。有些蛋糕出炉后会受温度骤然的变化而收缩,因此在出炉时应注意冷却的处理,以避免过度收缩。蛋糕暴露在空气中,尤其受到了风吹的影响很容易变得干燥,所以冷却后应马上添加表面装饰,或者予以妥善包装,可延长保存的日期。包装或霜饰的蛋糕可贮存在摄氏零度至十度的冰箱内,如果在这个冷度下蛋糕未予包装或霜饰,则很快地会变干,失去应有的品质。一些大型蛋糕制作工厂,一次可制作很多蛋糕,包装后存在零下30℃的冰柜内,在销售前先从冰柜内把蛋糕取出化冰,至少2个小时以上即可保持原有的新鲜风味,贮存在零下十度冰柜内的蛋糕可经久不会变质。
7.注意霜饰。经过霜饰处理的蛋糕,不但有延长贮存时间的优点,同时也能增加蛋糕外表的美观,也能更随心所欲地变换蛋糕口味。
做蛋糕时为什么不搅拌
搅拌通常指顺时针或是逆时针方向反复的、以划圈的形式来搅动,这样的做法力道远比翻拌、切拌来得大。需要混合的面糊,如果用搅拌的方式,就很容易起面筋,导致做出来的蛋糕、饼干口感不够松软;而需要混合面粉和打发蛋白时,如果一直使用搅拌的方式,就很容易造成打发的蛋白消泡。
所以用翻拌或者切拌的手法混合面糊比较好。
蛋糕烤出来很硬是怎么回事
(1)蛋黄糊搅拌的时间过长,导致面糊起筋了。
(2)蛋白打发不足,蛋糕膨发不足。
(3)烘烤时间过长且温度过低。
目前, 在PPT文件中嵌入视频文件有以下几种方式:
1. 直接的视频播放文件嵌入
具体的操作技巧如下:
直接的视频文件嵌入方式是实现将准备好的视频直接插入幻灯片中, 是PPT运用中最直接、简单的视频嵌入方式。但是不足的是, 这种视频嵌入方式只有简单的暂停和播放两种控制, 而没有其他的控制操作。
2. 控件插入式的视频嵌入
插入控件的播放视频是通过修改控件的属性, 实现视频播放目的的视频嵌入模式, 在播放过程中具有多种可供选择的按钮, 进行视频的自我控制, 具有便捷性和灵活性的特征。具体步骤如下:
(1) 打开PPT制作软件之后, 编辑幻灯片文件名称, 新建一个需要嵌入视频文件的PPT文件。
(2) 在幻灯片文件的菜单栏中找到“视图”选项, 选中下拉菜单中的“控件工具箱|其他控件”, 通过插入其他控件来设置PPT视频文件的嵌入。
(3) 选择之后将会出现一个控件的选项界面, 通过选择“Windows Media Player”后, 将鼠标返回到PPT的编辑区, 绘制一个适当的矩形区域, 将“Windows Media Player”在区域类自动形成播放界面。
(4) 选中播放界面的“Windows Media Player”, 单击右键, 选择快捷菜单中的“属性”, 打开属性窗口进行下一步编辑。
(5) 选择属性窗口中的“File Name”, 输入嵌入powerpoint中的视频文件的详细路径和文件名, 然后通过“播放”来控制整个视频文件的播放状态。
(6) 通过修改“属性”设置中的控制栏和播放滑块条的性质和位置, 能够将视频文件更好的嵌入PPT。
控件插入式的视频格式的播放器中具有“播放”、“暂停”“调节音量”和“停止”的按钮来对视频进行有效的控制。
3. 对象式的视频播放嵌入
第一步:运行powerpoint软件, 单击菜单栏中“插入|对象”命令, 打开插入对象的对话框。
第二步:新建一个对象文件, 选择菜单了中的“新建”, 在对应的对象类型中选择视频剪辑的选项, 选好之后, 单击确定。
第三步:视频文件嵌入PPT。首先需要将PowerPoint切换到视频属性设置状态, 通过控制视频属性来嵌入PPT视频, 点击“插入剪辑|Windows视频”。
第四步:选中“编辑|选项”选项, 打开设置框选择视频播放的模式, 循环播放还是结束后倒退, 单击“确定”确定选项, 返回到视频的属性设置界面。
第五步:从视频工具栏中找到“入点”和“出点”按钮, 单击选择, 重新设置视频文件的播放起始点, 视频播放的过程可以随心所欲的设置。
第六步:视频嵌入的步骤基本上完成, 将鼠标退回到文件的空白工作区, 将文件回到可编辑的状态, 最后, 预览嵌入的效果。
所以, 插入对象式的视频文件在PPT的应用中时最灵活、功能最齐全的, 能够随时按照实际需要进行起始点的设置。
4. 其他格式视频嵌入形式
一般来说, PPT母板的用处比较大。要制成有个性化的PPT板式, 可以将个性化的LOGO放置在母板上, 或者将固有的图形和标志设置在母板上。视频嵌入是powerpoint中较为高端的技巧设计, 对PPT展示具有很大的作用, 形成生动、形象的板式设计。
4.1 flash格式视频的嵌入
(1) 运行powerpoint软件, 打开演示文稿, 将flash文件与PPT置于同一个目录中, 选择文件工具栏中的“视图”, 在视图的下拉菜单中选择“工具栏|控件工具箱”。
(2) 鼠标单击右下角“其他控件”的按钮, 选中“Shockwave Flash Object”的控件, 拖动十字光标将其放置在幻灯片中的适当位置, 设置好大小。
(3) 鼠标右键点击空间选择的属性, 在“控件属件”的对话框中选择自定义选项, 在自定义选项框中选择“Movie”栏中, 选择要播放的Flash文件名。
4.2 exe格式视频文件的嵌入
(1) 打开powerpoint演示文稿, 在需要嵌入视频格式的图片或对象上右键单击, 在快捷菜单中选择“超链接”选项。
(2) 选择弹出对话框中的“当前文件夹”选项, 选中需要嵌入的exe视频文件, 点击确定。
4.3 rm、ra、等不常用视频文件嵌入
在第二部分中提供用Windows Media Player控件可以有效的实现mpg、asf、avi等视频格式的嵌入, 但是其他不常用的视频格式同样可以通过PPT中的“控件工具箱”来插入视频文件。
(1) 打开PPT制作软件之后, 编辑幻灯片文件名称, 新建一个需要嵌入视频文件的PPT文件。
(2) 选择“视图|控件工具箱|其他控件”, 在其他控件按钮中选择“RealPlayer G2 Control”, 将鼠标移动到ppt的工作区, 用鼠标左键在工作区域内拖出适当大小的区域, 插入视频。
(3) 将鼠标返回到PPT的工作区单击鼠标右键选择快捷菜单中的“属性”命令, 在弹出的属性对话框中知道Source选项, 这一步是输入嵌入视频格式的详细的文件名称和路径。可以设置不自动播放视频文件, 只需要在“autostart”中选择“false”按钮即可。
利用这种方式嵌入视频文件, 需要保障播放系统中有特定的播放器样式——realplayer播放器, 这种嵌入视频的方式可以方便的进行视频调控, 有效的调控其音量和播放进度。
5. 结语
综上所述, 在powerpoint文件中插入视频文件是一项具有艺术技巧的设置过程, 根据其视频格式的不同需要选用不同的制作技巧。就目前来说常见的三种PPT视频嵌入方式主要是:直接的视频播放文件嵌入、控件插入式的视频嵌入和对象式的视频播放嵌入。
参考文献
[1]毕芳芳李志敏.在PPT课件中嵌入视频文件的制作技巧[J].《电脑学习》2011年第1期, 2011.
[2]吴宏博.在PPT中插入Flash的技巧[J].《中小学电教》2010年第12期, 2010.
----第一节----初识动态规划--------
经典的01背包问题是这样的:
有一个包和n个物品,包的容量为m,每个物品都有各自的体积和价值,问当从这n个物品中选择多个物品放在包里而物品体积总数不超过包的容量m时,能够得到的最大价值是多少?[对于每个物品不可以取多次,最多只能取一次,之所以叫做01背包,0表示不取,1表示取]
为了用一种生动又更形象的方式来讲解此题,我把此题用另一种方式来描述,如下:
有一个国家,所有的国民都非常老实憨厚,某天他们在自己的国家发现了十座金矿,并且这十座金矿在地图上排成一条直线,国王知道这个消息后非常高兴,他希望能够把这些金子都挖出来造福国民,首先他把这些金矿按照在地图上的位置从西至东进行编号,依次为0、1、2、3、4、5、6、7、8、9,然后他命令他的手下去对每一座金矿进行勘测,以便知道挖取每一座金矿需要多少人力以及每座金矿能够挖出多少金子,然后动员国民都来挖金子。
题目补充1:挖每一座金矿需要的人数是固定的,多一个人少一个人都不行。国王知道每个金矿各需要多少人手,金矿i需要的人数为peopleNeeded[i]。
题目补充2:每一座金矿所挖出来的金子数是固定的,当第i座金矿有peopleNeeded[i]人去挖的话,就一定能恰好挖出gold[i]个金子。否则一个金子都挖不出来。
题目补充3:开采一座金矿的人完成开采工作后,他们不会再次去开采其它金矿,因此一个人最多只能使用一次。
题目补充4:国王在全国范围内仅招募到了10000名愿意为了国家去挖金子的人,因此这些人可能不够把所有的金子都挖出来,但是国王希望挖到的金子越多越好。
题目补充5:这个国家的每一个人都很老实(包括国王),不会私吞任何金子,也不会弄虚作假,不会说谎话。
题目补充6:有很多人拿到这个题后的第一反应就是对每一个金矿求出平均每个人能挖出多少金子,然后从高到低进行选择,这里要强调这种方法是错的,如果你也是这样想的,请考虑背包模型,当有一个背包的容量为10,共有3个物品,体积分别是3、3、5,价值分别是6、6、9,那么你的方法取到的是前两个物品,总价值是12,但明显最大值是后两个物品组成的15。
题目补充7:我们只需要知道最多可以挖出多少金子即可,而不用关心哪些金矿挖哪些金矿不挖。
那么,国王究竟如何知道在只有10000个人的情况下最多能挖出多少金子呢?国王是如何思考这个问题的呢?
国王首先来到了第9个金矿的所在地(注意,第9个就是最后一个,因为是从0开始编号的,最西边的那个金矿是第0个),他的臣子告诉他,如果要挖取第9个金矿的话就需要1500个人,并且第9个金矿可以挖出8888个金子。听到这里国王哈哈大笑起来,因为原先他以为要知道十个金矿在仅有10000个人的情况下最多能挖出多少金子是一件很难思考的问题,但是,就在刚才听完他的臣子所说的那句话时,国王已经知道总共最多能挖出多少金子了,国王是如何在不了解其它金矿的情况下知道最多能挖出多少金子的呢?他的臣子们也不知道这个谜,因此他的臣子们就问他了:“最聪明的国王陛下,我们都没有告诉您其它金矿的情况,您是如何知道最终答案的呢?”
得意的国王笑了笑,然后把他最得意的“左、右手”叫到跟前,说到:“我并不需要考虑最终要挖哪些金矿才能得到最多的金子,我只需要考虑我面前的这座金矿就可以了,对于我面前的这座金矿不外乎仅有两种选择,要么挖,要么不挖,对吧?”
“当然,当然”大臣们回答倒。
国王继续说道:“如果我挖取第9座金矿的话那么我现在就能获得8888个金子,而我将用去1500个人,那么我还剩下8500个人。我亲爱的左部下,如果你告诉我当我把所有剩下的8500个人和所有剩下的其它金矿都交给你去开采你最多能给我挖出多少金子的话,那么我不就知道了在第9个金矿一定开采的情况下所能得到的最大金币数吗?”
国王的左部下听后回答道:“国王陛下,您的意思是如果我能用8500个人在其它金矿最多开采出x个金币的话,那您一共就能够获得 x + 8888个金子,对吗?”
“是啊,是啊……如果第9座金矿一定开采的话……”大臣们点头说到。
国王笑着继续对着他的右部下说到:“亲爱的右部下,也许我并不打算开采这第9座金矿,那么我依然拥有10000个人,如果我把这10000个人和剩下的金矿都给你的话,你最多能给我挖出多少个金子呢?”
国王的右部下聪明地说道:“尊敬的国王陛下,我明白您的意思了,如果我回答最多能购开采出y个金币的话,那您就可以在y和x+8888之间选择一个较大者,而这个较大者就是最终我们能获得的最大金币数,您看我这样理解对吗?”
国王笑得更灿烂了,问他的左部下:“那么亲爱的左部下,我给你8500个人和其余金矿的话你能告诉我最多能挖出多少金子吗?”
“请您放心,这个问题难不倒我”。左部下向国王打包票说到。
国王高兴地继续问他的右部下:“那右部下你呢,如果我给你10000个人和其余金矿的话你能告诉我最多能挖出多少金子吗?”
“当然能了!交给我吧!”右部下同左部下一样自信地回答道。
“那就拜托给你们两位了,现在我要回到我那舒适的王宫里去享受了,我期待着你们的答复。”国王说完就开始动身回去等消息了,他是多么地相信他的两个大臣能够给他一个准确的答复,因为国王其实知道他的两位大臣要比他聪明得多。
故事发展到这里,你是否在想国王的这两个大臣又是如何找到让国王满意的答案的呢?他们为什么能够如此自信呢?事实上他们的确比国王要聪明一些,因为他们从国王的身上学到了一点,就是这一点让他们充满了自信。
国王走后,国王的左、右部下来到了第8座金矿,早已在那里等待他们的金矿勘测兵向两位大臣报道:“聪明的两位大臣,您们好,第8座金矿需要1000个人才能开采,可以获得7000个金子”。
因为国王仅给他的左部下8500个人,所以国王的左部下叫来了两个人,对着其中一个人问到:“如果我给你7500个人和除了第8、第9的其它所有金矿的话,你能告诉我你最多能挖出多少金子吗?”
然后国王的左部下继续问另一个人:“如果我给你8500个人
和除了第8、第9的其它所有金矿的话,你能告诉我你最多能挖出多少金子吗?”国王的左部下在心里想着:“如果他们俩都能回答我的问题的话,那国王交给我的问题不就解决了吗?哈哈哈!”
因为国王给了他的右部下10000个人,所以国王的右部下同样也叫来了两个人,对着其中一个人问:“如果我给你9000个人和除了第8、第9的其它所有金矿的话,你能告诉我你最多能挖出多少金子吗?”
然后国王的右部下继续问他叫来的另一个人:“如果我给你10000个人和除了第8、第9的其它所有金矿的话,你能告诉我你最多能挖出多少金子吗?”
此时,国王的右部下同左部下一样,他们都在为自己如此聪明而感到满足。
当然,这四个被叫来的人同样自信地回答没有问题,因为他们同样地从这两个大臣身上学到了相同的一点,而两位自认为自己一样很聪明的大臣得意地笑着回到了他们的府邸,等着别人回答他们提出来的问题,现在你知道了这两个大臣是如何解决国王交待给他们的问题了吗?
那么你认为被大臣叫去的那四个人又是怎么完成大臣交给他们的问题的呢?答案当然是他们找到了另外八个人!
没用多少功夫,这个问题已经在全国传开了,更多人的人找到了更更多的人来解决这个问题,而有些人却不需要去另外找两个人帮他,哪些人不需要别人的帮助就可以回答他们的问题呢?
很明显,当被问到给你z个人和仅有第0座金矿时最多能挖出多少金子时,就不需要别人的帮助,因为你知道,如果z大于等于挖取第0座金矿所需要的人数的话,那么挖出来的最多金子数就是第0座金矿能够挖出来的金子数,如果这z个人不够开采第0座金矿,那么能挖出来的最多金子数就是0,因为这唯一的金矿不够人力去开采。让我们为这些不需要别人的帮助就可以准确地得出答案的人们鼓掌吧,这就是传说中的底层劳动人民!
故事讲到这里先暂停一下,我们现在重新来分析一下这个故事,让我们对动态规划有个理性认识。
子问题:
国王需要根据两个大臣的答案以及第9座金矿的信息才能判断出最多能够开采出多少金子。为了解决自己面临的问题,他需要给别人制造另外两个问题,这两个问题就是子问题。
思考动态规划的第一点----最优子结构:
国王相信,只要他的两个大臣能够回答出正确的答案(对于考虑能够开采出的金子数,最多的也就是最优的同时也就是正确的),再加上他的聪明的判断就一定能得到最终的正确答案。我们把这种子问题最优时母问题通过优化选择后一定最优的情况叫做“最优子结构”。
思考动态规划的第二点----子问题重叠:
实际上国王也好,大臣也好,所有人面对的都是同样的问题,即给你一定数量的人,给你一定数量的金矿,让你求出能够开采出来的最多金子数。我们把这种母问题与子问题本质上是同一个问题的情况称为“子问题重叠”。然而问题中出现的不同点往往就是被子问题之间传递的参数,比如这里的人数和金矿数。
思考动态规划的第三点----边界:
想想如果不存在前面我们提到的那些底层劳动者的话这个问题能解决吗?永远都不可能!我们把这种子问题在一定时候就不再需要提出子子问题的情况叫做边界,没有边界就会出现死循环。
思考动态规划的第四点----子问题独立:
要知道,当国王的两个大臣在思考他们自己的问题时他们是不会关心对方是如何计算怎样开采金矿的,因为他们知道,国王只会选择两个人中的一个作为最后方案,另一个人的.方案并不会得到实施,因此一个人的决定对另一个人的决定是没有影响的。我们把这种一个母问题在对子问题选择时,当前被选择的子问题两两互不影响的情况叫做“子问题独立”。
这就是动态规划,具有“最优子结构”、“子问题重叠”、“边界”和“子问题独立”,当你发现你正在思考的问题具备这四个性质的话,那么恭喜你,你基本上已经找到了动态规划的方法。
有了上面的这几点,我们就可以写出动态规划的转移方程式,现在我们来写出对应这个问题的方程式,如果用gold[mineNum]表示第mineNum个金矿能够挖出的金子数,用peopleNeeded[mineNum]表示挖第mineNum个金矿需要的人数,用函数f(people,mineNum)表示当有people个人和编号为0、1、2、3、……、mineNum的金矿时能够得到的最大金子数的话,f(people,mineNum)等于什么呢?或者说f(people,mineNum)的转移方程是怎样的呢?
答案是:
当mineNum = 0且people >= peopleNeeded[mineNum]时 f(people,mineNum) = gold[mineNum]
当mineNum = 0且people < peopleNeeded[mineNum]时 f(people,mineNum) = 0
当mineNum != 0时 f(people,mineNum) = f(people-peopleNeeded[mineNum], mineNum-1) + gold[mineNum]与f(people, mineNum-1)中的较大者,前两个式子对应动态规划的“边界”,后一个式子对应动态规划的“最优子结构”请读者弄明白后再继续往下看。
----第二节----动态规划的优点--------
现在我假设读者你已经搞清楚了为什么动态规划是正确的方法,但是我们为什么需要使用动态规划呢?请先继续欣赏这个故事:
国王得知他的两个手下使用了和他相同的方法去解决交代给他们的问题后,不但没有认为他的两个大臣在偷懒,反而很高兴,因为他知道,他的大臣必然会找更多的人一起解决这个问题,而更多的人会找更更多的人,这样他这个聪明的方法就会在不经意间流传开来,而全国人民都会知道这个聪明的方法是他们伟大的国王想出来的,你说国王能不高兴吗?
但是国王也有一些担忧,因为他实在不知道这个“工程”要动用到多少人来完成,如果帮助他解决这个问题的人太多的话那么就太劳民伤财了。“会不会影响到今年的收成呢?”国王在心里想着这个问题,于是他请来了整个国家里唯一的两个数学天才,一个叫做小天,另一个叫做小才。
国王问小天:“小天啊,我发觉这个问题有点严重,我知道其实这可以简单的看成一个组合问题,也就是从十个金矿中选取若干个金矿进行开采,看看哪种组合得到的金子最多,也许用组合方法会更好一些。你能告诉我一共有多少种组合情况吗?”
“国王陛下,如果用组合方法的话一共要考虑2的10次方种情况,也就是1024种情况。”小天思考了一会回答到。
“嗯……,如果每一种情况我交给一个人去计算能得到的金子数的话,那我也要1024个人,其实还是挺多的。”国王好像再次感觉到了自己的方法是正确的。
国王心理期待着小才能够给它一个更好的答案,问到:“小才啊,那么你能告诉我用我的那个方法总共需要多少人吗?其实,我也计算过,好像需要的人数是1+2+4+8+16+32+64+……,毕竟每一个人的确都需要找另外两个人来帮助他们……”
不辜负国王的期待,小才微笑着说到:“亲爱的国王陛下,其实我们并不需要那么多人,因为有很多问题其实是相同的,而我们只需要为每一个不同的问题使用一个人力便可。”
国王高兴的问到:“此话如何讲?”
“打个比方,如果有一个人需要知道1000个人和3个金矿可以开采出多少金子,同时另一个人也需要知道1000个人和3个金矿可以开采出多少金子的话,那么他们可以去询问相同的一个人,而不用各自找不同的人浪费人力了。”
国王思考着说到:“嗯,很有道理,如果问题是一样的话那么就不需要去询问两个不同的人了,也就是说一个不同的问题仅需要一个人力,那么一共有多少个不同的问题呢?”
“因为每个问题的人数可以从0取到10000,而金矿数可以从0取到10,所以最多大约有10000 * 10 等于100000个不同的问题。” 小才一边算着一边回答。
“什么?十万个问题?十万个人力?”国王有点失望。
“请国王放心,事实上我们需要的人力远远小于这个数的,因为不是每一个问题都会遇到,也许我们仅需要一、两百个人力就可以解决这个问题了,这主要和各个金矿所需要的人数有关。” 小才立刻回答到。
故事的最后,自然是国王再一次向他的臣民们证明了他是这个国家里最聪明的人,现在我们通过故事的第二部分来考虑动态规划的另外两个思考点。
思考动态规划的第五点----做备忘录:
正如上面所说的一样,当我们遇到相同的问题时,我们可以问同一个人。讲的通俗一点就是,我们可以把问题的解放在一个变量中,如果再次遇到这个问题就直接从变量中获得答案,因此每一个问题仅会计算一遍,如果不做备忘的话,动态规划就没有任何优势可言了。
思考动态规划的第六点----时间分析:
正如上面所说,如果我们用穷举的方法,至少需要2^n个常数时间,因为总共有2^n种情况需要考虑,如果在背包问题中,包的容量为1000,物品数为100,那么需要考虑2^100种情况,这个数大约为10的30次方。
而如果用动态规划,最多大概只有1000*100 = 100000个不同的问题,这和10的30次方比起来优势是很明显的。而实际情况并不会出现那么多不同的问题,比如在金矿模型中,如果所有的金矿所需人口都是1000个人,那么问题总数大约只有100个。
非正式地,我们可以很容易得到动态规划所需时间,如果共有questionCount个相同的子问题,而每一个问题需要面对chooseCount种选择时,我们所需时间就为questionCount * chooseCount个常数。在金矿模型中,子问题最多有大概people * n 个(其中people是用于开采金矿的总人数,n是金矿的总数),因此questionCount = people * n,而就像国王需要考虑是采用左部下的结果还是采用右部下的结果一样,每个问题面对两个选择,因此chooseCount = 2,所以程序运行时间为 T = O(questionCount * chooseCount) =O(people * n),别忘了实际上需要的时间小于这个值,根据所遇到的具体情况有所不同。
这就是动态规划的魔力,它减少了大量的计算,因此我们需要动态规划!
----第三节----动态规划的思考角度----------
那么什么是动态规划呢?我个人觉得,如果一个解决问题的方法满足上面六个思考点中的前四个,那么这个方法就属于动态规划。而在思考动态规划方法时,后两点同样也是需要考虑的。
面对问题要寻找动态规划的方法,首先要清楚一点,动态规划不是算法,它是一种方法,它是在一件事情发生的过程中寻找最优值的方法,因此,我们需要对这件事情所发生的过程进行考虑。而通常我们从过程的最后一步开始考虑,而不是先考虑过程的开始。
打个比方,上面的挖金矿问题,我们可以认为整个开采过程是从西至东进行开采的(也就是从第0座开始),那么总有面对最后一座金矿的时候(第9座),对这座金矿不外乎两个选择,开采与不开采,在最后一步确定时再去确定倒数第二步,直到考虑第0座金矿(过程的开始)。
而过程的开始,也就是考虑的最后一步,就是边界。
因此在遇到一个问题想用动态规划的方法去解决时,不妨先思考一下这个过程是怎样的,然后考虑过程的最后一步是如何选择的,通常我们需要自己去构造一个过程,比如后面的练习。
----第四节----总结-------
那么遇到问题如何用动态规划去解决呢?根据上面的分析我们可以按照下面的步骤去考虑:
1、构造问题所对应的过程。
2、思考过程的最后一个步骤,看看有哪些选择情况。
3、找到最后一步的子问题,确保符合“子问题重叠”,把子问题中不相同的地方设置为参数。
4、使得子问题符合“最优子结构”。
5、找到边界,考虑边界的各种处理方式。
6、确保满足“子问题独立”,一般而言,如果我们是在多个子问题中选择一个作为实施方案,而不会同时实施多个方案,那么子问题就是独立的。
7、考虑如何做备忘录。
8、分析所需时间是否满足要求。
9、写出转移方程式。
----第五节----练习-------
题目一:买书
有一书店引进了一套书,共有3卷,每卷书定价是60元,书店为了搞促销,推出一个活动,活动如下:
如果单独购买其中一卷,那么可以打9.5折。
如果同时购买两卷不同的,那么可以打9折。
如果同时购买三卷不同的,那么可以打8.5折。
如果小明希望购买第1卷x本,第2卷y本,第3卷z本,那么至少需要多少钱呢?(x、y、z为三个已知整数)。
当然,这道题完全可以不用动态规划来解,但是现在我们是要学习动态规划,因此请想想如何用动态规划来做?
答案:
1、过程为一次一次的购买,每一次购买也许只买一本(这有三种方案),或者买两本(这也有三种方案),或者三本一起买(这有一种方案),最后直到买完所有需要的书。
2、最后一步我必然会在7种购买方案中选择一种,因此我要在7种购买方案中选择一个最佳情况。
3、子问题是,我选择了某个方案后,如何使得购买剩余的书能用最少的钱?并且这个选择不会使得剩余的书为负数。母问题和子问题都是给定三卷书的购买量,求最少需要用的钱,所以有“子问题重叠”,问题中三个购买量设置为参数,分别为i、j、k。
4、的确符合。
5、边界是一次购买就可以买完所有的书,处理方式请读者自己考虑。
6、每次选择最多有7种方案,并且不会同时实施其中多种,因此方案的选择互不影响,所以有“子问题独立”。
7、我可以用minMoney[i][j][k]来保存购买第1卷i本,第2卷j本,第3卷k本时所需的最少金钱。
8、共有x * y * z 个问题,每个问题面对7种选择,时间为:O( x * y * z * 7) =? O( x * y * z )。
9、用函数MinMoney(i,j,k)来表示购买第1卷i本,第2卷j本,第3卷k本时所需的最少金钱,那么有:
MinMoney(i,j,k)=min(s1,s2,s3,s4,s5,s6,s7),其中s1,s2,s3,s4,s5,s6,s7分别为对应的7种方案使用的最少金钱:
s1 = 60 * 0.95 + MinMoney(i-1,j,k)
s2 = 60 * 0.95 + MinMoney(i,j-1,k)
s3 = 60 * 0.95 + MinMoney(i,j,k-1)
s4 = (60 + 60) * 0.9 + MinMoney(i-1,j-1,k)
s5 = (60 + 60) * 0.9 + MinMoney(i-1,j,k-1)
s6 = (60 + 60) * 0.9 + MinMoney(i-1,j,k-1)
s7 = (60 + 60 + 60) * 0.85 + MinMoney(i-1,j-1,k-1)
----第六节----代码参考------
下面提供金矿问题的程序源代码帮助读者理解,并提供测试数据给大家练习。
输入文件名为“beibao.in”,因为这个问题实际上就是背包问题,所以测试数据文件名就保留原名吧。
输入文件第一行有两个数,第一个是国王可用用来开采金矿的总人数,第二个是总共发现的金矿数。
输入文件的第2至n+1行每行有两个数,第i行的两个数分别表示第i-1个金矿需要的人数和可以得到的金子数。
输出文件仅一个整数,表示能够得到的最大金子数。
输入样例:
100 5
77 92
22 22
29 87
50 46
99 90
输出样例:
133
参考代码如下:
/*
=========程序信息========
对应题目:01背包之金矿模型
使用语言:c++
使用编译器:Visual?Studio?.NET
使用算法:动态规划
算法运行时间:O(people?*?n)?[people是人数,n是金矿数]
作者:贵州大学05级?刘永辉
昵称:SDJL
编写时间:8月
联系QQ:44561907
E-Mail:44561907@qq.com
获得更多文章请访问我的博客:www.cnblogs.com/sdjl
如果发现BUG或有写得不好的地方请发邮件告诉我:)
请保留此部分信息:)
*/
#include?“stdafx.h”
#include?
#include?
using?namespace?std;
const?int?max_n?=?100;//程序支持的最多金矿数
const?int?max_people?=?10000;//程序支持的最多人数
int?n;//金矿数
int?peopleTotal;//可以用于挖金子的人数
int?peopleNeed[max_n];//每座金矿需要的人数
int?gold[max_n];//每座金矿能够挖出来的金子数
int?maxGold[max_people][max_n];//maxGold[i][j]保存了i个人挖前j个金矿能够得到的最大金子数,等于-1时表示未知
//初始化数据
void?init
{
ifstream?inputFile(“beibao.in”);
inputFile>>peopleTotal>>n;
for(int?i=0;?i
inputFile>>peopleNeed[i]>>gold[i];
inputFile.close();
for(int?i=0;?i<=peopleTotal;?i++)
for(int?j=0;?j
maxGold[i][j]?=?-1;//等于-1时表示未知?[对应动态规划中的“做备忘录”]
}
//获得在仅有people个人和前mineNum个金矿时能够得到的最大金子数,注意“前多少个”也是从0开始编号的
int?GetMaxGold(int?people,?int?mineNum)
{
//申明返回的最大金子数
int?retMaxGold;
//如果这个问题曾经计算过??[对应动态规划中的“做备忘录”]
if(maxGold[people][mineNum]?!=?-1)
{
//获得保存起来的值
retMaxGold?=?maxGold[people][mineNum];
}
else?if(mineNum?==?0)//如果仅有一个金矿时?[对应动态规划中的“边界”]
{
//当给出的人数足够开采这座金矿
if(people?>=?peopleNeed[mineNum])
{
//得到的最大值就是这座金矿的金子数
retMaxGold?=?gold[mineNum];
}
else//否则这唯一的一座金矿也不能开采
{
//得到的最大值为0个金子
retMaxGold?=?0;
}
}
else?if(people?>=?peopleNeed[mineNum])//如果给出的人够开采这座金矿?[对应动态规划中的“最优子结构”]
{
//考虑开采与不开采两种情况,取最大值
retMaxGold?=?max(GetMaxGold(people?-?peopleNeed[mineNum],mineNum?-1)?+?gold[mineNum],
GetMaxGold(people,mineNum?-?1));
}
else//否则给出的人不够开采这座金矿?[对应动态规划中的“最优子结构”]
{
//仅考虑不开采的情况
retMaxGold??=?GetMaxGold(people,mineNum?-?1);
}
//做备忘录
maxGold[people][mineNum]?=?retMaxGold;
return?retMaxGold;
}
int?_tmain(int?argc,?_TCHAR*?argv[])
{
//初始化数据
init();
//输出给定peopleTotal个人和n个金矿能够获得的最大金子数,再次提醒编号从0开始,所以最后一个金矿编号为n-1
cout< system(“pause”); return?0;