Layout#
- 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 is a continuous graph layout algorithm for handy network visualization.
NOTE: Peak memory allocation occurs at 17*V.
- Throws:
cugraph::logic_error – when an error occurs.
- Template Parameters:
vertex_t – Type of vertex identifiers. Supported value : int (signed, 32-bit)
edge_t – Type of edge identifiers. Supported value : int (signed, 32-bit)
weight_t – Type of edge weights. Supported values : float or double.
- Parameters:
handle – [in] Library handle (RAFT). If a communicator is set in the handle, the multi GPU version will be selected.
graph – [in] cuGraph graph descriptor, should contain the connectivity information as a COO. Graph is considered undirected. Edge weights are used for this algorithm and set to 1 by default.
pos – [out] Device array (2, n) containing x-axis and y-axis positions;
max_iter – [in] The maximum number of iterations Force Atlas 2 should run for.
x_start – [in] Device array containing starting x-axis positions;
y_start – [in] Device array containing starting y-axis positions;
outbound_attraction_distribution – [in] Distributes attraction along outbound edges. Hubs attract less and thus are pushed to the borders.
lin_log_mode – [in] Switch ForceAtlas’ model from lin-lin to lin-log (tribute to Andreas Noack). Makes clusters more tight.
prevent_overlapping – [in] Prevent nodes from overlapping.
edge_weight_influence – [in] How much influence you give to the edges weight. 0 is “no influence” and 1 is “normal”.
jitter_tolerance – [in] How much swinging you allow. Above 1 discouraged. Lower gives less speed and more precision.
barnes_hut_optimize – [in] Whether to use the Barnes Hut approximation or the slower exact version.
barnes_hut_theta – [in] Float between 0 and 1. Tradeoff for speed (1) vs accuracy (0) for Barnes Hut only. @params[in] scaling_ratio Float strictly positive. How much repulsion you want. More makes a more sparse graph. Switching from regular mode to LinLog mode needs a readjustment of the scaling parameter. @params[in] strong_gravity_mode Sets a force that attracts the nodes that are distant from the center more. It is so strong that it can sometimes dominate other forces. @params[in] gravity Attracts nodes to the center. Prevents islands from drifting away. @params[in] verbose Output convergence info at each interation. @params[in] callback An instance of GraphBasedDimRedCallback class to intercept the internal state of positions while they are being trained.