布局#

template<typename vertex_t, typename edge_t, typename weight_t>
void force_atlas2(raft::handle_t const &handle, legacy::GraphCOOView<vertex_t, edge_t, weight_t> &graph, float *pos, const int max_iter = 500, float *x_start = nullptr, float *y_start = nullptr, bool outbound_attraction_distribution = true, bool lin_log_mode = false, bool prevent_overlapping = false, const float edge_weight_influence = 1.0, const float jitter_tolerance = 1.0, bool barnes_hut_optimize = true, const float barnes_hut_theta = 0.5, const float scaling_ratio = 2.0, bool strong_gravity_mode = false, const float gravity = 1.0, bool verbose = false, internals::GraphBasedDimRedCallback *callback = nullptr)#

ForceAtlas2 是一种连续图布局算法,便于网络可视化。

                                         NOTE: Peak memory allocation occurs at 17*V.
抛出:

cugraph::logic_error – 发生错误时。

模板参数:
  • vertex_t – 顶点标识符的类型。支持的值:int(有符号,32位)

  • edge_t – 边标识符的类型。支持的值:int(有符号,32位)

  • weight_t – 边权重的类型。支持的值:float 或 double。

参数:
  • handle – [in] 库句柄 (RAFT)。如果在句柄中设置了通信器,将选择多 GPU 版本。

  • graph – [in] cuGraph 图描述符,应包含以 COO 形式表示的连接信息。图被视为无向图。此算法使用边权重,默认为 1。

  • pos – [out] 设备数组 (2, n),包含 x 轴和 y 轴位置;

  • max_iter – [in] Force Atlas 2 运行的最大迭代次数。

  • x_start – [in] 设备数组,包含起始 x 轴位置;

  • y_start – [in] 设备数组,包含起始 y 轴位置;

  • outbound_attraction_distribution – [in] 沿着出边分布引力。枢纽吸引力较小,因此被推向边缘。

  • lin_log_mode – [in] 将 ForceAtlas 的模型从 lin-lin 切换到 lin-log(致敬 Andreas Noack)。使簇更紧凑。

  • prevent_overlapping – [in] 防止节点重叠。

  • edge_weight_influence – [in] 边权重的影响程度。0 表示“无影响”,1 表示“正常”。

  • jitter_tolerance – [in] 允许的摆动程度。建议不要超过 1。值越小,速度越慢,精度越高。

  • barnes_hut_optimize – [in] 是否使用 Barnes Hut 近似算法或较慢的精确版本。

  • barnes_hut_theta – [in] 介于 0 和 1 之间的浮点数。Barnes Hut 优化速度 (1) 与精度 (0) 之间的权衡。scaling_ratio – [in] 严格正的浮点数。排斥力的大小。值越大,图越稀疏。从常规模式切换到 LinLog 模式需要重新调整缩放参数。strong_gravity_mode – [in] 设置一种力,更强烈地吸引远离中心的节点。这种力非常强,有时会主导其他力。gravity – [in] 将节点吸引到中心。防止孤立的节点漂移。verbose – [in] 在每次迭代时输出收敛信息。callback – [in] GraphBasedDimRedCallback 类的一个实例,用于在训练期间截取位置的内部状态。