public BgpAwareIGPWO(int asId, List<Integer> tmIds) { this(asId); ObjectFactory factory = new ObjectFactory(); List list = this.getTrafficMatrix(); for (Iterator<Integer> iter = tmIds.iterator(); iter.hasNext(); ) { int tmId = iter.next(); try { IGPWOCalculateWeightsType.TrafficMatrixType tm = factory.createIGPWOCalculateWeightsTypeTrafficMatrixType(); tm.setTMID(tmId); list.add(tm); } catch (JAXBException e) { logger.error( "JAXBException in constructor of IGPWOCalculateWeights. Message: " + e.getMessage()); if (logger.isDebugEnabled()) { e.printStackTrace(); } return; } } }
/** @see be.ac.ulg.montefiore.run.totem.scenario.model.Event#action() */ public EventResult action() throws EventExecutionException { logger.debug("Processing an bgpAwareIGPWO event - ASID: " + _ASID); try { int asId = isSetASID() ? _ASID : InterDomainManager.getInstance().getDefaultDomain().getASID(); int[] tmIds; if (this.getTrafficMatrix().size() == 0) { tmIds = new int[] {TrafficMatrixManager.getInstance().getDefaultTrafficMatrixID(asId)}; } else { List list = this.getTrafficMatrix(); tmIds = new int[list.size()]; int i = 0; for (Iterator iter = list.iterator(); iter.hasNext(); ++i) { IGPWOCalculateWeightsType.TrafficMatrixType tm = (IGPWOCalculateWeightsType.TrafficMatrixType) iter.next(); tmIds[i] = tm.getTMID(); } } bgpAwareIGPWO bgpAwareIgpwo = (bgpAwareIGPWO) RepositoryManager.getInstance().getAlgo("bgpAwareIGPWO", asId); int nbIter = isSetNbIter() ? _NbIter : 150; int maxPossibleWeight = isSetMaxPossibleWeight() ? _MaxPossibleWeight : 50; int seed = isSetSeed() ? _Seed : 0; boolean interDomainTE = isSetInterdomainTE() ? _InterdomainTE : true; boolean randomInitialArray = true; if (isSetInitialWeightArray() && (getInitialWeightArray() == IgpwoInitialWeightArrayType.CURRENT)) { randomInitialArray = false; } SamplingRateType samplingRate = getSamplingRate(); float maxSamplingRate, minSamplingRate, initialSamplingRate; if (samplingRate == null) { maxSamplingRate = 0.4f; minSamplingRate = 0.01f; initialSamplingRate = 0.2f; } else { maxSamplingRate = samplingRate.isSetMax() ? samplingRate.getMax() : 0.4f; minSamplingRate = samplingRate.isSetMin() ? samplingRate.getMin() : 0.01f; initialSamplingRate = samplingRate.isSetInitial() ? samplingRate.getInitial() : 0.2f; } long time = System.currentTimeMillis(); TotemActionList actionList = bgpAwareIgpwo.calculateWeightsParameters( asId, tmIds, nbIter, maxPossibleWeight, randomInitialArray, seed, minSamplingRate, maxSamplingRate, initialSamplingRate, interDomainTE); time = System.currentTimeMillis() - time; System.out.println( "bgpAwareIGPWO takes " + time + " ms to compute weights on domain ASID" + _ASID); logger.info("bgpAwareIGPWO takes " + time + " ms to compute weights on domain ASID" + _ASID); double[] newLinkWeights = null; for (Iterator iter = actionList.iterator(); iter.hasNext(); ) { TotemAction action = (TotemAction) iter.next(); if (action instanceof UpdateIGPWeightsAction) { newLinkWeights = ((UpdateIGPWeightsAction) action).getWeights(); } action.execute(); } return new EventResult(newLinkWeights); } catch (Exception e) { logger.error("An exception occurred. Message: " + e.getMessage()); throw new EventExecutionException(e); } }