RLPark 1.0.0
Reinforcement Learning Framework in Java
|
00001 package rlpark.plugin.rltoys.problems.puddleworld; 00002 00003 import rlpark.plugin.rltoys.algorithms.functions.ContinuousFunction; 00004 import rlpark.plugin.rltoys.utils.Utils; 00005 00006 00007 public class SmoothPuddle implements ContinuousFunction { 00008 private final int[] patternIndexes; 00009 private final double[] meanValues; 00010 private final double[] varianceValues; 00011 00012 public SmoothPuddle(int[] patternIndexes, double[] meanValues, double[] stddevValues) { 00013 this.patternIndexes = patternIndexes; 00014 this.meanValues = meanValues; 00015 varianceValues = new double[patternIndexes.length]; 00016 for (int i = 0; i < stddevValues.length; i++) { 00017 varianceValues[i] = stddevValues[i] * stddevValues[i]; 00018 assert varianceValues[i] > 0; 00019 } 00020 } 00021 00022 @Override 00023 public double value(double[] input) { 00024 double result = 1.0; 00025 for (int i = 0; i < patternIndexes.length; i++) 00026 result *= normalDistribution(input[patternIndexes[i]], meanValues[i], varianceValues[i]); 00027 assert Utils.checkValue(result); 00028 return result; 00029 } 00030 00031 private double normalDistribution(double x, double mu, double var) { 00032 double diff = x - mu; 00033 return (1.0 / Math.sqrt(2 * Math.PI * var)) * Math.exp(-(diff * diff) / (2 * var)); 00034 } 00035 }