2018-01-12 21:47:58 +01:00
< HTML >
<!--
Copyright (c) 2004 Trustees of Indiana University
2021-10-05 21:37:46 +02:00
2018-01-12 21:47:58 +01:00
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or copy at
http://www.boost.org/LICENSE_1_0.txt)
-->
< Head >
< Title > Boost Graph Library: Gü rsoy-Atun Layout< / Title >
< script language = "JavaScript" type = "text/JavaScript" >
<!--
function address(host, user) {
var atchar = '@';
var thingy = user+atchar+host;
thingy = '< a hre ' + ' f = ' + "mai" + "lto:" + thingy + ' > ' + user+atchar+host + '< / a > ';
document.write(thingy);
}
//-->
< / script >
< / head >
2021-10-05 21:37:46 +02:00
< BODY BGCOLOR = "#ffffff" LINK = "#0000ee" TEXT = "#000000" VLINK = "#551a8b"
ALINK="#ff0000">
< IMG SRC = "../../../boost.png"
ALT="C++ Boost" width="277" height="86">
2018-01-12 21:47:58 +01:00
< BR Clear >
< H1 >
< TT > gursoy_atun_layout< / TT >
< / H1 >
< P >
< h3 > Synopsis< / h3 >
< PRE >
< em > // Non-named parameter version< / em >
template< typename VertexListAndIncidenceGraph, typename Topology,
2021-10-05 21:37:46 +02:00
typename PositionMap, typename VertexIndexMap,
2018-01-12 21:47:58 +01:00
typename EdgeWeightMap>
void
gursoy_atun_layout(const VertexListAndIncidenceGraph& g,
const Topology& space,
PositionMap position,
int nsteps = num_vertices(g),
double diameter_initial = sqrt((double)num_vertices(g)),
double diameter_final = 1,
double learning_constant_initial = 0.8,
double learning_constant_final = 0.2,
VertexIndexMap vertex_index_map = get(vertex_index, g),
EdgeWeightMap weight = dummy_property_map());
< em > // Named parameter version< / em >
template< typename VertexListAndIncidenceGraph, typename Topology,
typename PositionMap, typename P, typename T, typename R>
2021-10-05 21:37:46 +02:00
void
gursoy_atun_layout(const VertexListAndIncidenceGraph& g,
2018-01-12 21:47:58 +01:00
const Topology& space,
PositionMap position,
const bgl_named_params< P,T,R> & params = < em > all defaults< / em > );
< / PRE >
< h3 > Description< / h3 >
< P > This algorithm [< A HREF = "bibliography.html#gursoy00" > 60< / A > ]
performs layout of directed graphs, either weighted or unweighted. This
algorithm is very different from the < a
href="kamada_kawai_spring_layout.html">Kamada-Kawai< / a > and < a
href="fruchterman_reingold.html">Fruchterman-Reingold< / a > algorithms,
because it does not explicitly strive to layout graphs in a visually
pleasing manner. Instead, it attempts to distribute the vertices
uniformly within a < em > topology< / em > (e.g., rectangle, sphere, heart shape),
keeping vertices close to their neighbors; < a href = "topology.html" > various
topologies< / a > are provided by BGL, and users can also create their own. The
algorithm itself is
based on < a
href="http://davis.wpi.edu/~matt/courses/soms/">Self-Organizing
Maps< / a > .
< p >
< a href = "topology.html#square_topology" > < img src = "figs/ga-square.png" > < / a >
< a href = "topology.html#heart_topology" > < img src = "figs/ga-heart.png" > < / a >
< a href = "topology.html#circle_topology" > < img src = "figs/ga-circle.png" > < / a >
< / p >
< h3 > Where Defined< / h3 >
< a href = "../../../boost/graph/gursoy_atun_layout.hpp" > < tt > boost/graph/gursoy_atun_layout.hpp< / tt > < / a >
< h3 > Parameters< / h3 >
2021-10-05 21:37:46 +02:00
IN: < tt > const Graph& g< / tt >
2018-01-12 21:47:58 +01:00
< blockquote >
The graph object on which the algorithm will be applied. The type
< tt > Graph< / tt > must be a model of < a
href="./VertexAndEdgeListGraph.html">Vertex List Graph< / a > and < a
href="IncidenceGraph.html">Incidence Graph< / a > .
< / blockquote >
IN: < tt > const Topology& space< / tt >
< blockquote >
The topology on which the graph will be laid out. The type must
model the < a href = "topology.html#topology-concept" > Topology< / a > concept.
< / blockquote >
OUT: < tt > PositionMap position< / tt >
< blockquote >
The property map that stores the position of each vertex. The type
< tt > PositionMap< / tt > must be a model of < a
href="../../property_map/doc/LvaluePropertyMap.html">Lvalue Property
Map< / a > such that the vertex descriptor type of < tt > Graph< / tt > is
convertible to its key type. Its value type must be
< tt > Topology::point_type< / tt > .
< / blockquote >
IN: < tt > int nsteps< / tt >
< blockquote >
The number of iterations to perform.< br >
< b > Default< / b > : < tt > num_vertices(g)< / tt >
< / blockquote >
IN: < tt > double diameter_initial< / tt >
< blockquote >
When a vertex is selected to be updated, all vertices that are
reachable from that vertex within a certain diameter (in graph
terms) will also be updated. This diameter begins at
< tt > diameter_initial< / tt > in the first iteration and ends at
< tt > diameter_final< / tt > in the last iteration, progressing
exponentially. Generally the diameter decreases, in a manner similar to
the cooling schedule in < a
href="fruchterman_reingold.html">Fruchterman-Reingold< / a > . The
diameter should typically decrease in later iterations, so this value
should not be less than < tt > diameter_final< / tt > .< br >
< b > Default< / b > : < tt > sqrt((double)num_vertices(g))< / tt >
< / blockquote >
IN: < tt > double diameter_final< / tt >
< blockquote >
The final value of the diameter.< br >
< b > Default< / b > : 1.0
< / blockquote >
IN: < tt > double learning_constant_initial< / tt >
< blockquote >
The learning rate affects how far vertices can moved to rearrange
themselves in a given iteration. The learning rate progresses
linearly from the initial value to the final value, both of which
should be between 0 and 1. The learning rate should typically
decrease, so the initial value should not exceed the final
value.< br > < b > Default< / b > : 0.8
< / blockquote >
IN: < tt > double learning_constant_final< / tt >
< blockquote >
The final learning rate constant.< br >
< b > Default< / b > : 0.2
< / blockquote >
2021-10-05 21:37:46 +02:00
IN: < tt > VertexIndexMap vertex_index_map< / tt >
2018-01-12 21:47:58 +01:00
< blockquote >
This maps each vertex to an integer in the range < tt > [0,
num_vertices(g))< / tt > . This is only necessary when no
2021-10-05 21:37:46 +02:00
displacement map is provided.
2018-01-12 21:47:58 +01:00
The type < tt > VertexIndexMap< / tt > must be a model of < a
href="../../property_map/doc/ReadablePropertyMap.html">Readable Property
Map< / a > . The value type of the map must be an integer type. The
vertex descriptor type of the graph needs to be usable as the key
type of the map.< br >
< b > Default:< / b > < tt > get(vertex_index, g)< / tt >
Note: if you use this default, make sure your graph has
an internal < tt > vertex_index< / tt > property. For example,
< tt > adjacency_list< / tt > with < tt > VertexList=listS< / tt > does
not have an internal < tt > vertex_index< / tt > property.
< / blockquote >
2021-10-05 21:37:46 +02:00
IN: < tt > EdgeWeightMap weight< / tt >
2018-01-12 21:47:58 +01:00
< blockquote >
This maps each edge to a weight.
The type < tt > EdgeWeightMap< / tt > must be a model of < a
href="../../property_map/doc/ReadablePropertyMap.html">Readable Property
Map< / a > . The value type of the map must be an floating-point type
compatible with < tt > double< / tt > . The edge descriptor type of the
graph needs to be usable as the key type of the map. When this map
is a < tt > dummy_property_map< / tt > , the algorithm assumes the graph is
unweighted.< br >
< b > Default:< / b > < tt > dummy_property_map()< / tt >
< / blockquote >
< h3 > Named Parameters< / h3 >
IN: < tt > iterations(int n)< / tt >
< blockquote >
Executes the algorithm for < em > n< / em > iterations.< br >
< b > Default:< / b > < tt > num_vertices(g)< / tt >
< / blockquote >
IN: < tt > diameter_range(std::pair< T , T > range)< / tt >
< blockquote >
Range specifying the parameters (< tt > diameter_initial< / tt > , < tt > diameter_final< / tt > ). < br >
< b > Default:< / b > < tt > std::make_pair(sqrt((double)num_vertices(g)), 1.0)< / tt >
< / blockquote >
IN: < tt > learning_constant_range(std::pair< T , T > range)< / tt >
< blockquote >
Range specifying the parameters (< tt > learning_constant_initial< / tt > , < tt > learning_constant_final< / tt > ). < br >
< b > Default:< / b > < tt > std::make_pair(0.8, 0.2)< / tt >
< / blockquote >
IN: < tt > edge_weight(EdgeWeightMap weight)< / tt >
< blockquote >
Equivalent to the non-named < tt > weight< / tt > parameter.< br >
< b > Default:< / b > < tt > dummy_property_map()< / tt >
< / blockquote >
2021-10-05 21:37:46 +02:00
IN: < tt > vertex_index_map(VertexIndexMap i_map)< / tt >
2018-01-12 21:47:58 +01:00
< blockquote >
Equivalent to the non-named < tt > vertex_index_map< / tt > parameter.< br >
< b > Default:< / b > < tt > get(vertex_index, g)< / tt >
Note: if you use this default, make sure your graph has
an internal < tt > vertex_index< / tt > property. For example,
< tt > adjacency_list< / tt > with < tt > VertexList=listS< / tt > does
not have an internal < tt > vertex_index< / tt > property.
< / blockquote >
< br >
< HR >
< TABLE >
< TR valign = top >
< TD nowrap > Copyright © 2004 Trustees of Indiana University< / TD > < TD >
Jeremiah Willcock, Indiana University (< script language = "Javascript" > address ( "osl.iu.edu" , "jewillco" ) < / script > )< br >
< A HREF = "http://www.boost.org/people/doug_gregor.html" > Doug Gregor< / A > , Indiana University (< script language = "Javascript" > address ( "cs.indiana.edu" , "dgregor" ) < / script > )< br >
2021-10-05 21:37:46 +02:00
< A HREF = "https://homes.cs.washington.edu/~al75" > Andrew Lumsdaine< / A > ,
2018-01-12 21:47:58 +01:00
Indiana University (< script language = "Javascript" > address ( "osl.iu.edu" , "lums" ) < / script > )
< / TD > < / TR > < / TABLE >
< / BODY >
2021-10-05 21:37:46 +02:00
< / HTML >