Пример #1
0
  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;
  }
Пример #2
0
  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;
  }
Пример #3
0
  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;
  }