/** Returns true has at least one link, or demand, or multicast demand at the given layer associated to it. * @param layer Network layer * @return see above */ public boolean isWorkingAtLayer(NetworkLayer layer) { if (!getOutgoingLinks(layer).isEmpty()) return true; if (!getIncomingLinks(layer).isEmpty()) return true; if (!getOutgoingDemands(layer).isEmpty()) return true; if (!getIncomingDemands(layer).isEmpty()) return true; if (!getOutgoingMulticastDemands(layer).isEmpty()) return true; if (!getIncomingMulticastDemands(layer).isEmpty()) return true; return false; }
res.add(new AjtColumnInfo<Node>(this , Collection.class, null , "Resources", "The resources hosted in this node", null , d->d.getResources() , AGTYPE.SUMCOLLECTIONCOUNT , null)); res.add(new AjtColumnInfo<Node>(this , Collection.class, null , "Out links", "The outgoing links of the node", null , d->d.getOutgoingLinks(layer) , AGTYPE.SUMCOLLECTIONCOUNT , null)); res.add(new AjtColumnInfo<Node>(this , Collection.class, null , "In links", "The incoming links of the node", null , d->d.getIncomingLinks(layer) , AGTYPE.SUMCOLLECTIONCOUNT , null)); res.add(new AjtColumnInfo<Node>(this , Double.class, null , "Out capacity (" + layer.getLinkCapacityUnits() + ")", "The sum of the capacity of the outgoing links", null , d->d.getOutgoingLinksCapacity(layer) , AGTYPE.SUMDOUBLE , null)); res.add(new AjtColumnInfo<Node>(this , Double.class, null , "Out traffic (" + layer.getDemandTrafficUnits() + ")", "The sum of the traffic carried in the outgoing links", null , d->d.getOutgoingLinksTraffic(layer) , AGTYPE.SUMDOUBLE , null));
public boolean isVisibleInCanvas(GUINode gn) { final Node n = gn.getAssociatedNode(); if (nodesToHideInCanvasAsMandatedByUserInTable.contains(n)) return false; if (!showInCanvasNonConnectedNodes) { final NetworkLayer layer = gn.getLayer(); if (n.getOutgoingLinks(layer).isEmpty() && n.getIncomingLinks(layer).isEmpty() && n.getOutgoingDemands(layer).isEmpty() && n.getIncomingDemands(layer).isEmpty() && n.getOutgoingMulticastDemands(layer).isEmpty() && n.getIncomingMulticastDemands(layer).isEmpty()) return false; } return true; }
public static boolean isGravityModelApplicableWithLinkMonitoringInfo (NetworkLayer layer , Date date) { final NetPlan np = layer.getNetPlan(); final List<Link> links = np.getLinks(layer); final List<Demand> demands = np.getDemands(layer); if (links.isEmpty()) return false; if (np.hasMulticastDemands(layer)) return false; final SortedSet<Node> demandEndNodes = demands.stream().map(d->d.getEndNodes()).flatMap(d->d.stream()).collect(Collectors.toCollection(TreeSet::new)); final SortedSet<Link> linksWeNeedToHaveFullInOutInfo = new TreeSet<> (); if (demands.stream().map(d->d.getIngressNode()).anyMatch(n->n.getOutgoingLinks(layer).isEmpty())) return false; if (demands.stream().map(d->d.getEgressNode()).anyMatch(n->n.getIncomingLinks(layer).isEmpty())) return false; demandEndNodes.forEach(n->linksWeNeedToHaveFullInOutInfo.addAll(n.getOutgoingLinks(layer))); demandEndNodes.forEach(n->linksWeNeedToHaveFullInOutInfo.addAll(n.getIncomingLinks(layer))); return linksWeNeedToHaveFullInOutInfo.stream().allMatch(ee->ee.getMonitoredOrForecastedCarriedTraffic().hasValue (date)); } public static SortedSet<Date> getDatesWhereGravityModelCanBeApplied (NetworkLayer layer)
public static SortedSet<Date> getDatesWhereGravityModelCanBeApplied (NetworkLayer layer) { final NetPlan np = layer.getNetPlan(); final List<Link> links = np.getLinks(layer); final List<Demand> demands = np.getDemands(layer); if (links.isEmpty()) return new TreeSet<> (); if (np.hasMulticastDemands(layer)) return new TreeSet<> (); final SortedSet<Node> demandEndNodes = demands.stream().map(d->d.getEndNodes()).flatMap(d->d.stream()).collect(Collectors.toCollection(TreeSet::new)); final SortedSet<Link> linksWeNeedToHaveFullInOutInfo = new TreeSet<> (); if (demands.stream().map(d->d.getIngressNode()).anyMatch(n->n.getOutgoingLinks(layer).isEmpty())) return new TreeSet<> (); if (demands.stream().map(d->d.getEgressNode()).anyMatch(n->n.getIncomingLinks(layer).isEmpty())) return new TreeSet<> (); demandEndNodes.forEach(n->linksWeNeedToHaveFullInOutInfo.addAll(n.getOutgoingLinks(layer))); demandEndNodes.forEach(n->linksWeNeedToHaveFullInOutInfo.addAll(n.getIncomingLinks(layer))); final SortedSet<Date> datesWithEnoughInformationFromGM = new TreeSet<> (); for (Date dateFirstLink : linksWeNeedToHaveFullInOutInfo.first().getMonitoredOrForecastedCarriedTraffic().getDatesWithValue()) if (linksWeNeedToHaveFullInOutInfo.stream().allMatch(ee->ee.getMonitoredOrForecastedCarriedTraffic().hasValue (dateFirstLink))) datesWithEnoughInformationFromGM.add(dateFirstLink); return datesWithEnoughInformationFromGM; } public static SortedMap<Demand,Double> getGravityModelEstimationFromMonitorTraffic (NetworkLayer layer , Date date)
/** Returns the set of incoming IP links to the node * @return see above */ public SortedSet<WIpLink> getIncomingIpLinks () { return n.getIncomingLinks(getNet().getIpLayer().getNe()).stream().map(ee->new WIpLink(ee)).filter(e->!e.isVirtualLink()).collect(Collectors.toCollection(TreeSet::new)); }
/** Returns the set of incoming fibers to the node * @return see above */ public SortedSet<WFiber> getIncomingFibers () { return n.getIncomingLinks(getNet().getWdmLayer().getNe()).stream().map(ee->new WFiber(ee)).collect(Collectors.toCollection(TreeSet::new)); }
private TBFToFromCarriedTraffic(Node node, NetworkLayer layer, boolean onlyThisLayer) { super(node.getNetPlan()); this.initialElement = node; this.onlyThisLayer = onlyThisLayer; this.initialFR = null; this.auxLayerInNodes = layer; final Set<Link> linksAllLayers = new HashSet<>(); final Set<Demand> demandsAllLayers = new HashSet<>(); final Set<MulticastDemand> mDemandsAllLayers = new HashSet<>(); demandsAllLayers.addAll(node.getIncomingDemands(layer)); demandsAllLayers.addAll(node.getOutgoingDemands(layer)); linksAllLayers.addAll(node.getIncomingLinks(layer)); linksAllLayers.addAll(node.getOutgoingLinks(layer)); mDemandsAllLayers.addAll(node.getIncomingMulticastDemands(layer)); mDemandsAllLayers.addAll(node.getOutgoingMulticastDemands(layer)); if (!onlyThisLayer) updatePropagationDownWards(linksAllLayers, linksAllLayers, demandsAllLayers, mDemandsAllLayers); if (!onlyThisLayer) updatePropagationUpWards(demandsAllLayers, mDemandsAllLayers, linksAllLayers, demandsAllLayers, mDemandsAllLayers); final Set<NetworkLayer> layersToKeepAllElements = onlyThisLayer ? Sets.difference(new HashSet<>(netPlan.getNetworkLayers()), Sets.newHashSet(layer)) : new HashSet<>(); updateAllButLinksDemandsMDemandsUsingExistingInfo(linksAllLayers, demandsAllLayers, mDemandsAllLayers, layersToKeepAllElements); }
private Pair<List<Node>, Set<Demand>> computeFilteringNodesAndDemands() { final NetPlan np = networkViewer.getDesign(); final List<Node> filteredNodes = new ArrayList<>(np.getNumberOfNodes()); final String filteringNodeTag = this.cmb_tagNodesSelector.getSelectedItem() == DEFAULT_TAG_FILTER ? null : (String) this.cmb_tagNodesSelector.getSelectedItem(); final String filteringDemandTag = this.cmb_tagDemandsSelector.getSelectedItem() == DEFAULT_TAG_FILTER ? null : (String) this.cmb_tagDemandsSelector.getSelectedItem(); for (Node n : np.getNodes()) { if (filteringNodeTag != null) if (!n.hasTag(filteringNodeTag)) continue; if (this.cb_filterLinklessNodes.isSelected()) if (n.getOutgoingLinks(layerThisTable).isEmpty() && n.getIncomingLinks(layerThisTable).isEmpty()) continue; filteredNodes.add(n); } Set<Demand> filteredDemands; if (filteringDemandTag == null) { filteredDemands = new HashSet<>(np.getDemands(layerThisTable)); } else { filteredDemands = new HashSet<>(); for (Demand d : np.getDemands(layerThisTable)) if (d.hasTag(filteringDemandTag)) filteredDemands.add(d); } return Pair.of(filteredNodes, filteredDemands); }
for (Link e : egressNode.getIncomingLinks(layer)) if (cacheHbH_normCarriedOccupiedPerLinkCurrentState.containsKey(e)) check_carriedTraffic += this.offeredTraffic * this.cacheHbH_normCarriedOccupiedPerLinkCurrentState.get(e).getFirst (); for (Link e : egressNode.getOutgoingLinks(layer)) if (cacheHbH_normCarriedOccupiedPerLinkCurrentState.containsKey(e)) check_carriedTraffic -= this.offeredTraffic * this.cacheHbH_normCarriedOccupiedPerLinkCurrentState.get(e).getFirst ();
final String capUnits = np.getLinkCapacityUnitsName(layer); final String trafUnits = np.getDemandTrafficUnitsName(layer); final double inLinkOccup = npNode.getIncomingLinks(layer).stream().mapToDouble(e -> e.getOccupiedCapacity()).sum(); final double outLinkOccup = npNode.getOutgoingLinks(layer).stream().mapToDouble(e -> e.getOccupiedCapacity()).sum(); final double inLinkCapacity = npNode.getIncomingLinks(layer).stream().mapToDouble(e -> e.getCapacity()).sum(); final double outLinkCapacity = npNode.getOutgoingLinks(layer).stream().mapToDouble(e -> e.getCapacity()).sum(); final double inOfferedUnicast = npNode.getIncomingDemands(layer).stream().mapToDouble(e -> e.getOfferedTraffic()).sum();
for (Link interferingLink : b_e.getIncomingLinks())
private List<Triple<String,String,String>> getNodeInfoTables (Node n , NetworkLayer layer) { final DecimalFormat df = new DecimalFormat("###.##"); final NetPlan np = n.getNetPlan(); final List<Triple<String,String,String>> res = new ArrayList <> (); final String trafUnits = np.getDemandTrafficUnitsName(layer); res.add(Triple.of("Node index/id" , "Node " + n.getIndex() + " (id " + n.getId() + ")", "node" + n.getId())); res.add(Triple.of("Name" , n.getName().equals("")? "No name" : n.getName(), "")); res.add(Triple.of("Site", (n.getSiteName() != null) ? n.getSiteName() : "undefined","")); res.add(Triple.of("Coordinates (x,y)" , "(" + n.getXYPositionMap().getX() + "," + n.getXYPositionMap().getY() + ")" , "")); res.add(Triple.of("Is up?", "" + n.isUp() , "")); res.add(Triple.of("# Resources" , n.getResources().isEmpty() ? "none" : ""+n.getResources().size() , "")); for (Resource r : n.getResources()) res.add(Triple.of("- " + getResourceName(r) , "" , "resource" + r.getId())); res.add(Triple.of("Information at layer" , getLayerName(layer) , "")); res.add(Triple.of("# output links", "" + n.getOutgoingLinks(layer).size() , "")); res.add(Triple.of("# input links" , "" + n.getIncomingLinks(layer).size() , "")); res.add(Triple.of("Output traffic" , "" + df.format(n.getOutgoingLinks(layer).stream().mapToDouble(e->e.getCarriedTraffic()).sum()) + " " + trafUnits , "")); res.add(Triple.of("Input traffic" , df.format(n.getIncomingLinks(layer).stream().mapToDouble(e->e.getCarriedTraffic()).sum()) + " " + trafUnits , "")); res.add(Triple.of("# SRGs" , n.getSRGs().isEmpty() ? "none" : ""+n.getSRGs().size() , "")); for (SharedRiskGroup srg : n.getSRGs()) res.add(Triple.of("- Sh. risk group index/id" , "" + srg.getIndex() + " (id " + srg.getId() + ")" , "srg" + srg.getId())); return res; } private List<Triple<String,String,String>> getResourceInfoTables (Resource r)
private Quadruple<Double,Double,Double,Double> computeCost (NetPlan np) { double costLinks = 0; for (Link e : np.getLinks ()) costLinks += linkCost_e.get(e.getIndex ()) * e.getCapacity() / (tcfa_linkCapacity_numCirc.getInt () * tcfa_circuitCapacity_Gbps.getDouble ()); double costCircuits = 0; for (Route r : np.getRoutes ()) // sums both lps and 1+1 if there are any { final double lineRate = r.isBackupRoute()? r.getRoutesIAmBackup().iterator().next().getCarriedTrafficInNoFailureState() : r.getCarriedTrafficInNoFailureState(); costCircuits += tcfa_circuitCost.getDouble () * (lineRate / tcfa_circuitCapacity_Gbps.getDouble ()); } double costNodes = 0; for (Node n : np.getNodes()) { final int nodeDegree = (int) Math.max(n.getOutgoingLinks().size(), n.getIncomingLinks().size()); costNodes += (nodeDegree <= 2)? tcfa_costNodeDegree2.getDouble () : tcfa_costNodeDegreeHigherThan2.getDouble (); } final double totalCost = costLinks+ costCircuits + costNodes; System.out.println("Total cost: " + totalCost + ", links %: " + (costLinks/totalCost) + ", circ %: " + (costCircuits/totalCost) + ", nodes %: " + (costNodes/totalCost)); System.out.println("-- From np cost total :" + totalCost + ", links: " + costLinks + ", nodes: " + costNodes + ", circ: " + costCircuits); return Quadruple.of(totalCost,costLinks,costNodes,costCircuits); }
public static SortedMap<Demand,Double> getGravityModelEstimationFromCurrentCarriedTraffic (NetworkLayer layer) { final NetPlan np = layer.getNetPlan(); final int N = np.getNumberOfNodes(); final double [] ingressTrafficPerNode = new double [N]; final double [] egressTrafficPerNode = new double [N]; for (Node n : np.getNodes()) { ingressTrafficPerNode [n.getIndex()] = n.getIncomingLinks(layer).stream().mapToDouble(e->e.getCarriedTraffic()).sum(); egressTrafficPerNode [n.getIndex()] = n.getOutgoingLinks(layer).stream().mapToDouble(e->e.getCarriedTraffic()).sum(); } final DoubleMatrix2D tm = TrafficMatrixGenerationModels.gravityModel(ingressTrafficPerNode, egressTrafficPerNode); final SortedMap<Demand,Double> res = new TreeMap<> (); for (Node n1 : np.getNodes()) for (Node n2 : np.getNodes()) { if (n1 == n2) continue; final SortedSet<Demand> nodePairDemands = np.getNodePairDemands(n1, n2, false, layer); final double traf = tm.get(n1.getIndex(), n2.getIndex()); nodePairDemands.forEach(d->res.put(d, traf / nodePairDemands.size())); } return res; }
if (np.hasMulticastDemands(layer)) throw new Net2PlanException("The link cannot have multicast demands"); if (demands.stream().map(d->d.getIngressNode()).anyMatch(n->n.getOutgoingLinks(layer).isEmpty())) throw new Net2PlanException ("A demand origin node has no output links"); if (demands.stream().map(d->d.getEgressNode()).anyMatch(n->n.getIncomingLinks(layer).isEmpty())) throw new Net2PlanException ("A demand end node has no input links"); final SortedSet<Date> datesWithEnoughInformationFromGM = TrafficMatrixForecastUtils.getDatesWhereGravityModelCanBeApplied (layer); if (datesWithEnoughInformationFromGM.isEmpty()) throw new Net2PlanException ("No dates exist with enough monitoring information to apply the gravity model"); if (np.hasMulticastDemands(layer)) throw new Net2PlanException("The link cannot have multicast demands"); if (demands.stream().map(d->d.getIngressNode()).anyMatch(n->n.getOutgoingLinks(layer).isEmpty())) throw new Net2PlanException ("A demand origin node has no output links"); if (demands.stream().map(d->d.getEgressNode()).anyMatch(n->n.getIncomingLinks(layer).isEmpty())) throw new Net2PlanException ("A demand end node has no input links"); final SortedMap<Demand,Double> estimTrafficGm = TrafficMatrixForecastUtils.getGravityModelEstimationFromCurrentCarriedTraffic(layer); estimTrafficGm.entrySet().forEach(ee->ee.getKey().setOfferedTraffic(ee.getValue()));
public static SortedMap<Demand,Double> getGravityModelEstimationFromMonitorTraffic (NetworkLayer layer , Date date) { if (!isGravityModelApplicableWithLinkMonitoringInfo(layer, date)) throw new Net2PlanException ("Gravity model not applicable"); final NetPlan np = layer.getNetPlan(); final List<Link> links = np.getLinks(layer); final List<Demand> demands = np.getDemands(layer); final int N = np.getNumberOfNodes(); final double [] ingressTrafficPerNode = new double [N]; final double [] egressTrafficPerNode = new double [N]; for (Node n : np.getNodes()) { ingressTrafficPerNode [n.getIndex()] = n.getIncomingLinks(layer).stream().mapToDouble(e->e.getMonitoredOrForecastedCarriedTraffic().getValueOrNull(date)).sum(); egressTrafficPerNode [n.getIndex()] = n.getOutgoingLinks(layer).stream().mapToDouble(e->e.getMonitoredOrForecastedCarriedTraffic().getValueOrNull(date)).sum(); } final DoubleMatrix2D tm = TrafficMatrixGenerationModels.gravityModel(ingressTrafficPerNode, egressTrafficPerNode); final SortedMap<Demand,Double> res = new TreeMap<> (); for (Node n1 : np.getNodes()) for (Node n2 : np.getNodes()) { if (n1 == n2) continue; final SortedSet<Demand> nodePairDemands = np.getNodePairDemands(n1, n2, false, layer); final double traf = tm.get(n1.getIndex(), n2.getIndex()); nodePairDemands.forEach(d->res.put(d, traf / nodePairDemands.size())); } return res; }
private void applyVisualizationPickNode(List<Node> pickedNodes , NetworkLayer layer) { if (layer == null) layer = callback.getDesign().getNetworkLayerDefault(); for (Node pickedNode : pickedNodes) { for (GUINode gn : vs.getCanvasVerticallyStackedGUINodes(pickedNode)) { if (!gn.getLayer().equals(layer)) continue; gn.setBorderPaint(VisualizationConstants.DEFAULT_GUINODE_COLOR_PICK); gn.setFillPaint(VisualizationConstants.DEFAULT_GUINODE_COLOR_PICK); } for (Link e : Sets.union(pickedNode.getOutgoingLinks(layer), pickedNode.getIncomingLinks(layer))) { final GUILink gl = vs.getCanvasAssociatedGUILink(e); gl.setShownSeparated(true); gl.setHasArrow(true); } } }
nodeInDegree.add(n.getIncomingLinks(wdmLayer).size()); nodeOutDegree.add(n.getOutgoingLinks(wdmLayer).size());
for (Link e : n.getIncomingLinks()) control_mostUpdatedUeValueNodeKnowByNode_ne.set (n.getIndex () , e.getIndex () , noisyUeEstimation_e.get(e.getIndex ()));