MathGroup Archive 2004

[Date Index] [Thread Index] [Author Index]

Search the Archive

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



  • Prev by Date: Re: DSOLVE in 5.01 ??
  • Next by Date: Re: undocumented function: StringQ
  • Previous by thread: RE: Kernel crash?
  • Next by thread: Max Consecutive Occurrence.