# Dynamic process on graph

I have a question, which I failed to find an answer to myself. I'm a casual user of Mathematica, but do have some knowledge about Dynamic module and other "Advanced" features.

My problem is formulated as follows:

1) I have a graph, which is built on 2*n vertices and contains k (for simplicity we can start with k = 2) perfect matchings on it.

2) I have an operation, that changes the graph by deleting l (again, let us take the simplest case of l = 2) edges from some matching and replacing them with l edges on same set of 2*l vertices.

3) I want to observe a process of random application of such operations to initially supplied graph. And I want to collect some data on every step to further visualize it.

Issues:

Is it possible, using the dynamic module system to perform step-by-step iteration over the data structure? Say I don't want to get the result of application of z random operations on the graph at once, but would rather observe every step with control over the flow by some sort of "next" button.

The issue, as I see it, lies in following: even if I create a dynamic module for my case, and z will be used as a dynamic variable, specifying how many random operation I want to perform, changing it from z to z + 1 will reapply all z + 1 operations, rather than perform a single additional one.

Is there a way to use some kind of history for Dynamic module? Saying if I go forward, use previous result and update it by one?

Hope I've explained it understandably =)

Sergey.

• I think your explanation is good but I would also like an MWE, that is, a Minimal Working Example. Please post a sample graph and a sample operation so that we can demonstrate possible solutions. – C. E. Sep 20 '14 at 17:59
• Is there a reason you want to do this using a Dynamic construction, as opposed to defining a sequence of graphs? – Kellen Myers Sep 23 '14 at 5:32
• Maybe you could be interested in this post... mathematica.stackexchange.com/questions/61262/… – Luca M Oct 30 '14 at 6:06
• Sergey, do you plan on ever coming back to this? I am hoping my answer was helpful or if not that I might get a better idea of what you are looking for. – Kellen Myers Nov 29 '14 at 18:17

Well, I haven't quite understood your request for a Dynamic approach (I don't see the why or how of it) but since no one else has responded, here is what I can cook up in a few minutes:

Clear[G]
G[n_] := G[n] =
Module[{e1, e2, Gr = G[n - 1], m = Length[G[n - 1]], t},
e1 = RandomInteger[{1, m}];
e2 = RandomInteger[{1, m}];
While[Gr[[e1, 2]] != Gr[[e2, 2]] || e1 == e2,
e2 = RandomInteger[{1, m}];
];
t = Gr[[e1, 1, 2]];
Gr[[e1, 1, 2]] = Gr[[e2, 1, 2]];
Gr[[e2, 1, 2]] = t;
Return[Gr];
];
RandomMatching[n_] := Module[{m = {}, i, j, v = Range[1, n]},
While[Length[v] != 0,
i = RandomInteger[{1, Length[v]}];
j = i;
While[i == j, j = RandomInteger[{1, Length[v]}]];
i = v[[i]];
j = v[[j]];
m = Append[m, i <-> j];
v = Complement[v, {i, j}];
];
Return[m];
]
G = Join[
Map[Style[#, Red] &, RandomMatching],
Map[Style[#, Blue] &, RandomMatching],
Map[Style[#, Green] &, RandomMatching]
];

Manipulate[
Graph[Range[1, 10],
G[n],
VertexCoordinates ->
Table[{Cos[\[Pi] k/5], Sin[\[Pi] k/5]}, {k, 0, 9}],
VertexLabels -> "Name",