Fruchterman and Reingold [FrRe91] adapted the concept of cooling to the normal spring embedders. Nodes are moved in direction of the force vector instead of randomly. The amount of movement is limited by the global temperature T, i.e. the smaller T is, the smaller is the movement distance . If T = 0, the nodes don't move anymore. The global cooling function depends only on the size of the graph.
Figure 11: Detection of Rotations and Oscillations
Frick e.a. [FLM95] expanded this concept by introducing local temperatures T(v) for each node. The distance of movement of a node v is . Thus, the amount of movement may vary for each node. The global temperature is the average of all local temperatures: . The simulation is iterated until is cooled down to a threshold . There is no global cooling function, but the temperature of a node is determined by its movement behavior. The old movement impulse vector is compared to the new impulse (Fig. 11). If both nearly point into the same direction, the ideal position of node v can probably be found in this direction. Thus, its local temperature T(v) is enlarged in order to move the node v faster (i.e. in larger steps) to its ideal position. If both nearly point into opposite directions, we assume that the node v was moved too much and now starts to oscillate around the ideal point. Thus, T(v) is decreased to damp the oscillation until the node has found its inoperative position. If a node turns several times in the same direction to the right (or to the left, respectively), it probably circles around its ideal point (like a rotation), thus T(v) is decreased, too. Since the local temperature is sensitive to the movement behavior, it is automatically recognized when the simulation can stop without wasting iterations where the layout quality does not change anymore.