報酬がうまくいかない
シグモイド関数のような曲線を描く関数で、−1〜1までの値が得られるものはないかなと探していたらtanh関数が見つかったのでそれを利用したのだけれど、いつも同じ値が出てしまいまともに学習されない。
今日はもう遅いので、明日検証する。
public double calcReward(double action, Stock stock) { double reward = 0.0; AssetManager am = AssetManager.getInstance(); TimeManager tm = TimeManager.getInstance(); long lastTotal = am.getAssetHistory(tm.getLastBusinessDay()).getTotalAssetValue(); long todayTotal = am.getTotalAssetValue(); System.out.print("lastTotal:" + lastTotal + ", todayTotal:" + todayTotal); double x = todayTotal / lastTotal - 1; //reward = Math.tanh(lastTotal / todayTotal); reward = Math.tanh(x); System.out.println("報酬は:" + reward); return reward; }