1700530624
1700530625
ii)在解决数学定理问题的情境下,这一步违背了定理。
1700530626
1700530627
iii)在艺术创作程序的情境下(比如用计算机作诗或者谱曲),这一步与下一个词或音符不匹配。
1700530628
1700530629
如果此时这种解决方案被判定会走入死胡同,程序的回归值则为失败。
1700530630
1700530631
·若递归扩展至此节点时,问题既未得到解决也没有走入死胡同,则判断是否终止递归继续扩展。这是设计中十分关键的一步,需要考虑到我们可消耗在计算机上的时间有限,比如:
1700530632
1700530633
i)在博弈情境下(比如国际象棋),这一步可让我方足够“领先”或“落后”。进行这一步判断时或许无法像前两种情况那般直截了当,但又是设计中非常重要的一步。所幸一些简单的方法(比如棋子价值的简单相加)仍能提供不错的结果。如果该程序判定我方已经遥遥领先,那么“挑选最优行动方案”将返回至判断棋局获胜的那一步(即返回值为成功);如果该程序判定我方已远远落后,那么“挑选最优行动方案”将返回至判断棋局走入死胡同的那一步(即返回值为失败)。
1700530634
1700530635
ii)在解决数学定理问题的情境下,这一步需要判断证明中的一连串步骤是否无法被论证。如果是这样,则此种论证无效,“挑选最优行动方案”将返回至判断违背定理的那一步(即返回值为失败)。这种情境下,不存在“类似成功”的对等值,直到该数学问题被确确实实地解决之后,我们才能返回成功。这就是数学的本质。
1700530636
1700530637
iii)在艺术创作程序的情境下(比如用计算机作诗或者谱曲),这一步需要判断步骤的排列顺序(如诗歌中的词,歌曲中的音符)是否无法满足下一步的需求。如果是,则此种选择无效,“挑选最优行动方案”将返回至判断无法匹配下一个词或音符的那一步(即返回值为失败)。
1700530638
1700530639
·如果“挑选最优行动方案”还未返回(因为此时程序既未判定成功还是失败,也未判定在此节点是否终止该递归),那么此时我们还没有脱离递归的后续扩展。在这种情况下,我们就要列出此节点下会出现的所有可能步骤。此时就需要介入问题的详细精确说明了:
1700530640
1700530641
i)在博弈情境下,问题说明包括在当前棋盘下为我方生成所有可移动的走步,要实现此生成就需要对棋局对弈规则的整理和编辑。
1700530642
1700530643
ii)在证明数学定理情境下,问题说明包括罗列出解决方案中在该节点所有可能用到的公理和已被证明过的定理。
1700530644
1700530645
iii)在计算机艺术创作程序情境下,问题说明包括罗列出在该节点所有可选的词/音符/线条。
1700530646
1700530647
对每一种可能的下一步:
1700530648
1700530649
i)假设执行该步骤,进而据此创设一个执行后会出现的情景。博弈中,这意味着一张假设的棋盘;定理证明中,这意味着把此步骤(比如公理)设为论据;艺术创作程序中,这意味着添加该词/音符/线条。
1700530650
1700530651
ii)现在让“挑选最优行动方案”来检测这种假设情境。此时当然还是递归发挥作用的时候,因为程序在不断启动自身。
1700530652
1700530653
iii)如果上述启动“挑选最优行动方案”程序的返回值为成功,那么我们现在所在的“挑选最优行动方案”步骤的返回值也为成功。否则就考虑下一种可能的步骤,以此类推。
1700530654
1700530655
如果将所有可能的下一步都考虑过后,仍没有找到可以使“挑选最优行动方案”的回归值为成功的那一步,那么我们现在所在的“挑选最优行动方案”步骤的回归值则为失败。
1700530656
1700530657
挑选最优行动方案结束
1700530658
1700530659
如果一开始启动“挑选最优行动方案”的回归值为成功,那么它也会返回正确的步骤顺序值:
1700530660
1700530661
i)在博弈情境下,该顺序值中的第一项即为你下一步该走的棋。
1700530662
1700530663
ii)在证明数学定理情境下,该顺序值的全部内容即为证明过程。
1700530664
1700530665
iii)在计算机艺术创作程序情境下,该顺序值即为你的艺术创作品。
1700530666
1700530667
如果一开始启动“挑选最优行动方案”回归值为失败,那就需要重新回到初始规划阶段。
1700530668
1700530669
关键设计决策
1700530670
1700530671
在上述简单的模式中,递归算法的设计者需要在一开始就做下列决定:
1700530672
1700530673
·递归算法的关键在于“挑选最优行动方案”,判断何时终止递归扩展。当程序已明确取得成功值或失败值时,做出该判断很容易(比如,国际象棋中的将军,或者数学中的必要解题条件或组合最优化问题。若还未出现明显的成功或失败值,那就更困难一些。在出现定义明确的结果前需要终止一些查询指令,否则程序可能会运行几十亿年(或至少会耗尽你的计算机资源)。
[
上一页 ]
[ :1.700530624e+09 ]
[
下一页 ]