## Montesheet

A simple proof-of-concept probabilistic spreadsheet in React with Material-UI.

### Using

The following distribution functions are available

### normal

`=normal(mean, stddev)`

A normal distribution (gaussian) with mean and standard deviation as specified.

### uniform

`=uniform(min, max)`

A uniform distribution of floating point values >= min and < max.

### exponential

`=exponential(rate)`

An exponential distribution of values with rate as specified. For example you can use it to simulate when an event is going to happen next, given its average rate.

### poisson

`=poisson(mean)`

A poisson distribution with a mean as specified. *For instance, a call center receives an average of 180 calls per hour, 24 hours a day. The calls are independent; receiving one does not change the probability of when the next one will arrive. The number of calls received during any minute has a Poisson probability distribution with mean 3: the most likely numbers are 2 and 3 but 1 and 4 are also likely and there is a small probability of it being as low as zero and a very small probability it could be 10.*

#### Combining distributions

All regular math operations (`+`

,`-`

,`/`

,`*`

) work on distributions. You can also use:

### mmax

`=mmax(distA, distB)`

Samples pairs uniformly at random from distribution A and distribution B and chooses the maximum value each time. This is useful if you want to model e.g. latency of a process which always depends on the maximum latency of its subprocesses.

### choose

`=choose(distA, distB)`

Samples pairs uniformly at random from distribution A and distribution B and chooses one value from the pair with equal probability. Useful for creating bi-modal distributions from constitent parts.

## Building

To re-generate the parser from `grammar.jison`

```
npm install jison -g
cd src/jison
jison grammar.jison
```

Which writes the file `grammar.js`

in the same directory.

To run

```
npm install
```

Install the Netlify CLI

```
npm install netlify-cli -g
```

Run the development server

```
netlify dev
```

When the above command completes you'll be able to view your website at `http://localhost:8888`