Необходимо генерировать разные случайные числа при каждом запуске цикла - PullRequest
0 голосов
/ 17 апреля 2019

Мне нужно создать другой набор случайных чисел внутри второго цикла for.Но каждый раз, когда запускается второй цикл for, он генерирует один и тот же набор случайных чисел.

class pricing_lookback:
  def __init__(self,spot,rate,sigma,time,sims,steps):
    self.spot = spot
    self.rate = rate
    self.sigma = sigma
    self.time = time
    self.sims = sims
    self.steps = steps
    self.dt = self.time/self.steps

  def call_floatingstrike(self):
      pathwiseminS = np.array([])
      simulationS = np.array([])
      simulationSt = np.array([])
      call2 = np.array([])
      tst1 = np.array([])
      for j in range(self.sims):
          sT = self.spot
          for i in range(self.steps):
              phi= np.random.rand()
              sT *= np.exp((self.rate-0.5*self.sigma*self.sigma)*self.dt + self.sigma*phi*np.sqrt(self.dt))
              pathwiseminS = np.append(pathwiseminS, sT)
          tst1 = np.append(tst1, pathwiseminS[1])
          call2 = np.append(call2, np.max((pathwiseminS[self.steps-1]-self.spot),0))
          simulationSt = np.append(simulationS,pathwiseminS[self.steps-1])
          simulationS =  np.append(simulationS,min(pathwiseminS))

      call = np.average(simulationSt) - np.average(simulationS)

      return call,call2, tst1

pricelookback = pricing_lookback(110,0.05,0.2,1,200,252)
clookback, call2, t1 = pricelookback.call_floatingstrike()


print(clookback,t1)

1 Ответ

0 голосов
/ 17 апреля 2019

Как указал @ user3483203, ваша ошибка в другом месте.Все переменные рандомизированы в вашем втором цикле for: переменные phi и sT являются случайными в каждом цикле.Вы добавляете pathwiseminS[1] (постоянное, не рандомизированное значение) к tst1 или t1 каждый раз, когда это первый элемент или значение первого цикла sT.Вам следует попробовать обновить / очистить pathwiseminS (так как я думаю, это то, что вы пытаетесь сделать), например:

def call_floatingstrike(self):
      simulationS = np.array([])
      simulationSt = np.array([])
      call2 = np.array([])
      tst1 = []
      for j in range(self.sims):
          sT = self.spot
          pathwiseminS = np.array([]) #notice the placement here
          for i in range(self.steps):
              phi= np.random.rand()
              sT *= np.exp((self.rate-0.5*self.sigma*self.sigma)*self.dt + self.sigma*phi*np.sqrt(self.dt))
              pathwiseminS = np.append(pathwiseminS, sT)
          tst1 = np.append(tst1, pathwiseminS[1])
          call2 = np.append(call2, np.max((pathwiseminS[self.steps-1]-self.spot),0))
          simulationSt = np.append(simulationS,pathwiseminS[self.steps-1])
          simulationS =  np.append(simulationS,min(pathwiseminS))

      call = np.average(simulationSt) - np.average(simulationS)

      return call,call2, tst1
...