执行算法评价过程:
vneAlgo.performEvaluation();
public interface IAlgorithm {
/** The only public method that runzhixings the algorithm. */
public void performEvaluation();
/** Get a list of numerical status information from the algorithm. */
public List<AbstractAlgorithmStatus> getStati();
}
public abstract class AbstractAlgorithm implements IAlgorithm {
protected NetworkStack ns;
abstract protected boolean preRun();
@Override
public void performEvaluation() {
if (preRun()) {
evaluate();
postRun();
} else
throw new AssertionError("preRun failed!");
}
}
计算虚拟网络接受率:
AcceptedVnrRatio acceptanceMetric = new AcceptedVnrRatio();
acceptances= acceptanceMetric.calculate(nstack);
public double calculate(NetworkStack stack) {
RejectedNetworksNumber numRej = new RejectedNetworksNumber();
double acceptedRatio = (((stack.size() - 1) - numRej.calculate(stack)) / (stack.size() - 1)) * 100; //接受率应该怎么计算
return acceptedRatio;
}
public class RejectedNetworksNumber implements EvaluationMetric<NetworkStack> {
@Override
public double calculate(NetworkStack stack) {
return (stack.size() - 1) - VnrUtils.numberMappedVnr(VnrUtils.calculateMappedVnr(stack));
}
}
public static boolean isMapped(SubstrateNetwork snet, int layer) {
for (SubstrateNode n : snet.getVertices()) {
for (AbstractResource d : n) {
//System.out.println(d.getMappings().size()); 得到映射大小为0
//System.out.println("真假:" + d.getMappings().isEmpty());
if (!d.getMappings().isEmpty()) {
for (Mapping m : d.getMappings()) {
if (m.getDemand().getOwner().getLayer() == layer)
return true;
}
}
}
}
return false;
}
public static Map<Integer, Boolean> calculateMappedVnr(NetworkStack stack) {
Map<Integer, Boolean> result = new HashMap<Integer, Boolean>();
for (Network<?,?,?> net : stack.getVirtuals()) {
VirtualNetwork vnet = ((VirtualNetwork) net);
result.put(vnet.getLayer(), isMapped(stack.getSubstrate(),vnet.getLayer()));
}
return result;
}
恳求大神指点迷津,最近做这一块毕业论文,如能解决,必有答谢,永感大恩