File size: 1,035 Bytes
a4539de
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5fb2a02
a4539de
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import numpy as np
import torch

class myOptimizer():

    def __init__(self, lr, mu, mu_square, adaptation_rate, transaction_cost):
        self.lr = lr
        self.mu = mu
        self.mu_square = mu_square
        self.adaptation_rate = adaptation_rate
        self.last_gradient = 0.0
        self.transaction_cost = transaction_cost

    def step(self, grad_n, reward, last_observation):

        numerator = self.mu_square - (self.mu * reward)
        denominator = torch.sqrt((self.mu_square - (self.mu ** 2)) ** 3)

        gradient = numerator / (denominator + 1e-8)

        self.mu = self.mu + self.adaptation_rate * (reward - self.mu)
        self.mu_square = self.mu_square + self.adaptation_rate * ((reward ** 2) - self.mu_square)

        current_grad = (-1.0 * self.transaction_cost * grad_n)
        previous_grad = (last_observation + self.transaction_cost) * self.last_gradient

        gradient = gradient * (current_grad + previous_grad)

        self.last_gradient = grad_n

        return self.lr * gradient