使用字典最大化功能,受到KeyError的挫败

时间:2020-05-01 08:43:36

标签: python dictionary

我有一个来自f:[0,infty)-> R的函数。我正在尝试使用以下算法在Python中编写代码以使其最大化(代码假定最大值出现在10之前;但这没关系。在我实际需要的示例中,这太过分了:

  1. 创建一个空字典来存储函数值。从left = 0,right = 10开始。
  2. 让d = right-left
  3. 形成集合{left,left + d / 10,left + 2d / 10,... right}。对于集合中的每个点x,计算f(x)并将其添加到字典中(如果尚不存在的话)。
  4. 从词典中查找上一步中找到的f(x)的11个值,然后选择最高的一个。 x的对应值将是我们的临时最大值;称为x *。
  5. 我们需要更新间隔[left,right]。它可以是[x *,x * + d / 10]或[x * -d / 10,x *]。如果x *是旧的左端点或旧的右端点,我们别无选择。如果x *都不是,则查找f(x * -d / 10)和f(x * + d / 10)并选择其中较大的间隔。
  6. 重复指定次数2-5次(我尝试过9次)

不幸的是,当我尝试运行此命令时,我得到了KeyError: 0.6023199999999999。我认为这意味着Python尝试在0.6023199999999999处访问字典,但在那里找不到条目。显然那是不对的。可能是,Python应该尝试访问0.60232,但是错误地将其“四舍五入”为0.6023199999999999。

肯定有一种无需使用字典即可​​完成此操作的方法。但是这种方式看起来很优雅。它提供了我制作图表所需的一切,这些图表显示了沿途测试的值,因此我可以直观地看到进度。所以我想如果我能使它工作。

为什么Python被10除以绊倒?我该如何预防呢?

谢谢

0 个答案:

没有答案
相关问题