#include <ogdf/energybased/fmmm/Multilevel.h>
Public Member Functions | |
void | create_multilevel_representations (Graph &G, NodeArray< NodeAttributes > &A, EdgeArray< EdgeAttributes > &E, int rand_seed, FMMMOptions::GalaxyChoice galaxy_choice, int min_Graph_size, int rand_tries, Array< Graph * > &G_mult_ptr, Array< NodeArray< NodeAttributes > * > &A_mult_ptr, Array< EdgeArray< EdgeAttributes > * > &E_mult_ptr, int &max_level) |
The multilevel representations *G_mult_ptr/*A_mult_ptr/*E_mult_ptr for G/A/E are created. The maximum multilevel is calculated, too. | |
void | delete_multilevel_representations (Array< Graph * > &G_mult_ptr, Array< NodeArray< NodeAttributes > * > &A_mult_ptr, Array< EdgeArray< EdgeAttributes > * > &E_mult_ptr, int max_level) |
Free dynamically allocated memory. | |
void | find_initial_placement_for_level (int level, FMMMOptions::InitialPlacementMult init_placement_way, Array< Graph * > &G_mult_ptr, Array< NodeArray< NodeAttributes > * > &A_mult_ptr, Array< EdgeArray< EdgeAttributes > * > &E_mult_ptr) |
The initial placement of the nodes at multilevel level are created by the placements of the nodes of the graphs at the lower level (if init_placement_way is 0) or additionally using information of the actual level ( if init_placement_way == 1). Precondition: level < max_level. | |
Private Member Functions | |
void | calculate_mass_of_collapsed_nodes (Array< Graph * > &G_mult_ptr, Array< NodeArray< NodeAttributes > * > &A_mult_ptr, int act_level) |
The mass of all nodes at level act_level+1 is set to the mass of its dedicated solar_system at level act_level. | |
DPoint | calculate_position (DPoint P, DPoint Q, double dist_P, double dist_Q) |
Creates a waggled position on the line PQ, depending on dist_P and dist_Q needed in case init_placement_way() == 1. | |
void | collaps_solar_systems (Array< Graph * > &G_mult_ptr, Array< NodeArray< NodeAttributes > * > &A_mult_ptr, Array< EdgeArray< EdgeAttributes > * > &E_mult_ptr, int act_level) |
Using information generated in partition_galaxy_into_solar_systems we create the edge set of *G_mult_ptr[act_level+1] and for each node at act_level+1 the list of sun nodes of neighbouring sun systems and the corresponding lambda values. | |
void | create_all_placement_sectors (Array< Graph * > &G_mult_ptr, Array< NodeArray< NodeAttributes > * > &A_mult_ptr, Array< EdgeArray< EdgeAttributes > * > &E_mult_ptr, int level) |
The values of angle_1 and angle_2 that restrict the area of the placement for all nodes that are not adjacent to other solar systems are created for all nodes at multilevel level. | |
void | create_edges_edgedistances_and_lambda_Lists (Array< Graph * > &G_mult_ptr, Array< NodeArray< NodeAttributes > * > &A_mult_ptr, Array< EdgeArray< EdgeAttributes > * > &E_mult_ptr, EdgeArray< double > &new_edgelength, int act_level) |
The edges , new_edgelength and the lambda lists at level act_level+1 are created (the graph may contain parallel edges afterwards). | |
void | create_moon_nodes_and_pm_nodes (const Graph &G_mult, NodeArray< NodeAttributes > &A_mult, EdgeArray< EdgeAttributes > &E_mult) |
Partitions the nodes of G_mult that have not been assigned yet, to moon nodes of a nearest planet or pm node and identify this planet as a pm-node if this has not been done before. | |
DPoint | create_random_pos (DPoint center, double radius, double angle_1, double angle_2) |
Returns a random point with radius radius between angle_1 and angle_2. | |
void | create_suns_and_planets (Array< Graph * > &G_mult_ptr, Array< NodeArray< NodeAttributes > * > &A_mult_ptr, Array< EdgeArray< EdgeAttributes > * > &E_mult_ptr, int rand_seed, FMMMOptions::GalaxyChoice galaxy_choice, int random_tries, int act_level) |
The sun and planet nodes are created by choosing the sun nodes randomly with uniform or weighted probability (depending on galaxy_choice) | |
void | delete_parallel_edges_and_update_edgelength (Array< Graph * > &G_mult_ptr, Array< EdgeArray< EdgeAttributes > * > &E_mult_ptr, EdgeArray< double > &new_edgelength, int act_level) |
Parallel edges at level act_level+1 are deleted and the edgelength of the remaining edge is set to the average edgelength of all its parallel edges. | |
bool | edgenumbersum_of_all_levels_is_linear (Array< Graph * > &G_mult_ptr, int act_level, int &bad_edgenr_counter) |
This function returns true if act_level = 0 or if act_level >0 and the number of edges at the actual level is <= 80% of the number of edges of the previous level or if the actual edgenumber is >80% of the number of edges of the previous level, but bad_edgecounter is <= 5. In this case edgecounter is incremented. In all other cases false is returned. | |
DPoint | get_barycenter_position (List< DPoint > &L) |
Returns the barycenter position of all points in L (the mass of all point is regarded as equal). | |
DPoint | get_waggled_inbetween_position (DPoint s, DPoint t, double lambda) |
Returns roughtly the position s +lambda*(t-s) + some random waggling. | |
void | init_multilevel_values (const Graph &G_mult, NodeArray< NodeAttributes > &A_mult, EdgeArray< EdgeAttributes > &E_mult) |
Sets the default multilevel values for all nodes and edges in G_mult. | |
void | partition_galaxy_into_solar_systems (Array< Graph * > &G_mult_ptr, Array< NodeArray< NodeAttributes > * > &A_mult_ptr, Array< EdgeArray< EdgeAttributes > * > &E_mult_ptr, int rand_seed, FMMMOptions::GalaxyChoice galaxy_choice, int random_tries, int act_level) |
The nodeset(galaxy) of *G_mult_ptr[act_level] is partitioned in s,p,pm,m nodes. The dedicated s,p,pm,m nodes define a subgraph (called solar system). For each solar system a new node is created in *G_mult_ptr[act_level+1] and it is linked with the corresponding sun node at act_level; the mass of this node is set to the mass of the solar system. Additionally for each node in *G_mult_ptr [act_level] the dedicated sun node and the distance to its dedicates sun node is calculated. | |
void | set_initial_positions_of_planet_and_moon_nodes (int level, FMMMOptions::InitialPlacementMult init_placement_way, Array< Graph * > &G_mult_ptr, Array< NodeArray< NodeAttributes > * > &A_mult_ptr, Array< EdgeArray< EdgeAttributes > * > &E_mult_ptr, List< node > &pm_nodes) |
The initial positions of the planet/moon_nodes at level level are calculated here and a list of all pm_nodes is returned. | |
void | set_initial_positions_of_pm_nodes (int level, FMMMOptions::InitialPlacementMult init_placement_way, Array< NodeArray< NodeAttributes > * > &A_mult_ptr, Array< EdgeArray< EdgeAttributes > * > &E_mult_ptr, List< node > &pm_nodes) |
The initial positions of the pm nodes are calculated by the position of the dedicated sun and moon_nodes. | |
void | set_initial_positions_of_sun_nodes (int level, Array< Graph * > &G_mult_ptr, Array< NodeArray< NodeAttributes > * > &A_mult_ptr) |
The initial positions of all sun_nodes at level level are set. | |
Definition at line 47 of file Multilevel.h.
|
private |
The mass of all nodes at level act_level+1 is set to the mass of its dedicated solar_system at level act_level.
|
private |
Creates a waggled position on the line PQ, depending on dist_P and dist_Q needed in case init_placement_way() == 1.
|
private |
Using information generated in partition_galaxy_into_solar_systems we create the edge set of *G_mult_ptr[act_level+1] and for each node at act_level+1 the list of sun nodes of neighbouring sun systems and the corresponding lambda values.
|
private |
The values of angle_1 and angle_2 that restrict the area of the placement for all nodes that are not adjacent to other solar systems are created for all nodes at multilevel level.
|
private |
The edges , new_edgelength and the lambda lists at level act_level+1 are created (the graph may contain parallel edges afterwards).
|
private |
Partitions the nodes of G_mult that have not been assigned yet, to moon nodes of a nearest planet or pm node and identify this planet as a pm-node if this has not been done before.
void ogdf::energybased::fmmm::Multilevel::create_multilevel_representations | ( | Graph & | G, |
NodeArray< NodeAttributes > & | A, | ||
EdgeArray< EdgeAttributes > & | E, | ||
int | rand_seed, | ||
FMMMOptions::GalaxyChoice | galaxy_choice, | ||
int | min_Graph_size, | ||
int | rand_tries, | ||
Array< Graph * > & | G_mult_ptr, | ||
Array< NodeArray< NodeAttributes > * > & | A_mult_ptr, | ||
Array< EdgeArray< EdgeAttributes > * > & | E_mult_ptr, | ||
int & | max_level | ||
) |
The multilevel representations *G_mult_ptr/*A_mult_ptr/*E_mult_ptr for G/A/E are created. The maximum multilevel is calculated, too.
|
private |
Returns a random point with radius radius between angle_1 and angle_2.
|
private |
The sun and planet nodes are created by choosing the sun nodes randomly with uniform or weighted probability (depending on galaxy_choice)
void ogdf::energybased::fmmm::Multilevel::delete_multilevel_representations | ( | Array< Graph * > & | G_mult_ptr, |
Array< NodeArray< NodeAttributes > * > & | A_mult_ptr, | ||
Array< EdgeArray< EdgeAttributes > * > & | E_mult_ptr, | ||
int | max_level | ||
) |
Free dynamically allocated memory.
|
private |
Parallel edges at level act_level+1 are deleted and the edgelength of the remaining edge is set to the average edgelength of all its parallel edges.
|
private |
This function returns true if act_level = 0 or if act_level >0 and the number of edges at the actual level is <= 80% of the number of edges of the previous level or if the actual edgenumber is >80% of the number of edges of the previous level, but bad_edgecounter is <= 5. In this case edgecounter is incremented. In all other cases false is returned.
void ogdf::energybased::fmmm::Multilevel::find_initial_placement_for_level | ( | int | level, |
FMMMOptions::InitialPlacementMult | init_placement_way, | ||
Array< Graph * > & | G_mult_ptr, | ||
Array< NodeArray< NodeAttributes > * > & | A_mult_ptr, | ||
Array< EdgeArray< EdgeAttributes > * > & | E_mult_ptr | ||
) |
The initial placement of the nodes at multilevel level are created by the placements of the nodes of the graphs at the lower level (if init_placement_way is 0) or additionally using information of the actual level ( if init_placement_way == 1). Precondition: level < max_level.
Returns the barycenter position of all points in L (the mass of all point is regarded as equal).
|
private |
Returns roughtly the position s +lambda*(t-s) + some random waggling.
|
private |
Sets the default multilevel values for all nodes and edges in G_mult.
|
private |
The nodeset(galaxy) of *G_mult_ptr[act_level] is partitioned in s,p,pm,m nodes. The dedicated s,p,pm,m nodes define a subgraph (called solar system). For each solar system a new node is created in *G_mult_ptr[act_level+1] and it is linked with the corresponding sun node at act_level; the mass of this node is set to the mass of the solar system. Additionally for each node in *G_mult_ptr [act_level] the dedicated sun node and the distance to its dedicates sun node is calculated.
|
private |
The initial positions of the planet/moon_nodes at level level are calculated here and a list of all pm_nodes is returned.
|
private |
The initial positions of the pm nodes are calculated by the position of the dedicated sun and moon_nodes.
|
private |
The initial positions of all sun_nodes at level level are set.