Take the 2-minute tour ×
Mathematica Stack Exchange is a question and answer site for users of Mathematica. It's 100% free, no registration required.

I have an undirected graph $G$. How would I randomly assign directions to some fraction $p$ of the edges? How might I do this efficiently / quickly provided I have a large graph structure?

For example, to assign a graph random edge weights, I might write:

GraphWithRandomWeights = Graph[EdgeList[G], EdgeWeight -> Table[RandomReal[{-1, 1}], {abc, 1, Length[EdgeList[G]]}]];
share|improve this question
    
A similar question was asked in the middle of this question. –  Sjoerd C. de Vries Apr 21 '13 at 20:41
add comment

1 Answer

up vote 8 down vote accepted

There is a built-in function DirectedGraph[ (*your undirected graph*) , "Random"] for this job:

myGraph = RandomGraph[{10, 13},
  VertexLabels -> Table[v -> Style[v, 20], {v, 10}],
  ImagePadding -> 20, VertexSize -> Medium]

myGraph

DirectedGraph[myGraph, "Random"]

myDirectGraph

(Note the layout may not be the same as myGraph.)

Edit:

As OP asked in a comment, if you only want a fraction of the total edges to be directed, then the best way might be to manipulate the adjacency matrix:

myAdj = AdjacencyMatrix[myGraph]

myAdj

Suppose the edges we want to become directed are those between vertices $2\sim 4$, $1\sim 9$, $1\sim 10$, $5\sim 7$:

directEdgeSet = {{2, 4}, {1, 9}, {1, 10}, {5, 7}};

So a randomly constructed directed adjacency matrix would be:

myDirectAdj = ReplacePart[myAdj,
      Thread[RandomSample /@ directEdgeSet -> 0]
     ]

myDirectAdj

The corresponding graph is

AdjacencyGraph[myDirectAdj,
 DirectedEdges -> True,
 VertexLabels -> Table[v -> Style[v, 20], {v, 10}],
 ImagePadding -> 20, VertexSize -> Medium]

my partial directed graph

share|improve this answer
    
@Sylvia is it possible for me to only direct a fraction of the total edges? –  Peter Apr 21 '13 at 19:10
1  
@Peter Directed edges and undirected edges can not coexist in a same graph by definition. Please compare the difference of AdjacencyGraph[{{0, 1}, {1, 0}}, DirectedEdges -> True] and AdjacencyGraph[{{0, 1}, {1, 0}}]. –  Silvia Apr 21 '13 at 19:32
    
Got it, thanks! –  Peter Apr 21 '13 at 19:45
    
@Peter You're welcome. –  Silvia Apr 21 '13 at 19:53
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.