AntiThetic::Skip

This forum is to discuss the book "C++ design patterns and derivatives pricing."

AntiThetic::Skip

Postby sham » Thu May 19, 2011 3:21 am

Hi, I have a question about the AntiThetic Skip member function. I'm unsure if it is working properly or if my understanding is flawed. Here's the code for reference:
Code: Select all
void AntiThetic::Skip(unsigned long numberOfPaths)
{
    if (numberOfPaths ==0)
        return;

    if (OddEven)
    {
        OddEven = false;
        numberOfPaths--;
    }

    InnerGenerator->Skip(numberOfPaths  / 2);

    if (numberOfPaths % 2)
    {
        MJArray tmp(GetDimensionality());

        GetUniforms(tmp);
    }
}


First, I am assuming that when skipping numberOfPaths paths, this means we skip numberOfPaths/2 (+1 if numberOfPaths odd) new variates from the inner generator, and numberOfPaths/2 antithetic samples.

Now consider a sample case:
OddEven = true - next sample should be a new variate from InnerGenerator, and
numberOfPaths = 4

The Skip function will:
1. Set OddEven = false
2. Set numberOfPaths = 3
3. Skip 1 variate in the InnerGenerator
4. Call GetUniforms(tmp), essentially just setting OddEven = true
5. return

On the next call we get a new variate, which is fine. Except that the InnerGenerator has only skipped 1 path, instead of the needed 2.

I have similar troubles using different combinations of OddEven and numberOfPaths.

There's also a possible bug?
Suppose the user decides to skip an odd number of paths immediately after creating an AntiThetic object. In this case the Skip function will:
1. Set OddEven = false
2. Make numberOfPaths even
3. Skip numberOfPaths/2 paths in the InnerGenerator
4. return

So OddEven is left false, but NextVariates has not been set to anything. The next call to GetUniforms will return rubbish.

Thanks for your help.
sham
 
Posts: 4
Joined: Thu May 19, 2011 2:47 am

Re: AntiThetic::Skip

Postby mj » Thu May 19, 2011 11:49 pm

I think there is a bug here.
mj
Site Admin
 
Posts: 1327
Joined: Fri Jul 27, 2007 7:21 am

Re: AntiThetic::Skip

Postby sham » Sun May 22, 2011 4:24 am

If the first few lines are just changed to:

Code: Select all
if (!OddEven)
    {
        OddEven = true;
        numberOfPaths--;
    }


Then I think it's okay.
sham
 
Posts: 4
Joined: Thu May 19, 2011 2:47 am


Return to C++ design patterns and derivatives pricing

Who is online

Users browsing this forum: No registered users and 1 guest

cron