RandomGraphGenerator.java 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. package Algorithms;
  2. import Model.LayeredGraphNode;
  3. import Model.LayeredNode;
  4. public class RandomGraphGenerator {
  5. private double pSubgraph;
  6. private double pEdge;
  7. private int minLayer;
  8. private int maxLayer;
  9. private int minNodePerLayer;
  10. private int maxNodePerLayer;
  11. private int maxDepth;
  12. public RandomGraphGenerator( double pSubgraph, double pEdge, int minLayer, int maxLayer, int minNodePerLayer, int maxNodePerLayer, int maxDepth )
  13. {
  14. this.pSubgraph = pSubgraph;
  15. this.pEdge = pEdge;
  16. this.minLayer = minLayer;
  17. this.maxLayer = maxLayer;
  18. this.minNodePerLayer = minNodePerLayer;
  19. this.maxNodePerLayer = maxNodePerLayer;
  20. this.maxDepth = maxDepth;
  21. }
  22. public LayeredGraphNode createRandomNode( LayeredGraphNode parent, int depth )
  23. {
  24. LayeredGraphNode node = new LayeredNode( null, null );
  25. if( parent != null )
  26. node = parent.createNode( null );
  27. if( Math.random() <= pSubgraph && depth < maxDepth )
  28. {
  29. int layer = (int)( Math.random() * ( maxLayer - minLayer ) ) + minLayer;
  30. for( int i = 0; i < layer; i++ )
  31. {
  32. int knoten = (int)( Math.random() * ( maxNodePerLayer - minNodePerLayer ) ) + minNodePerLayer;
  33. for( int j = 0; j < knoten; j++ )
  34. {
  35. LayeredGraphNode n = createRandomNode( node, depth + 1 );
  36. n.setLayer( i );
  37. if( i > 0 )
  38. {
  39. for( LayeredGraphNode n2 : node.getContainedLayers().get( i - 1 ) )
  40. {
  41. if( Math.random() <= pEdge )
  42. node.createSimpleEdge( null, n2, n );
  43. }
  44. }
  45. }
  46. }
  47. }
  48. return node;
  49. }
  50. }