RLPark 1.0.0
Reinforcement Learning Framework in Java
|
00001 package rlpark.plugin.rltoys.algorithms.representations.rbf; 00002 00003 import rlpark.plugin.rltoys.algorithms.functions.ContinuousFunction; 00004 00005 00006 public class RBF implements ContinuousFunction { 00007 private final int[] patternIndexes; 00008 private final double[] patternValues; 00009 private final double variance; 00010 00011 public RBF(int[] patternIndexes, double[] patternValues, double stddev) { 00012 this.patternIndexes = patternIndexes; 00013 this.patternValues = patternValues; 00014 this.variance = stddev * stddev; 00015 } 00016 00017 @Override 00018 public double value(double[] input) { 00019 double distance = 0.0; 00020 for (int i = 0; i < patternIndexes.length; i++) { 00021 double diff = patternValues[i] - input[patternIndexes[i]]; 00022 distance += diff * diff; 00023 } 00024 return Math.exp(-distance / (2 * variance)); 00025 } 00026 00027 public int[] patternIndexes() { 00028 return patternIndexes; 00029 } 00030 00031 public double[] patternValues() { 00032 return patternValues; 00033 } 00034 00035 @Override 00036 public String toString() { 00037 StringBuilder builder = new StringBuilder("["); 00038 for (int i = 0; i < patternIndexes.length; i++) { 00039 builder.append(patternIndexes[i]); 00040 builder.append(":"); 00041 builder.append(patternValues[i]); 00042 if (i < patternIndexes.length - 1) 00043 builder.append(","); 00044 } 00045 builder.append("]"); 00046 return builder.toString(); 00047 } 00048 }