# Homework 1

In this homework we will get started with PyTorch and build our first PyTorch Module.

Refer Section 1 slides for installation instructions and starter code

## Estimating PI

You task is to estimate given a bunch of uniform random numbers in the interval . Recall that the area of a circle is see. The area of a unit circle () is thus just . Consider a unit circle centered at chances that a random point lies inside that circle is proportional the the area of the circle in , the positive quadrant 1. The figure below nicely visualizes this:

^{credit: www.stealthcopter.com}

One way to estimate is to draw random samples and see what fraction lies within the unit circle.

In this assignment you will write a PyTorch program that takes a set of random numbers as input and outputs a single value, which is an estimate of .

### Input

The input to the network should be passed to the `forward()`

function of the module class that inherits the torch.nn.Module. The input should be a tensor of where denotes the number of random samples.

### Output

The output of the `forward()`

should be a single value float tensor that contains the estimate of .

## Sample input

To see some sample inputs run

```
import torch
n = 1000
torch.rand([n,2], dtype=torch.float32))
```

and enjoy.

## Desired output

## Relevant operations

## Explicitly prohibited operations

- asin
- acos
- atan
- constants (other than 0, 1, 2, 4)

## Extra credit

The estimator for pi above has a fairly high variance, meaning it needs a lot of random numbers to accurately estimate pi. Can you estimate pi more accurately using fewer random numbers?

I’m sure the internet holds the answer to this somewhere, but try to figure this out yourself first.

Hint: You don’t need any operations other than elementary mathematical operations, `mean`

, `sqrt`

and the constant 1 and 4. You might also need to cast your tensor into another data type. This is quite straightforward in Pytorch, for example to cast a tensor `x`

into `float`

data type, you need to write `x.float()`

.

## Submission

Step 1: Write all your logic in the `forward()`

function of the `homework/main.py`

file provided in the starter code.
Step 2: To test the `forward()`

function call, execute the following command

```
python3 -m homework.test
```

Step 3: Run the grader to test your model.

```
python3 -m grader homework
```

Step 4: Create a submission file

```
python3 -m homework.bundle
```

Note that the grader you have access to is a weaker version of our final grader. Test your program extensively before submission.