Python 3中的HyperVolume函数无法工作

3
基于一个在这里发现的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中的这个函数,但似乎存在同样的问题。
更新:我被要求提供具体的错误信息,所以我将记录它们随着解决而出现。
  1. 名称xrange未定义-通过替换为range修复
  2. TypeError:不可排序类型:Node() < Node()

我遇到了错误,请[编辑]您的问题并包含它们。 - user5547025
我可以做,但是会一个接一个地出错,并且我只能在解决问题后逐个发布... - undefined
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

我尝试在原地应用2to3(希望我做对了),https://gyazo.com/bf0816763e9d62a9bccef088bb3a3b69然而,当我运行主函数时,仍然出现相同的错误。 - undefined
@SilviuTofan:如果你不在2to3命令中加上-w选项,它将不会修改文件。请参考文档:"使用-w标志启用将更改写回文件"。 - user3657941
哦,对不起啊。我传递了-w参数,结果还是一样。但是当我手动把range改回xrange时,它确实修改了那个地方。但是函数本身还是正常工作的。可能是函数本身有什么问题吗?虽然这很不可能,因为参考资料似乎足够可靠。 - undefined
在使用python3hv3时,我没有遇到任何错误。听起来你仍然在使用2to3时遇到了问题。 - user3657941
我刚刚再次尝试了一下原始示例,现在确实可以工作了。只是对于我的现有算法来说还不起作用,所以我猜我得去弄清楚那个问题了。嗯,至少要试试看。非常感谢你的帮助! - undefined

1
使用2to3工具,将hv.py文件中的以下行替换以修复TypeError错误。

decorated.sort()

to

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

它应该像Python2一样工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接