Package stage2

Source Code of stage2.DoStartClusterPDT

/*
* Created on Jun 19, 2005
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
package stage2;

import _game.Card;
import _io.beans.*;
import _io.ReadBinaryClusterIdStream;
import _io.*;
import _misc.Constants;
import java.io.*;
import _misc.Helper;

/**
* @author Adam
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class DoStartClusterPDT {
 
  private static final String ROOT_INPUT_DIR = Constants.DATA_FILE_REPOSITORY +
  "stage2" + Constants.dirSep;
 
  private static final String ROOT_OUTPUT_DIR = Constants.DATA_FILE_REPOSITORY +
  "stage2" + Constants.dirSep;
 
  private static final int MAX_SIMULT_FILES_OPEN = Constants.choose(Card.NUM_CARDS, 2);

 
  public static StartClusterBean getStartClusterInfo(String inputDir) throws IOException {
    int numHoleCards = Constants.choose(Card.NUM_CARDS, 2);

    // ------------------------------------------------------------
    // load up all input files
    // ------------------------------------------------------------
    ReadBinaryClusterIdStream[] in =
      new ReadBinaryClusterIdStream[numHoleCards];
   
    int inPointer = 0;
    for(int i = 0; i < (Card.NUM_CARDS-1); i++) {
      for(int j = i+1; j < Card.NUM_CARDS; j++) {
        String path = inputDir + new Integer(i).toString() + "_" + new Integer(j).toString();
        in[inPointer++] = new ReadBinaryClusterIdStream(
            path,
            0,
            Helper.getBufferSize(MAX_SIMULT_FILES_OPEN));
      }
    }
    if(inPointer != numHoleCards) {
      throw new RuntimeException();
    }
   
    // ------------------------------------------------------------
    // do it
    // ------------------------------------------------------------
    byte[][] holeCards = new byte[numHoleCards][];
    int holeCardsPointer = 0;
    for(byte i = 0; i < (Card.NUM_CARDS-1); i++) {
      for(byte j = (byte)(i+1); j < Card.NUM_CARDS; j++) {
        holeCards[holeCardsPointer++] = new byte[] {i, j};
      }
    }

    int numClusters = in[0].getNumClusters();
    int[] clusterIds = new int[numHoleCards];
   
    for(int i = 0; i < numHoleCards; i++) {
      clusterIds[i] = in[i].readRecord().clusterId;
      in[i].close(); // there's only one initial cluster
    }
   
    StartClusterBean out = new StartClusterBean();
    out.clusterIds = clusterIds;
    out.holeCards = holeCards;
    out.numClusters = numClusters;
    out.numHoleCards = numHoleCards;
   
    return out;
  }
 
  public static void main(String[] args) throws IOException {
    double tTotal = System.currentTimeMillis();

    StartClusterBean info = getStartClusterInfo(ROOT_INPUT_DIR
        + "clustering_step2_0" + Constants.dirSep);
    int numClusters = info.numClusters;
    int numHoleCards = info.numHoleCards;
    byte[][] holeCards = info.holeCards;
    int[] clusterIds = info.clusterIds;
   
    int[][] initialCounts = new int[numClusters][numClusters];
    int sum = 0;
    for(int i = 0; i < (numHoleCards-1); i++) {
      for(int j = i+1; j < numHoleCards; j++) {
        // {i,j} and {k,l} are the hole cards
        if(holeCards[i][0] == holeCards[j][0] ||
            holeCards[i][0] == holeCards[j][1] ||
            holeCards[i][1] == holeCards[j][0] ||
            holeCards[i][1] == holeCards[j][1]) {
          continue;
        }
       
        int clusterId1 = clusterIds[i];
        int clusterId2 = clusterIds[j];
        if(clusterId1 == -1 || clusterId2 == -1) {
          throw new RuntimeException();
        }
       
        initialCounts
            [Math.min(clusterId1, clusterId2)]
            [Math.max(clusterId1, clusterId2)]++;
        sum++;
      }
    }
    System.out.println(sum);
   
    double[][] normalizedCounts = new double[numClusters][numClusters];
    for(int i = 0; i < numClusters; i++) {
      for(int j = 0; j < numClusters; j++) {
        normalizedCounts[i][j] = ((double) initialCounts[i][j] / sum);
        System.out.println("[" + i + "," + j + "] = " + normalizedCounts[i][j]);
      }
    }
   
    // for first hole cards deal, p(i), where i is the cluster Id, is equal to
    //   sum(normalizedCounts[i][x], x, i, numClusters) + sum(normalizedCounts[x][i], x, 0, i-1)
   
    // for second hole card deal -- given i -- p(j), the prob dist over cluster id j's, is:
    //   normalizedCounts[i][j], i <= j
    //   normalizedCounts[j][i], otherwise
   
   
    // output to file
    WriteBinaryStartClusterPDT.writeStartPDT(
        ROOT_OUTPUT_DIR + "start_pdt_0",
        normalizedCounts, numClusters, Helper.getBufferSize(MAX_SIMULT_FILES_OPEN));

    System.out.println("All start values computed+recorded in time: " + (System.currentTimeMillis() - tTotal));
   
    double[] firstHoleCardPD = new double[numClusters];
    for(int i = 0; i < numClusters; i++) {
      double x = 0;
      for(int j = 0; j < i; j++) {
        x += normalizedCounts[j][i];
      }
      for(int j = i; j < numClusters; j++) {
        x += normalizedCounts[i][j];
      }
      firstHoleCardPD[i] = x;
      System.out.println("[" + i + "] = " + firstHoleCardPD[i]);
   
  }
}
TOP

Related Classes of stage2.DoStartClusterPDT

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.