RLPark 1.0.0
Reinforcement Learning Framework in Java
|
00001 package rlpark.plugin.rltoys.algorithms.representations.ltu.units; 00002 00003 import zephyr.plugin.core.api.monitoring.annotations.Monitor; 00004 00005 public class LTUAdaptive extends LTUThreshold { 00006 private static final long serialVersionUID = 7927007001800685788L; 00007 public final double minFrequency; 00008 public final double maxFrequency; 00009 private final double frequencyLatencySpeed; 00010 @Monitor 00011 private double averageFrequency; 00012 @Monitor 00013 private final double thresholdStepSize; 00014 00015 00016 public LTUAdaptive(double minFrequency, double maxFrequency, double frequencyLatencySpeed, double thresholdStepSize) { 00017 assert minFrequency >= 0.0 && maxFrequency > minFrequency; 00018 this.minFrequency = minFrequency; 00019 this.maxFrequency = maxFrequency; 00020 this.thresholdStepSize = thresholdStepSize; 00021 this.averageFrequency = (minFrequency + maxFrequency) / 2.0; 00022 this.frequencyLatencySpeed = frequencyLatencySpeed; 00023 } 00024 00025 public LTUAdaptive(int index, int[] inputs, byte[] weights, double minFrequency, double maxFrequency, 00026 double frequencyLatencySpeed, double thresholdStepSize) { 00027 super(index, inputs, weights); 00028 assert minFrequency >= 0.0 && maxFrequency > minFrequency; 00029 this.minFrequency = minFrequency; 00030 this.maxFrequency = maxFrequency; 00031 this.frequencyLatencySpeed = frequencyLatencySpeed; 00032 this.thresholdStepSize = thresholdStepSize; 00033 } 00034 00035 @Override 00036 public boolean updateActivation() { 00037 boolean isActive = super.updateActivation(); 00038 averageFrequency *= frequencyLatencySpeed; 00039 if (isActive) 00040 averageFrequency += 1 - frequencyLatencySpeed; 00041 if (averageFrequency > maxFrequency) 00042 threshold += thresholdStepSize; 00043 else if (averageFrequency < minFrequency) 00044 threshold -= thresholdStepSize; 00045 return isActive; 00046 } 00047 00048 @Override 00049 public LTUAdaptive newLTU(int index, int[] inputs, byte[] weights) { 00050 return new LTUAdaptive(index, inputs, weights, minFrequency, maxFrequency, frequencyLatencySpeed, thresholdStepSize); 00051 } 00052 }