首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java:本地搜索TSP错误

Java:本地搜索TSP错误
EN

Stack Overflow用户
提问于 2011-08-28 18:12:11
回答 1查看 1.1K关注 0票数 0

我在java中为TSP编写了一个简单的本地搜索算法。下面是一个方法:

代码语言:javascript
复制
public Permutation localSearch(Permutation best, int maxnoimprov) {
    int count = 0 ;
    Permutation candidate;
    do {
        candidate = stochastic_2_opt(best);
        count = (candidate.getLength() < best.getLength()) ? 0 : count+1;
        if (candidate.getLength() < best.getLength()) {
            best=candidate;
        }
        System.out.print("Candidate "); candidate.showPermutation(); System.out.println(" Current best: "+best.getLength());
    } while (count<maxnoimprov);
    return best;
}

问题是if语句始终为true,因此当运行该方法时,输出如下所示:

....3,34,43,32,}长度: 30464.0电流最佳: 30464.0

....14,37,24,49,}长度: 31499.0电流最佳: 31499.0

....8,4,20,42,}长度: 30710.0电流最佳: 30710.0

....23,33,12,6,}长度: 29321.0电流最佳: 29321.0

....11,32,28,15,}长度: 30545.0电流最佳: 30545.0 ....11

正如你所看到的,“最好的”总是被“候选人”所取代,而它不应该。

在我看来,我的代码很好,但显然有些地方出了问题。

备注:

1)我检查了stochastic_2_opt()方法,没有问题。

2) getLength()方法返回双值,因此我认为这可能是一个陷阱,我使用了Double.compare,但即使这样也不起作用。

3)我还注意到,当将if-条件写为(candidate.getLength() < best.getLength())时,也总是正确的。

你能帮我找出哪里出错了吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-08-28 19:02:53

我怀疑保持长度的Permutation成员变量是一个静态变量;这可以很好地解释结果。然后,当stochastic_2_opt()创建候选时,它也会不经意地设置best的长度。在这种情况下,您认为if始终是正确的,这是一种“鲱鱼”;if将计算为false,但您仍然会得到相同的结果。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7222897

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档