{
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 ;
+ }
/**
/**
- * 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()
{
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
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 ++ ;
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 ;