Esempio n. 1
0
  public void searchStep(int i) {
    double oldScore = network.logLikelihood() - scorer.graphScore(network);
    GraphStep step = stepper.step(network.graph);

    step.forward(network.graph);
    network.learnCPDs();
    double newScore = network.logLikelihood() - scorer.graphScore(network);

    double ratio = Math.exp(newScore - oldScore);
    // double ratio = newScore / oldScore;

    boolean accepted = true;

    if (ratio < 1.0) {
      double p = rand.nextDouble();

      if (walkBack && p <= 1.0 - ratio) {
        step.reverse(network.graph);
        network.learnCPDs();
        // System.out.println("\tRejected.");
        accepted = false;
      }
    }

    if (accepted) {
      System.out.println(String.format("Step %d: %s", i, step.toString()));
      if (ratio < 1.0) {
        System.out.println(String.format("\tRejection Ratio: %.4f", ratio));
      }
    }
  }