public boolean removeEdge(Edge edge) { if (!Edges.isDirectedEdge(edge)) throw new IllegalArgumentException("Only directed edges are expected in the model."); Node node1 = Edges.getDirectedEdgeTail(edge); Node node2 = Edges.getDirectedEdgeHead(edge); NodeId id1 = getNodeId(node1); NodeId id2 = getNodeId(node2); int lag = id1.getLag() - id2.getLag(); boolean removed = false; for (int _lag = 0; _lag <= getMaxLag(); _lag++) { Node from = getNode(id1.getName(), _lag + lag); Node to = getNode(id2.getName(), _lag); if (from != null && to != null) { Edge _edge = getGraph().getEdge(from, to); if (_edge != null) { boolean b = getGraph().removeEdge(_edge); removed = removed || b; } } } return removed; }
public boolean isViolatedBy(Graph graph) { for (Edge edge : graph.getEdges()) { if (!edge.isDirected()) { continue; } Node from = Edges.getDirectedEdgeTail(edge); Node to = Edges.getDirectedEdgeHead(edge); if (isForbidden(from.getName(), to.getName())) { return true; } } return false; }
public boolean addEdge(Edge edge) { if (!Edges.isDirectedEdge(edge)) { throw new IllegalArgumentException("Only directed edges supported: " + edge); } if (!lag0Nodes.contains(edge.getNode2())) { throw new IllegalArgumentException("Edges into the current time lag only: " + edge); } Node node1 = Edges.getDirectedEdgeTail(edge); Node node2 = Edges.getDirectedEdgeHead(edge); NodeId id1 = getNodeId(node1); NodeId id2 = getNodeId(node2); int lag = id1.getLag() - id2.getLag(); if (lag < 0) { throw new IllegalArgumentException("Backward edges not permitted: " + edge); } for (int _lag = getNodeId(node2).getLag() % getNumInitialLags(); _lag <= getMaxLag() - lag; _lag += getNumInitialLags()) { Node from = getNode(id1.getName(), _lag + lag); Node to = getNode(id2.getName(), _lag); if (from == null || to == null) { continue; } Edge _edge = Edges.directedEdge(from, to); if (!getGraph().containsEdge(_edge)) { getGraph().addDirectedEdge(from, to); } } return true; }