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