我是巴黎计算机科学专业的学生。在今年的数学中,我们必须使用K-means算法来解决问题(适用于自助式自行车站补给的集群电容车辆路径问题)。这是我的算法:
public void run() {
boolean hasConverged = false;
List<Integer> nearestClusters = null;
//A list used to check if the nearestClusters list has evolved
//If it isn't the case, the algorithm is finish
List<Integer> previousList = new ArrayList<Integer>();
//Random initialization of the clusters' centroids
for (int i = 0; i < clustersNumber; ++i) {
clusters.add(ClusterGenerator.Generate(stationsList,colorList.get(i) ,latMin, latMax, lngMin, lngMax));
}
while (!hasConverged) {
if (nearestClusters != null) {
previousList.clear();
previousList.addAll(nearestClusters);
}
nearestClusters= new ArrayList<Integer>();
//Each point is connected to it nearest cluster
for (int j = 0; j < stationsList.size(); ++j) {
nearestClusters.add(getIndexOfTheNearestCluster(stationsList.get(j)));
}
//We move the clusters centroids to the center of the points they are connected to
for (int k = 0; k < clusters.size(); ++k) {
clusters.get(k).setCentre(stationsCenters(getStationsOfCluster(clusters.get(k), nearestClusters)));
}
if (!nearestClusters.isEmpty() && previousList.equals(nearestClusters))
hasConverged = true;
}
}
然而,我想用形成的集群展示算法的结果,我在互联网上发现了这项工作:https://github.com/ertugrulozcan/K-Means-Simulation
我在我的项目中导入了ClusterGenerator类,它创建了簇以及随机元素,类Item,类Graphic(我没有触及任何东西)和MainWindow类,它启动所有图形元素。
我没有设法显示这些情节,Eclipse中没有错误可以给我任何线索。
有人可以向我解释问题在哪里吗?
由于
答案 0 :(得分:1)
问题是我的算法是为站点生成集群但是我没有配置类Graphic(后面我才明白这对显示来说非常重要)来正确渲染我的点。因为,我使用纬度和经度作为我的电台的坐标,我不得不把这些坐标放到窗口的比例。这是我如何做到的(使用交叉乘法):我计算&#34;间隙&#34;在图表中的两个单位之间添加了一个调整因为我不是从零开始。
double gapX = (this.getWidth() - 2 * edgeSpace) / (topX-bottomX+1);
int adjustmentX =(int) (-bottomX*gapX);
(getWidth()给出面板的实际宽度,其中是图形,边缘空间是图形和面板边缘之间的填充空间,topX是坐标的最大值,bottomX是最小值)