有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何平衡图形中的循环?

考虑此图:

enter image description here

第二个图像(括号中带有权重)是“平衡的”,即每个节点向其他节点发送正确的权重,并且结束节点与开始节点具有相同的权重

现在假设我的图是空的(边知道要发送给其他节点的权重百分比,但图中还没有权重)。如果我将开始节点的权重设置为20,如何使结束图如第二幅图所示保持平衡?在我看来,我应该递归地更新图表,直到每个节点中的权重保持不变,但这是最好的方法吗

编辑:下面是我正在进行的项目中与这个问题相关的Java代码,如果它能帮助别人的话。我知道这段代码中没有关于某些函数的信息,但你应该了解全局

注意:许多变量名是法语的,下面是其中一些变量名的快速翻译:
nb_站点:节点数量
m_ListStations:所有节点的列表
ID_ARRIVEE:开始节点的ID(图中的“开始”)
研究:图表
poids:重量
弧:边缘

// build the distribution matrix
public float[] buildDistribution() {
    int nb_stations = m_listeStations.size();
    float[] distribution = new float[nb_stations];
    Arrays.fill(distribution, 0);
    distribution[findIndexStation(findStation(Reseau.ID_ARRIVEE))] = findStation(Reseau.ID_ARRIVEE).getPoids();
    return distribution;
}

// build the transition matrix
public float[][] buildTransition() {
    int nb_stations = m_listeStations.size();
    float[][] transition = new float[nb_stations][nb_stations];
    for (float[] ligne : transition) {
        Arrays.fill(ligne, 0);
    }

    for (int i = 0; i < nb_stations; ++i) {
        List<Arc> arcsOut = m_listeStations.get(i).getArcsOut();
        for (int j = 0; j < arcsOut.size(); ++j) {
            transition[i][findIndexStation(arcsOut.get(j).getCible())] = arcsOut.get(j).getPoidsRelatif();
        }
    }

    int indexArrivee = findIndexStation(findStation(Reseau.ID_ARRIVEE));
    transition[indexArrivee][indexArrivee] = 1; // arrivée continuelle

    return transition;
}

// this function does one iteration of distribution*transition to converge toward the real weights
public float[] convergeDistribution(float[] in_distribution, float[][] in_transition) {
    int nb_stations = m_listeStations.size();
    float[] converge = new float[nb_stations];
    Arrays.fill(converge, 0);
    for (int i = 0; i < nb_stations; ++i) {
        for (int j = 0; j < nb_stations; ++j) {
            converge[i] += in_distribution[j] * in_transition[j][i];
        }
    }
    return converge;
}

共 (1) 个答案

  1. # 1 楼答案

    你的图形就是所谓的Markov chain。你想要找到的是马尔可夫链的stationary distribution

    如果p是你的转移矩阵,平稳分布x是方程x*p=x的解

    讨论了收敛速度here

    一旦你有了平稳分布,你就可以很容易地解决你描述的问题。根据平稳分布和转移矩阵,只需在一个节点/边上固定权重,然后所有其他节点/边的权重都与之成比例