example: Add some examples for random functions and networks.

This commit is contained in:
Sergiu Ivanov 2020-03-22 20:38:32 +01:00
parent 5330336b6d
commit b38bebb67b
1 changed files with 53 additions and 0 deletions

View File

@ -523,6 +523,59 @@ tab
| #t | #t | #t | #t | #f | #f |
:END:
** Random functions and networks
To avoid having different results every time a code block in this
section is run, every code block seeds the random number generator
to 0.
=dds/networks= can generate random functions, given a domain for
each of its arguments and for the function itself. Consider the
following domains:
#+NAME: simple-domains
| a | (#f #t) |
| b | (1 2) |
| c | (cold hot) |
Here's a random function taking values in the codomain =(4 5 6)=:
#+BEGIN_SRC racket :results table drawer :var simple-domains=munch-sexp(simple-domains)
(random-seed 0)
(define rnd-func (random-function/state (unorg simple-domains) '(4 5 6)))
(tabulate-state rnd-func (unorg simple-domains))
#+END_SRC
#+RESULTS:
:RESULTS:
| a | b | c | f |
| #f | 1 | cold | 4 |
| #f | 1 | hot | 5 |
| #f | 2 | cold | 4 |
| #f | 2 | hot | 4 |
| #t | 1 | cold | 5 |
| #t | 1 | hot | 6 |
| #t | 2 | cold | 4 |
| #t | 2 | hot | 5 |
:END:
We can build an entire random network over these domains:
#+BEGIN_SRC racket :results table drawer :var simple-domains=munch-sexp(simple-domains)
(random-seed 0)
(define n (random-network (unorg simple-domains)))
(tabulate-network n (unorg simple-domains))
#+END_SRC
#+RESULTS:
:RESULTS:
| a | b | c | f-a | f-b | f-c |
| #f | 1 | cold | #t | 2 | cold |
| #f | 1 | hot | #t | 1 | cold |
| #f | 2 | cold | #f | 1 | hot |
| #f | 2 | hot | #t | 2 | hot |
| #t | 1 | cold | #t | 1 | cold |
| #t | 1 | hot | #f | 1 | hot |
| #t | 2 | cold | #t | 2 | cold |
| #t | 2 | hot | #f | 1 | hot |
:END:
* Reaction systems
:PROPERTIES: