Java 如何以图形方式模拟K-Means算法的结果?

Java 如何以图形方式模拟K-Means算法的结果?,java,algorithm,simulation,k-means,Java,Algorithm,Simulation,K Means,我是巴黎计算机科学系的学生。在数学方面,今年我们必须使用K-means算法来解决一个问题(应用于自助自行车站再补给的集群容量车辆路径问题)。这是我的算法: public void run() { boolean hasConverged = false; List<Integer> nearestClusters = null; //A list used to check if the nearestClusters list has evolved

我是巴黎计算机科学系的学生。在数学方面,今年我们必须使用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;
    }
}
public void run(){
布尔hasConverged=false;
列出最近的集群=空;
//用于检查最近簇列表是否已演变的列表
//如果不是这样,则该算法已完成
List previousList=新建ArrayList();
//簇质心的随机初始化
对于(int i=0;i
然而,我想展示我的算法和形成的集群的结果,我在互联网上发现了这项工作:

我在我的项目中导入了类ClusterGenerator,它创建了集群以及随机元素、类项、类图形(我没有在那里碰任何东西)和初始化所有图形元素的类主窗口

我没有设法显示绘图,Eclipse中没有任何错误可以给我任何线索

有人能给我解释一下问题出在哪里吗


感谢

问题在于,我的算法正在为站点生成群集,但我没有配置类图形(我后来理解这对显示非常重要)以正确渲染我的点。因为,我使用纬度和经度作为我的站的坐标,我必须把这些坐标放在窗口的刻度上。我是这样做的(使用交叉乘法):我计算图中两个单位之间的“间隙”,并添加一个调整,因为我不是从零开始的

double gapX = (this.getWidth() - 2 * edgeSpace) / (topX-bottomX+1); 
int adjustmentX =(int) (-bottomX*gapX);

(getWidth()给出面板的实际宽度,其中是图形,edgespace是图形和面板边缘之间的填充空间,topX是坐标的最大值,bottomX是最小值)

由于这是一个eclipse项目,我建议您只需获取源文件夹并自己创建项目即可。项目与他的配置文件保持原样。使用Java1.8,这就是他正在使用的。另外:你的问题标题和问题中的问题是两个完全不同的东西!引用的程序同步错误;任何结果都是可能的;看见另外,“Swing程序应该重写
paintComponent()
,而不是重写
paint()。我编辑了它。谢谢你的回答。这是我第一次在Java中使用图形界面。所以我不知道我的程序没有正确同步是什么意思。我怎样才能使它同步?@MichelRahal看起来好多了,谢谢你的更新。我建议改进的其他方面是:1)你的第三段内容非常密集,读起来像一堵文字墙;2)可能删除注释掉的代码(这很重要,还是过时了?),3)修复第二和第三个代码块中的代码缩进,4)我基本上可以理解你在代码中使用法语的意思,但你可能还是想把所有内容翻译成英语。不幸的是,我没有你正在使用的UI设置的经验,但我希望你能找到你想要的答案。