【问题标题】:Traveling Salesman for javajava的旅行推销员
【发布时间】:2015-04-28 01:19:20
【问题描述】:

基于这个伪代码,我正在尝试为旅行推销员问题实现一个 java fittness 函数,但我不确定我是否做得对,有人可以帮帮我。

N   The number of cities to visit
T   A tour (list of integers of size N)
D   An N by N matrix containing each d(i,j)

Let s = 0
For i = 1 to (N-1)
Let a = ti
Let b = ti+1
Let s = s + d(a,b)
 End For
     Let end_city = tn
     Let start_city = t1
     Let s = s + d(end_city,start_city)
The tour length s

我尝试用java写这个

public static ArrayList<Integer> Fitness(){
    int n = 10; // Number of cities to visit
    ArrayList<Integer> t = new ArrayList<Integer>();
    int[][] d = null;
    int s = 0, a, b;

    for (int i = 1; i<n; i++){
        for (int j = 1; j<n; j++){
            d = new int[i][j];
        }

        for( i = 1; i<n; i++){
            a = t.get(i);
            b = t.get(i+1);
            s = s + d[a][b];
        }
        int end_city = t.get(n);
        int start_city = t.get(1);
        s = s + d[end_city][start_city];
    }
    return t;

谁能帮帮我。谢谢。

【问题讨论】:

  • 注意——java中的数组索引是从0开始的,详见tutorial

标签: java arraylist traveling-salesman


【解决方案1】:

你应该开始决定你拥有什么你想要什么


你有什么

对于旅行商问题的适应度函数,根据您的伪代码,您将有以下输入。

  • 城市数量
  • 要计算适合度的游览
  • 带有距离的地图(在本例中为邻接矩阵)。

这应该是您的适应度函数的形式参数


你想要什么

适应度函数的目的是提供一种根据单个参数来衡量质量的方法。

在这种情况下,长度就是为了这个目的。

这应该是您的适应度函数的返回值


这使得原型你的健身功能如下

public double fitness(List<Integer> tour,
                      int numberOfCities,
                      double[][] distanceBetween);

现在,如果您正确缩进并再看一遍,则正文的伪代码很容易解码。

Let s = 0
For i = 1 to (N-1)
    Let a = ti
    Let b = ti+1
    Let s = s + d(a,b)
End For
Let end_city = tn
Let start_city = t1
Let s = s + d(end_city,start_city)
The tour length s

剩下的应该很容易解决。将其翻译成 Java 非常简单。

祝你好运。

【讨论】:

  • 由于伪代码尽可能避免指定类型,因此您必须自己解决。在这种情况下,所有这些变量都表示距离。所以它们将是double 类型的变量。一般情况下,Let 表示为变量赋值。
  • 检查是否导入了List以外的java.util.List类。
  • 谢谢,我错过了那个导入。
  • 矩阵就是我在原型中提到的二维数组distanceBetween。当您在与要计算距离的两个城市相对应的两个索引处访问它的值时,它会为您提供距离。
  • 你已经正确地完成了那部分,但你不应该在方法中创建数组。数组应该作为参数传递给方法。
猜你喜欢
  • 1970-01-01
  • 2011-09-08
  • 1970-01-01
  • 2017-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-24
  • 1970-01-01
相关资源
最近更新 更多