Added example Markov

Example Markov : simulation of a Markov chain.

Use of a Random module, external call to C rand() function.
master
Gwenaël Delaval 9 years ago
parent 61f043856a
commit d5ee87b7ed

@ -0,0 +1,21 @@
Simple Markov chain simulation by external call to random() C function :
- random.epi : Heptagon interface containing the declaration of
random() function
- random.h, random.c : "glue" between actual random() C function and
function calls generated by Heptagon
- markov.ept : contains node "process", simulating a two-state Markov
chain, with probability p (constant) at each step to go from one
state to the other
Function "random" and node "process" are declared unsafe to avoid
optimization removing calls to "random" ("random" has side effects).
Compilation and simulation :
heptc random.epi
heptc -target c -s process -hepts markov.ept
gcc -I . -I markov_c -I /usr/local/lib/heptagon/c random.c markov_c/_main.c markov_c/markov.c markov_c/markov_types.c -o markov
hepts -mod Markov -node process -exec ./markov

@ -0,0 +1,20 @@
open Random
const p : float = 0.3
unsafe node process() = (o:bool)
let
automaton
state A
var c : bool;
do o = false; c = random() <. p;
until c then B
| not c then C
state B
var c : bool;
do o = true; c = random() <. p
until c then A
state C
do o = false
end
tel

@ -0,0 +1,15 @@
#include <stdlib.h>
#include "mathext.h"
void Mathext__power_step(float x, int n, Mathext__power_out *o) {
float r;
int i;
r = 1.0;
for (i = 1; i <= n; i++) {
r = r * x;
}
o->y = r;
}

@ -0,0 +1,3 @@
(* output : y = x^n *)
val fun power(x:float; n:int) = (y:float)

@ -0,0 +1,14 @@
#ifndef MATHEXT_H
#define MATHEXT_H
/* Example of a combinatorial function */
typedef struct Mathext__power_out {
float y;
} Mathext__power_out;
void Mathext__power_step(float x, int n, Mathext__power_out *o);
#endif

@ -0,0 +1,8 @@
#include <stdlib.h>
#include "random.h"
void Random__random_step(Random__random_out *o) {
o->z = ((double)random())/((double)RAND_MAX);
}

@ -0,0 +1,3 @@
(* output : random float in interval [0,1] *)
unsafe val fun random() = (z:float)

@ -0,0 +1,14 @@
#ifndef RANDOM_H
#define RANDOM_H
/* Example of a combinatorial function */
typedef struct Random__random_out {
float z;
} Random__random_out;
void Random__random_step(Random__random_out *o);
#endif
Loading…
Cancel
Save