1
$\begingroup$

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]]}]]; 
$\endgroup$
1
  • $\begingroup$ A similar question was asked in the middle of this question. $\endgroup$ Commented Apr 21, 2013 at 20:41

1 Answer 1

8
$\begingroup$

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

$\endgroup$
5
  • $\begingroup$ @Sylvia is it possible for me to only direct a fraction of the total edges? $\endgroup$ Commented Apr 21, 2013 at 19:10
  • 1
    $\begingroup$ @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}}]. $\endgroup$ Commented Apr 21, 2013 at 19:32
  • $\begingroup$ @Peter You're welcome. $\endgroup$ Commented Apr 21, 2013 at 19:53
  • $\begingroup$ How do i work with the function DirectedGraph[myGraph, "Random"] ? Is there in networkx package? $\endgroup$ Commented Mar 17, 2021 at 11:08
  • $\begingroup$ @PeymanArebi Sorry I never used or heard of networkx package. Regarding DirectedGraph, please refer to the official documentation: reference.wolfram.com/language/ref/DirectedGraph.html . $\endgroup$ Commented Mar 22, 2021 at 2:35

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.