Re: Kernel crash?
- To: mathgroup at smc.vnet.net
- Subject: [mg47644] Re: [mg47632] Kernel crash?
- From: "J. McKenzie Alexander" <jalex at lse.ac.uk>
- Date: Tue, 20 Apr 2004 03:18:48 -0400 (EDT)
- References: <NDBBJGNHKLMPLILOIPPOMEGDEAAA.djmp@earthlink.net>
- Sender: owner-wri-mathgroup at wolfram.com
> But why are you using All? Aren't the edge options principally for
> specifying the plot rendering?
Principally, but not always. Edge options can also include EdgeWeight
and EdgeDirection, both of which typically have meaning beyond plot
rendering.
> Are you actually going to plot a graph with 39,600 edges?
Not if I can help it! But I'm using the Combinatorica graph creation
functions as part of a Mathematica package for local interaction models
of evolutionary games. The graphs specifying the local interaction
structure are first created in Combinatorica, then shovelled into a
Java object via JLink to "wire up" the local interaction structure.
When edges contain information like a weight or a direction, that has a
intended interpretation which needs to be handled correctly. I was
originally relying on Combinatorica calls like Edges[g, All] and
MakeDirected[g, All] to make sure I got all necessary information.
More importantly, though, there's no reason why MakeDirected[g,All]
should fail with a GridGraph[100,100]. The directed graph structure -
if you produce it "by hand" - only takes up around 3110000 bytes of
memory.
> I'm guessing that when you specify edge or vertex options,
> Combinatorica goes to much less efficient internal storage.
But the odd thing is that the final *output* for the the call which
crashes the kernel doesn't take any more storage than the output
returned by the call which doesn't. I.e.,
In[13]:=
MakeDirected[GridGraph[10,10]]==MakeDirected[GridGraph[10,10],All]
Out[13]=
True
And the reason for this is that there *are no* edge or vertex options
originally specified for a grid graph.
So the reason for the kernel crash must solely depend on differences in
how MakeDirected[_] and MakeDirected[_,All] are implemented. A query
to ?MakeDirected states that "Calling the function with the tag All, as
MakeDirected[g, All], ensures that local options associated with each
edge are inherited by both
corresponding directed edges." Given this spec, the following is
functionally equivalent to MakeDirected[g,All]:
In[24]:=
WorkingMakeDirectedAll[g_]:=Module[{edges,v,opts,newList},
edges=g[[1]];
newList=Reap[
Scan[
Function[x,
Sow[x];
v=First[x];
opts=Rest[x];
Sow[Join[{Reverse[v]},opts]];
],
edges
]
];
Return[Graph[newList[[2,1]],g[[2]]]];
]
More importantly, it works:
In[25]:=
GridGraph[100,100]
Out[25]=
â??Graph:< 19800, 10000, Undirected>â??
In[26]:=
WorkingMakeDirectedAll[
GridGraph[100,100]
]
Out[26]=
â??Graph:<39600, 10000, Undirected>â??
So there is a bug somewhere, but where?
Cheers,
Jason
--
Dr J. McKenzie Alexander
Department of Philosophy, Logic and Scientific Method
London School of Economics and Political Science
Houghton Street, London WC2A 2AE