Layout#
- template<typename vertex_t, typename edge_t, typename weight_t>
void force_atlas2(raft::handle_t const &handle, raft::random::RngState &rng_state, 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, float *vertex_radius_values = nullptr, const float overlap_scaling_ratio = 100.0, 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, float *vertex_mobility_values = nullptr, float *vertex_mass_values = nullptr, 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.
rng_state – [in] The RngState instance holding pseudo-random number generator state.
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.
vertex_radius_values – [in] Radius of each vertex, used when prevent_overlapping is set.
overlap_scaling_ratio – [in] When prevent_overlapping is set, scales the repulsion force between two nodes that are 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.
scaling_ratio – [in] 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.
strong_gravity_mode – [in] 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.
gravity – [in] Attracts nodes to the center. Prevents islands from drifting away.
vertex_mobility_values – [in] Device array containing mobility of each vertex (scaling factor for the displacement at each iteration).
vertex_mass_values – [in] Device array containing mass of each vertex
verbose – [in] Output convergence info at each interation.
callback – [in] An instance of GraphBasedDimRedCallback class to intercept the internal state of positions while they are being trained.