| <HTML> |
| <!-- |
| Copyright (c) 2004 Trustees of Indiana University |
| |
| 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> |
| |
| |
| <BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b" |
| ALINK="#ff0000"> |
| <IMG SRC="../../../boost.png" |
| ALT="C++ Boost" width="277" height="86"> |
| |
| <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, |
| typename PositionMap, typename VertexIndexMap, |
| 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> |
| void |
| gursoy_atun_layout(const VertexListAndIncidenceGraph& g, |
| 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> |
| |
| IN: <tt>const Graph& g</tt> |
| <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> |
| |
| IN: <tt>VertexIndexMap vertex_index_map</tt> |
| <blockquote> |
| This maps each vertex to an integer in the range <tt>[0, |
| num_vertices(g))</tt>. |
| 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>adjacenty_list</tt> with <tt>VertexList=listS</tt> does |
| not have an internal <tt>vertex_index</tt> property. |
| </blockquote> |
| |
| IN: <tt>EdgeWeightMap weight</tt> |
| <blockquote> |
| This maps each edge to an weight. |
| num_vertices(g))</tt>. This is only necessary when no |
| displacement map is provided. |
| 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> |
| |
| IN: <tt>vertex_index_map(VertexIndexMap i_map)</tt> |
| <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>adjacenty_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> |
| <A HREF="http://www.osl.iu.edu/~lums">Andrew Lumsdaine</A>, |
| Indiana University (<script language="Javascript">address("osl.iu.edu", "lums")</script>) |
| </TD></TR></TABLE> |
| |
| </BODY> |
| </HTML> |