Question on neato start and stop for one unfixated node position

4 nodes have fixated positions, and their label indicates their position.
Node d has start position pos=“2,2” but is not fixated.
Why does d not end up inside the triangle with neato as it does with fdp engine below?

[dot engine=neato]graph {label=“neato” size=“3,2” a[pos=“-2,-1!” label=“-2,1”]; b[pos=“-1,1!” label=“-1,1”]; c[pos=“1,0!” label=“-1,0”]; d[pos=“2,2” shape=box]; d1[pos=“2,2!” label=“2,2”];a --{b --{c --d}}} [/dot]

[dot engine=fdp verbose=true]graph {label=“fdp” labelloc=“t” size=“3,2” a[pos=“-2,-1!” label=“-2,1”]; b[pos=“-1,1!” label=“-1,1”]; c[pos=“1,0!” label=“-1,0”]; d[pos=“2,2” shape=box]; d1[pos=“2,2!” label=“2,2”];a --{b --{c --d}}} [/dot]

neato and fdp use different algorithms to position nodes. It is not too surprising that the two engines position the un-pinned d node at different positions.
(neato actually has multiple algorithms - see mode and model attributes, while fdp has fewer tweaks available)

Although we implemented this, it’s not known to be numerically stable. That is, we kind of noticed that it’s not always what you would expect.

neato -Gmode=KK gives different results.

neato -Gmode=sgd has an assert that fails.

neato produced these four graphs from the above input.