⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vonneumanntopology.java

📁 pso源程序
💻 JAVA
字号:
/**
 * Description: The grid connection topology
 *
 * @ Author        Create/Modi     Note
 * Xiaofeng Xie    Feb 27, 2007
 */

package maosKernel.topology;

import java.util.*;
import Global.basic.data.collection.*;
import Global.methods.*;
import Global.basic.nodes.utilities.*;

public class VonNeumannTopology extends AbsCycleTopology {
  private int rowNumber = -1;
  private int colNumber = -1;

  private int[][] nodeMatrix;
  private int[] nodeLocIDs;
  private IArray[] tempArrays;

  public VonNeumannTopology(){}

  protected void initInternalMemory(int nodeNumber) {
    initNodeMemory(nodeNumber);
    initMatrix(nodeNumber);
  }

  public void initUtilities() {
    super.initUtilities();
    initUtility(new IntegerUtility("rowNumber", rowNumber));
    initUtility(new IntegerUtility("colNumber", colNumber));
  }

  public void shortcutInit() throws Exception {
    super.shortcutInit();
    rowNumber = TypeConverter.toInteger(getValue("rowNumber"));
    colNumber = TypeConverter.toInteger(getValue("colNumber"));
  }

  private void initNodeMemory(int nodeNumber) {
    nodeLocIDs = new int[nodeNumber];
    tempArrays = new IArray[nodeNumber];
    for (int i=0; i<nodeNumber; i++) {
      tempArrays[i] = new IArray(4);
    }
  }

  private void initMatrix(int nodeNumber) {
    int rowN = rowNumber, colN = colNumber;
    if (rowNumber==-1 && colNumber==-1) {
      rowN = colN = (int)Math.ceil(Math.sqrt((double)nodeNumber));
    } else if (rowNumber==-1) {
      rowN = (int)Math.ceil(nodeNumber/(double)colNumber);
    } else if (colNumber==-1) {
      colN = (int)Math.ceil(nodeNumber/(double)rowNumber);
    }
    nodeMatrix = new int[rowN][colN];
  }

  private void initConnectedNodeIDsAt(IArray tempArray, int nodeID) {
    int locID = nodeLocIDs[nodeID];
    tempArray.clear();
    int rowID = locID/nodeMatrix[0].length;
    int colID = locID%nodeMatrix[0].length;

    int candidateID;
    candidateID = nodeMatrix[(rowID-1+nodeMatrix.length)%nodeMatrix.length][colID];
    if (candidateID!=-1) {
      tempArray.addElement(candidateID);
    }
    candidateID = nodeMatrix[(rowID+1)%nodeMatrix.length][colID];
    if (candidateID!=-1) {
      tempArray.addElement(candidateID);
    }
    candidateID = nodeMatrix[rowID][(colID-1+nodeMatrix[0].length)%nodeMatrix.length];
    if (candidateID!=-1) {
      tempArray.addElement(candidateID);
    }
    candidateID = nodeMatrix[rowID][(colID+1)%nodeMatrix.length];
    if (candidateID!=-1) {
      tempArray.addElement(candidateID);
    }
  }

  public IBasicICollectionEngine getConnectedNodeIDsAt(int nodeID) {
    return tempArrays[nodeID];
  }

  private int getMatrixSize() {
    if (nodeMatrix.length == 0)return 0;
    else return nodeMatrix.length * nodeMatrix[0].length;
  }

  public void innerInitTopology() {
    int maxSize = getMatrixSize();
    if (maxSize==0) return;
    int nodeNumber = super.getNodeNumber();
    RandomGenerator.randomDistinctSelection(nodeNumber, nodeLocIDs);
    for (int i=0; i<nodeMatrix.length; i++) {
      Arrays.fill(nodeMatrix[i], -1);
    }

    for (int i=0; i<nodeNumber; i++) {
      nodeMatrix[nodeLocIDs[i]/nodeMatrix[0].length][nodeLocIDs[i]%nodeMatrix[0].length] = i;
    }

    for (int i=0; i<nodeNumber; i++) {
      initConnectedNodeIDsAt(tempArrays[i], i);
    }
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -