/*
* Created on 22 juin 2005
* Created by Olivier Chalouhi
*
* Copyright (C) 2004, 2005, 2006 Aelitis SAS, All rights Reserved
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details ( see the LICENSE file ).
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* AELITIS, SAS au capital de 46,603.30 euros,
* 8 Allee Lenotre, La Grille Royale, 78600 Le Mesnil le Roi, France.
*/
package com.aelitis.azureus.core.dht.netcoords.vivaldi.ver1.impl.tests;
import com.aelitis.azureus.core.dht.netcoords.vivaldi.ver1.*;
import com.aelitis.azureus.core.dht.netcoords.vivaldi.ver1.impl.*;
public class VivaldiTest {
private static final int MAX_HEIGHT = 50;
private static final int ELEMENTS_X = 20;
private static final int ELEMENTS_Y = 20;
private static final int DISTANCE = 10;
private static final int MAX_ITERATIONS = 1000;
private static final int NB_CONTACTS = 7;
public VivaldiTest() {
VivaldiPosition positions[][] = new VivaldiPosition[ELEMENTS_X][ELEMENTS_Y];
Coordinates realCoordinates[][] = new Coordinates[ELEMENTS_X][ELEMENTS_Y];
//Init all
for(int i = 0 ; i < ELEMENTS_X ; i++) {
for(int j = 0 ; j < ELEMENTS_Y ; j++) {
realCoordinates[i][j] = new HeightCoordinatesImpl(i*DISTANCE,j*DISTANCE,MAX_HEIGHT);
positions[i][j] = new VivaldiPositionImpl(new HeightCoordinatesImpl(0,0,0));
}
}
//Main loop
for(int iter = 0 ; iter < MAX_ITERATIONS ; iter++) {
//For each node :
for(int i = 0 ; i < ELEMENTS_X ; i++) {
for(int j = 0 ; j < ELEMENTS_Y ; j++) {
VivaldiPosition position = positions[i][j];
//Pick N random nodes
for(int k = 0 ; k < NB_CONTACTS ; k++) {
int i1 = (int) (Math.random() * ELEMENTS_X);
int j1 = (int) (Math.random() * ELEMENTS_Y);
if(i1 == i && j1 ==j) continue;
VivaldiPosition position1 = positions[i1][j1];
float rtt = realCoordinates[i1][j1].distance(realCoordinates[i][j]);
position.update(rtt,position1.getCoordinates(),position1.getErrorEstimate());
}
if(iter == MAX_ITERATIONS -1) {
System.out.println(iter + " (" + i + "," + j + ") : " + realCoordinates[i][j] + " , " + position);
//System.out.println(position.getCoordinates());
}
}
}
}
}
public static void main(String args[]) {
new VivaldiTest();
}
}
|