From: Sébastien Miquée Date: Fri, 9 Jul 2010 11:44:36 +0000 (+0200) Subject: Correction of a function and adding a setter. X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/mapping.git/commitdiff_plain/77c32a045a9083933acf6a7a931c990ca96426fc?hp=3b32e9bd1892798769f5c25ae3a0e5ca9bf53b3b Correction of a function and adding a setter. --- diff --git a/src/and/Mapping/Cluster.java b/src/and/Mapping/Cluster.java index 712f17c..588c26e 100644 --- a/src/and/Mapping/Cluster.java +++ b/src/and/Mapping/Cluster.java @@ -168,15 +168,24 @@ public class Cluster implements Serializable { if( moreNode >= freenodes.size() ) { - moreNode = 0 ; + System.err.println( "No more free node available" ); + } else { + ret = freenodes.get( moreNode ) ; + moreNode++ ; } - - ret = freenodes.get( moreNode ) ; - moreNode++ ; } return ret ; } + + + /** + * (Re-)Initialize the moreNode counter. + */ + public void initMoreGNode() + { + moreNode = 0 ; + } /** @@ -270,9 +279,8 @@ public class Cluster implements Serializable /** - * Compute and return the real available computing power of the cluster, - * including the heterogeneity degree of the platform. - * @return The real available computing power + * Compute and return the available computing power of the cluster. + * @return The available computing power */ public double getAvailablePower() { @@ -289,7 +297,65 @@ public class Cluster implements Serializable return ret ; } + + + /** + * Compute and return the average available computing power of the cluster. + * @return The available available computing power + */ + public double getAvgAvailablePower() + { + double ret = 0 ; + + /** If there is some available nodes **/ + if( freenodes.size() > 0 ) + { + for( int i = 0 ; i < freenodes.size() ; i++ ) + { + ret += freenodes.get( i ).getPower() ; + } + + ret = ret / freenodes.size() ; + } + + return ret ; + } + + public double getAvgPower() + { + double ret = 0 ; + + /** If there is some available nodes **/ + if( nodes.size() > 0 ) + { + for( int i = 0 ; i < nodes.size() ; i++ ) + { + ret += nodes.get( i ).getPower() ; + } + + ret = ret / nodes.size() ; + } + + return ret ; + } + + + public double getPower() + { + double ret = 0 ; + + /** If there is some available nodes **/ + if( nodes.size() > 0 ) + { + for( int i = 0 ; i < nodes.size() ; i++ ) + { + ret += nodes.get( i ).getPower() ; + } + } + + return ret ; + } /** * Initialization of computing nodes in this cluster. Set all diff --git a/src/and/Mapping/Maheve.java b/src/and/Mapping/Maheve.java index 4a24142..c466778 100644 --- a/src/and/Mapping/Maheve.java +++ b/src/and/Mapping/Maheve.java @@ -250,14 +250,14 @@ public class Maheve extends Algo if( sortedCluster.get( i ).getNbFreeNodes() >= minNode ) { max = 0 ; + sortedCluster.get( i ).initMoreGNode() ; max = sortedCluster.get( i ).getNbFreeNodes() - nbSave ; for( int j = 0 ; j < max ; j++ ) { - g = sortedCluster.get( i ).nextGNode() ; + g = sortedCluster.get( i ).moreGNode() ; ret.add( g ) ; - sortedCluster.get( i ).setGNodeStatus( g, true ) ; nbFound ++ ; @@ -297,19 +297,25 @@ public class Maheve extends Algo boolean ok ; double calcLoc = 0 ; - double locP ; - int N ; - double P ; + double normN ; + double normP ; + + double Nm = 0, Pm = 0 ; + + for( int i = 0 ; i < tmp.size() ; i++ ) + { + Nm += tmp.get( i ).getNbFreeNodes() ; + Pm += tmp.get( i ).getAvgAvailablePower() ; + } for( int i = 0 ; i < tmp.size() ; i++ ) { - N = tmp.get( i ).getNbFreeNodes() ; - P = tmp.get( i ).getAvailablePower() ; - locP = P / N ; + normN = tmp.get( i ).getNbFreeNodes() * 100 / Nm ; + normP = tmp.get( i ).getAvgAvailablePower() * 100 / Pm ; /** The magic formula :P **/ - calcLoc = Math.sqrt( locP * Math.pow((1.5 * hd + 0.3), 2) + - N * Math.pow((1.1 - hd), 2 ) ) ; + calcLoc = Math.sqrt( Math.pow( (normP * hd), 2) + + Math.pow( (normN *(1 - hd)), 2 ) ) ; ok = false ;