1

基于此处找到的 HyperVolume 函数(直接下载链接),我正在尝试为我的算法返回超容量指标。但是,甚至测试代码都不起作用:

from hv import HyperVolume
referencePoint = [2, 2, 2]
hyperVolume = HyperVolume(referencePoint)
front = [[1, 0, 1], [0, 1, 0]]
result = hyperVolume.compute(front)

我收到的错误似乎与我使用的是 Python 3 相关,而函数本身使用的是 Python 2。有没有办法解决这个问题?Python 3 中是否实现了类似的功能?

我也在deap 中看过这个,但似乎有同样的问题。

LE:有人问我具体的错误,所以我会在解决问题时记录下来

  1. 名称 xrange 未定义 - 通过替换为 range 来修复
  2. TypeError:不可排序的类型:Node() < Node()
4

2 回答 2

1

使用 2to3 将 hv.py 转换为 hv3.py:

$ 2to3 hv.py > hv3.py.patch
$ cp hv.py hv3.py
$ patch < hv3.py.patch

然后将您的导入行更改为

from hv3 import HyperVolume

如果要2to3更改修改原始文件,则需要传递-w选项,如文档所示

$ 2to3 -w hv.py
于 2016-06-27T15:43:35.933 回答
0

使用 2to3 并替换 hv.py 的以下行来修复 TypeError:

decorated.sort()

sorted(decorated, key=lambda n: n[0])

它应该像 python2 一样工作。

于 2018-05-10T09:29:25.740 回答