+++ /dev/null
-/*
- * Copyright (c) 2003, the JUNG Project and the Regents of the University of
- * California All rights reserved.
- *
- * This software is open-source under the BSD license; see either "license.txt"
- * or http://jung.sourceforge.net/license.txt for a description.
- */
-/*
- * Created on Jul 2, 2003
- *
- */
-package edu.uci.ics.jung.algorithms.generators.random;
-
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.commons.collections15.Factory;
-
-import edu.uci.ics.jung.graph.Graph;
-import edu.uci.ics.jung.graph.util.EdgeType;
-
-/**
- *
- * Generates a mixed-mode random graph based on the output of <code>BarabasiAlbertGenerator</code>.
- * Primarily intended for providing a heterogeneous sample graph for visualization testing, etc.
- *
- */
-public class MixedRandomGraphGenerator {
-
- /**
- * Equivalent to <code>generateMixedRandomGraph(edge_weight, num_vertices, true)</code>.
- */
- public static <V,E> Graph<V, E> generateMixedRandomGraph(
- Factory<Graph<V,E>> graphFactory,
- Factory<V> vertexFactory,
- Factory<E> edgeFactory,
- Map<E,Number> edge_weight,
- int num_vertices, Set<V> seedVertices)
- {
- return generateMixedRandomGraph(graphFactory, vertexFactory, edgeFactory,
- edge_weight, num_vertices, true, seedVertices);
- }
-
- /**
- * Returns a random mixed-mode graph. Starts with a randomly generated
- * Barabasi-Albert (preferential attachment) generator
- * (4 initial vertices, 3 edges added at each step, and num_vertices - 4 evolution steps).
- * Then takes the resultant graph, replaces random undirected edges with directed
- * edges, and assigns random weights to each edge.
- */
- public static <V,E> Graph<V,E> generateMixedRandomGraph(
- Factory<Graph<V,E>> graphFactory,
- Factory<V> vertexFactory,
- Factory<E> edgeFactory,
- Map<E,Number> edge_weights,
- int num_vertices, boolean parallel, Set<V> seedVertices)
- {
- int seed = (int)(Math.random() * 10000);
- BarabasiAlbertGenerator<V,E> bag =
- new BarabasiAlbertGenerator<V,E>(graphFactory, vertexFactory, edgeFactory,
- 4, 3, //false, parallel,
- seed, seedVertices);
- bag.evolveGraph(num_vertices - 4);
- Graph<V, E> ug = bag.create();
-
- // create a SparseMultigraph version of g
- Graph<V, E> g = graphFactory.create();
- //new SparseMultigraph<V, E>();
- for(V v : ug.getVertices()) {
- g.addVertex(v);
- }
-
- // randomly replace some of the edges by directed edges to
- // get a mixed-mode graph, add random weights
-
- for(E e : ug.getEdges()) {
- V v1 = ug.getEndpoints(e).getFirst();
- V v2 = ug.getEndpoints(e).getSecond();
-
- E me = edgeFactory.create();
- g.addEdge(me, v1, v2, Math.random() < .5 ? EdgeType.DIRECTED : EdgeType.UNDIRECTED);
- edge_weights.put(me, Math.random());
- }
-
- return g;
- }
-
-}