## 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`