GridComparator.java 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. package holeg.model;
  2. import holeg.power_flow.ComplexNumber;
  3. import java.util.HashSet;
  4. public class GridComparator {
  5. public static boolean isEqual(Grid a, Grid b) {
  6. if (a == b)
  7. return true;
  8. if (a == null || b == null)
  9. return false;
  10. if (a.getNodes().size() != b.getNodes().size())
  11. return false;
  12. if (a.getEdges().size() != b.getEdges().size())
  13. return false;
  14. // Check if nodes are equal
  15. HashSet<GridNode> nodesChecked = new HashSet<>();
  16. for (GridNode node : a.getNodes()) {
  17. // Find a matching node
  18. boolean found = false;
  19. for (GridNode bNode : b.getNodes()) {
  20. if (nodesChecked.contains(bNode))
  21. continue;
  22. if (isEqualProperties(node, bNode)) {
  23. found = true;
  24. nodesChecked.add(bNode);
  25. break;
  26. }
  27. }
  28. // No node found with matching properties
  29. if (!found)
  30. return false;
  31. }
  32. // Check if edges are equal
  33. HashSet<GridEdge> edgesChecked = new HashSet<>();
  34. for (GridEdge edge : a.getEdges()) {
  35. // Find a matching edge
  36. boolean found = false;
  37. for (GridEdge bEdge : b.getEdges()) {
  38. if (edgesChecked.contains(bEdge))
  39. continue;
  40. if (isEqual(edge, bEdge)) {
  41. found = true;
  42. edgesChecked.add(bEdge);
  43. break;
  44. }
  45. }
  46. // No edge found with matching properties
  47. if (!found)
  48. return false;
  49. }
  50. return true;
  51. }
  52. private static boolean isEqual(GridEdge a, GridEdge b) {
  53. if (!isEqualProperties(a, b))
  54. return false;
  55. if (isEqualProperties(a.getFrom(), b.getFrom()) && isEqualProperties(a.getTo(), b.getTo()))
  56. return true;
  57. if (isEqualProperties(a.getTo(), b.getFrom()) && isEqualProperties(a.getFrom(), b.getTo()))
  58. return true;
  59. return false;
  60. }
  61. public static boolean isEqualProperties(GridNode a, GridNode b) {
  62. if (a == b)
  63. return true;
  64. if (a == null || b == null)
  65. return false;
  66. if (!a.getTypeByDesign().equals(b.getTypeByDesign()))
  67. return false;
  68. if (!ComplexNumber.equals(a.getPowerConsumption(), b.getPowerConsumption()))
  69. return false;
  70. if (!ComplexNumber.equals(a.getPowerGeneration(), b.getPowerGeneration()))
  71. return false;
  72. return true;
  73. }
  74. public static boolean isEqualProperties(GridEdge a, GridEdge b) {
  75. if (a == b)
  76. return true;
  77. if (a == null || b == null)
  78. return false;
  79. if (a.getLengthKilometers() != b.getLengthKilometers())
  80. return false;
  81. if (!ComplexNumber.equals(a.getOverrideImpedance(), b.getOverrideImpedance()))
  82. return false;
  83. if (a.getOverrideShuntSusceptance() != b.getOverrideShuntSusceptance())
  84. return false;
  85. return true;
  86. }
  87. }