From cc029128132f66299170ba0ee822ad8614b8f0c6 Mon Sep 17 00:00:00 2001 From: Erwan Jahier <erwan.jahier@univ-grenoble-alpes.fr> Date: Thu, 17 Jun 2021 14:42:22 +0200 Subject: [PATCH] Chore: refactor the code to be able to provide the whole SimuState.t to Daemons --- guides/contributors/Makefile | 2 +- guides/contributors/dune-deps.pdf | Bin 19669 -> 18969 bytes guides/contributors/module-deps.pdf | Bin 22388 -> 22515 bytes lib/sasa/sasaRun.ml | 32 +++++++++++++++----------- lib/sasacore/daemon.ml | 31 ++++++++----------------- lib/sasacore/daemon.mli | 26 +++++---------------- lib/sasacore/daemonType.ml | 16 +++++++++++++ lib/sasacore/evil.ml | 34 ++++++++++++++++------------ lib/sasacore/evil.mli | 24 +++++++++++--------- lib/sasacore/sasArg.ml | 22 +++++++++--------- lib/sasacore/sasArg.mli | 4 ++-- lib/sasacore/simuState.mli | 4 ++-- lib/sasacore/step.ml | 9 +++++++- lib/sasacore/step.mli | 4 ++-- src/sasaMain.ml | 11 ++++----- 15 files changed, 114 insertions(+), 105 deletions(-) create mode 100644 lib/sasacore/daemonType.ml diff --git a/guides/contributors/Makefile b/guides/contributors/Makefile index 7745cdef..1259e211 100644 --- a/guides/contributors/Makefile +++ b/guides/contributors/Makefile @@ -6,7 +6,7 @@ module-deps.dot: git ls-files ../.. | depgraph -i "test" -i "tools" | tred > $@ dune-deps.dot: - dune-deps ../.. > $@ + dune-deps ../.. | tred > $@ %.pdf: %.dot dot -Tpdf $< > $@ diff --git a/guides/contributors/dune-deps.pdf b/guides/contributors/dune-deps.pdf index 79ad81e7ea7395da74da00d4a26ff29028bb7817..582e623c3c1d56dc552a8662ed2d95bf98fbc0e1 100644 GIT binary patch delta 17421 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 R<F+s}Fyc~Gb@g}S0szAC(|rH{ delta 18064 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 LX=X-rCu#lz*|;^L diff --git a/guides/contributors/module-deps.pdf b/guides/contributors/module-deps.pdf index 627955d1274d9465f6be01fd0839e0bffe46189f..c36d6ccfc8073832507cac365c1edb60e86471ad 100644 GIT binary patch delta 20895 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%0AU@cDGs`;N8VOe~@>_d?M>J7<jdtRrx52SGrXm z&P`#_U^Et2qW!TlF!xI-P)UC+&4|Zil-07o*!_{mQ_QLlv8?h?t!kT!LMl$xqM}us z$_~Y2d}#t6SnE0@xFz>#H|?I+n(j{TOVeq@`GbMIsWT_=jtg7vT*rSG9i!(v&W?T2 z(LsD$#999-H%9cGd<WT|COgw(Sz>N-qn{$~b6h|~|B<(qO+LceDovui!RC{lr1CaU zb>+nN$Ja_sktlOSd<d6p2&a_6puu3iazXwrE;8xE^=pz->mnP!{3Mx-33gXtev+{o z!`8}*$khsJ>?5&kLq319!XrlVb&JDxAu)Ap{!q})Nh|1{TfC8A{&&~4T8;8tm_R0u z()S{Ps*%*@d73uI5-05>!bO|*6PjFRO<SB6m#Fq@d?vvha0pJpRin;mYRnl&+F9e8 z#m-bWXc`@j&Y7-j*zdA?)ZcSG<R0`tjt;Q<)!%o1-*v$K0{efI`ncw}<7wwJu4mmN z{@*&j(0t+e(p5UB#(vrD-IbDYth|7|(E^@6y@12v0v5#rHko8BNls77=)VbpK1g*d zZW3-$Y&Y%pt83VlCIw>XRpp59ZI|i}%}&P-CtYox;h>5f7H<)93tnW_n7roU@!O@i z+T|1+PG?fBv8aF58n??8P_qzYRZ0cJu)vXv%)m8~(&f}ThQYWpcWS`i3up#4$2Gsv zC^TEuZn6`^Ny@}N_5}M2mS(rAof}=xVmA_y8v1KAr_>X!5Q2v)(gZ!NOC$9N*q+1q z<Z;fA`}~E`fLa6}Hx{LQWGlnTfg06&zJn}f*O=o&CvbmX$9dN%!M%>rg2F9t7?J&q z9R+T>Ls90CBQapBqnI1HG$cFGpgLaQ53(*D!^GF{lt!@WYgu4WPXks5v}C8?4Dc)s zAW2h{VFh4X0J5rwWY$tdPDBv4QdA^sXYv^drAn#7A|^B(HsQmbaMb$Sx9qIepTe<} zMfBvKjplz(*dn~Cg1$Ex62xR)N$DpQ8`MT^Fvys^O<(<$R#YW8HB0RNnd77MPLSsn zXbQDJTBr5&S5oGARoE=>nZDWsKwY#sX5NanR^E<wX?LZS#b#R#SKC+1s6De4vz3iP zqknddRJ*g7)fiL)^3TN0nwi>}>E`PCnwe7;X;*)1x2tc{+@>|ox7})^_}b1|s*9~e zscc!aG({#-M-=Mgz~MoI(8;z^O`6lS>L>|<E*&k%Xp@f7WgSE-i)u41j!wrq2c2+i zb5M?(c`%@ZUR5$HWvOhO=`QU9#*>c5lSDk57;V`I7}H%rRH@hLQmM*k@oE%6L1@Tg z$e@29AM6Vb1Q{uKE=ctSaqwBH9;uKOXo&~C8K}?ePGrhek|86gT2*~2np5F(D%`5V zs`{z*7oE7oW;j0@lee{F7k0<8+!thH?EKi-4sNukR(8k5z@(OsCM1X@XS(1#o1UKR z5fw$%ld2|BN;RutDW%UZ_$g&tn-P$yxX6El%tc0C@4<d?vLfR_lh~Ai(<!al!+Eg5 z4?&GG>mlN*;HxkAz+xpOC9>BG#BdLo4MboM)tW(z0K$}gV8_bg)5-`baxyw@$W#jk zqE~)2q$B8zqy<_Pv>7{qhloj+Hlu;bs*Vt>0jvS62CV*X;u54|P^l{HT>%fSPN#ng zs;K?Keio64^4`6zpqyG|>k_mPWkFx1rhhw7HKp^L-stO}E}B;x3{i<tFp(R)@rubF zv&L@Zbk=P5s`48AK)j`4;iTEOU2k%J>)QJAhRq8DJ6HMr@tU%VRO!NjC_gQ>J^$LR zlPxNJcGCR~_u!7KGv1Y%(TQaLmk57q-5QXc5tPCwrQscZY~CJvMSP`{o*8(olydO) zvQ+_Ejn%<Wa5`$k>!@{sZ{lxK>-qJ<CjaJOKi(lcSb7j23_cxtu5>(LRSLJ^I|H|c z9}4UT^X1XN;nI_(Zzn%19WT|Jkqx^jbHtT&mDiNjBv%ElNoYz~%HzRS-fe&M`B5<9 zMlA0(_(U7;_V`4JiU$J$KZPw6g#(8ufl`%3_k*}?RduOoa=wRBA@?CqY8Zb<GFC*2 zi#?RlU;y6Anu+s!s4Y#9<ZDSI-(ers0tOJ}dy1>VQdM`=sVcfE#rkd5z3F8quoF!j zDj;GRm}3vo-cF!I!4r{~@I-&ehc<vQf`x0&bo3?
WxDCnGy7%)c+s+S`clbK>{ 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 delta 20766 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 J?FV-t{{uaHShWBE diff --git a/lib/sasa/sasaRun.ml b/lib/sasa/sasaRun.ml index dd4f96f4..adac46d8 100644 --- a/lib/sasa/sasaRun.ml +++ b/lib/sasa/sasaRun.ml @@ -104,12 +104,12 @@ let (make_do: string array -> 'v SimuState.t -> RdbgPlugin.t) = (* 2: read the actions from the outside process, i.e., from sl_in *) let _, pnal = Daemon.f st.sasarg.dummy_input (st.sasarg.verbose > 0) st.sasarg.daemon st.network - (SimuState.neigbors_of_pid st) st.config pre_pnall pre_enab_ll - (get_action_value sl_in) + (SimuState.neigbors_of_pid st) st pre_pnall pre_enab_ll + (get_action_value sl_in) Step.f in (* 3: Do the steps *) - let ne = Sasacore.Step.f pnal st.config in - let nst = update_config ne st in + let st = Sasacore.Step.f pnal st in + let nst = update_config st.config st in let sasa_nenv = from_sasa_env nst in (* 1': Get enable processes *) let pnall, enab_ll = Sasacore.SimuState.get_enable_processes nst in @@ -117,7 +117,7 @@ let (make_do: string array -> 'v SimuState.t -> RdbgPlugin.t) = let silent = List.for_all (fun b -> not b) (List.flatten enab_ll) in let legit = compute_legitimate silent nst in pre_enable_processes_opt := Some(pnall, enab_ll); - sasa_config := ne; + sasa_config := st.config; ("silent", Data.B silent)::("legitimate", Data.B legit)::pot_sl @ sasa_nenv @ (get_sl_out true pl enab_ll) in @@ -140,19 +140,25 @@ let (make_do: string array -> 'v SimuState.t -> RdbgPlugin.t) = ) else (* 2: read the actions from the outside process, i.e., from sl_in *) - let activate_val, pnal = Daemon.f st.sasarg.dummy_input - (st.sasarg.verbose > 0) st.sasarg.daemon st.network (SimuState.neigbors_of_pid st) - st.config pnall enab_ll - (get_action_value sl_in) + let activate_val, pnal = + Daemon.f st.sasarg.dummy_input + (st.sasarg.verbose > 0) st.sasarg.daemon st.network + (SimuState.neigbors_of_pid st) st pnall enab_ll + (get_action_value sl_in) Step.f in (* 3: Do the steps *) - let ne = Sasacore.Step.f pnal st.config in - sasa_config := ne; + let st = Sasacore.Step.f pnal st in + sasa_config := st.config; ("silent", Data.B silent)::("legitimate", Data.B legit)::pot_sl @ (from_sasa_env st) @ (get_sl_out true pl enab_ll) @ (get_sl_out false pl activate_val) in - let step = if st.sasarg.daemon = Daemon.Custom then step_custom else step_internal_daemon in + let step = + if st.sasarg.daemon = DaemonType.Custom then + step_custom + else + step_internal_daemon + in let ss_table = Hashtbl.create 10 in let step_dbg sl_in ctx cont = let sl_out = step sl_in in @@ -200,7 +206,7 @@ let (make_do: string array -> 'v SimuState.t -> RdbgPlugin.t) = sasa_config := e; pre_enable_processes_opt := pepo | None -> Printf.eprintf "Cannot restore state %i from sasa\n" i; - flush stderr + flush stderr ); } diff --git a/lib/sasacore/daemon.ml b/lib/sasacore/daemon.ml index 1df0f285..5fcdad89 100644 --- a/lib/sasacore/daemon.ml +++ b/lib/sasacore/daemon.ml @@ -1,19 +1,8 @@ -(* Time-stamp: <modified the 31/05/2021 (at 11:22) by Erwan Jahier> *) - -type t = - | Synchronous (* select all actions *) - | Central (* select 1 action *) - | LocallyCentral (* never activates two neighbors actions in the same step *) - | Distributed (* select at least one action *) - | Custom - | Greedy (* always choose the set of actions that maximize the potential function *) - | GreedyCentral (* Ditto, but chooses one action only *) - | Bad of int (* try to choose the set actions that maximize the - potential function but looking at sub-graphs of size - N at max *) +(* Time-stamp: <modified the 17/06/2021 (at 11:32) by Erwan Jahier> *) (* Enabled processes (with its enabling action + neighbors) *) type 'v pna = 'v Process.t * 'v Register.neighbor list * Register.action +type 'v step = 'v pna list -> 'v SimuState.t -> 'v SimuState.t let (random_list : 'a list -> 'a) = fun l -> assert (l <> []); @@ -141,18 +130,18 @@ let (get_activate_val: 'v pna list -> 'v Process.t list -> bool list list)= let al = List.map (fun (p,_,a) -> p,a) al in List.map (List.map (fun a -> List.mem a al)) actions -let (f: bool -> bool -> t -> 'v Process.t list -> - (string -> 'v * ('v Register.neighbor * string) list) -> 'v Env.t -> - 'v pna list list -> bool list list -> (string -> string -> bool) -> +let (f: bool -> bool -> DaemonType.t -> 'v Process.t list -> + (string -> 'v * ('v Register.neighbor * string) list) -> 'v SimuState.t -> + 'v pna list list -> bool list list -> (string -> string -> bool) -> 'v step -> bool list list * 'v pna list) = - fun dummy_input verbose_mode daemon pl neigbors_of_pid e all enab get_action_value -> + fun dummy_in verbose_mode daemon pl neigbors_of_pid st all enab get_action_value step -> let nall = remove_empty_list all in if nall = [] then ( Printf.printf "Warning: the algorithm is now Silent\n%!"; get_activate_val [] pl, [] ) else ( - if daemon <> Custom && dummy_input then + if daemon <> Custom && dummy_in then ignore (RifRead.bool verbose_mode ((List.hd pl).pid) ""); match daemon with | Synchronous -> @@ -168,13 +157,13 @@ let (f: bool -> bool -> t -> 'v Process.t list -> let al = distributed nall in get_activate_val al pl, al | Greedy -> - let al = Evil.greedy verbose_mode e pl neigbors_of_pid nall in + let al = Evil.greedy verbose_mode st pl neigbors_of_pid step nall in get_activate_val al pl, al | GreedyCentral -> - let al = Evil.greedy_central verbose_mode e pl neigbors_of_pid nall in + let al = Evil.greedy_central verbose_mode st pl neigbors_of_pid step nall in get_activate_val al pl, al | Bad i -> - let al = Evil.bad i e nall in + let al = Evil.bad i st nall in get_activate_val al pl, al | Custom -> custom all pl enab get_action_value ) diff --git a/lib/sasacore/daemon.mli b/lib/sasacore/daemon.mli index 6a71adba..2d1f5ef0 100644 --- a/lib/sasacore/daemon.mli +++ b/lib/sasacore/daemon.mli @@ -1,20 +1,4 @@ -(* Time-stamp: <modified the 07/05/2021 (at 16:42) by Erwan Jahier> *) - -type t = - | Synchronous (* select all actions *) - | Central (* select 1 action *) - | LocallyCentral (* never activates two neighbors actions in the same step [1] *) - | Distributed (* select at least one action *) - | Custom (* enable/actions are communicated via stdin/stdout in RIF *) - | Greedy (* always choose the set that maximize the potential function *) - | GreedyCentral (* Ditto, but chooses one action only *) - | Bad of int (* try to choose the set actions that maximize the - potential function but looking at sub-graphs of - size N at max *) - -(* [1] nb: the current implementation of locally central daemon is - biased by the degree of nodes. *) - +(* Time-stamp: <modified the 17/06/2021 (at 11:33) by Erwan Jahier> *) type 'v pna = 'v Process.t * 'v Register.neighbor list * Register.action @@ -44,10 +28,12 @@ nb: it is possible that we read on stdin that an action should be inhibit the activation. *) -val f : bool -> bool -> t -> 'v Process.t list -> +type 'v step = 'v pna list -> 'v SimuState.t -> 'v SimuState.t + +val f : bool -> bool -> DaemonType.t -> 'v Process.t list -> (string -> 'v * ('v Register.neighbor * string) list) -> - 'v Env.t -> 'v pna list list -> bool list list -> - (string -> string -> bool) -> bool list list * 'v pna list + 'v SimuState.t -> 'v pna list list -> bool list list -> + (string -> string -> bool) -> 'v step -> bool list list * 'v pna list (** Used in gtkgui.ml *) diff --git a/lib/sasacore/daemonType.ml b/lib/sasacore/daemonType.ml new file mode 100644 index 00000000..5835adde --- /dev/null +++ b/lib/sasacore/daemonType.ml @@ -0,0 +1,16 @@ +(* Time-stamp: <modified the 17/06/2021 (at 11:05) by Erwan Jahier> *) + +type t = + | Synchronous (* select all actions *) + | Central (* select 1 action *) + | LocallyCentral (* never activates two neighbors actions in the same step [1] *) + | Distributed (* select at least one action *) + | Custom (* enable/actions are communicated via stdin/stdout in RIF *) + | Greedy (* always choose the set that maximize the potential function *) + | GreedyCentral (* Ditto, but chooses one action only *) + | Bad of int (* try to choose the set actions that maximize the + potential function but looking at sub-graphs of + size N at max *) + +(* [1] nb: the current implementation of locally central daemon is + biased by the degree of nodes. *) diff --git a/lib/sasacore/evil.ml b/lib/sasacore/evil.ml index e8ed51c1..e5e47934 100644 --- a/lib/sasacore/evil.ml +++ b/lib/sasacore/evil.ml @@ -1,6 +1,7 @@ -(* Time-stamp: <modified the 03/05/2021 (at 16:17) by Erwan Jahier> *) +(* Time-stamp: <modified the 17/06/2021 (at 11:32) by Erwan Jahier> *) type 'v pna = 'v Process.t * 'v Register.neighbor list * Register.action +type 'v step = 'v pna list -> 'v SimuState.t -> 'v SimuState.t (* Enumerate all schedules using continuations *) type 'a cont = NoMore | Elt of 'a * (unit -> 'a cont) @@ -118,20 +119,20 @@ let time3 verb lbl f x y z = if verb then Printf.eprintf " [%s] Execution time: %fs\n" lbl (Sys.time() -. t); fxy -let (greedy: bool -> 'v Env.t -> 'v Process.t list -> - (string -> 'v * ('v Register.neighbor * string) list) -> 'v pna list list -> - 'v pna list) = - fun verb e pl neigbors_of_pid all -> +let (greedy: bool -> 'v SimuState.t -> 'v Process.t list -> + (string -> 'v * ('v Register.neighbor * string) list) -> + 'v step -> 'v pna list list -> 'v pna list) = + fun verb st pl neigbors_of_pid step all -> assert (all<>[]); match Register.get_potential () with | None -> failwith "No potential function has been provided" | Some user_pf -> let pf pnal = (* pnal contains a list of activated processes *) let pidl = List.map (fun p -> p.Process.pid) pl in - let ne = Step.f pnal e in + let nst = step pnal st in let get_info pid = let _, nl = neigbors_of_pid pid in - Env.get ne pid, nl + Env.get nst.config pid, nl in user_pf pidl get_info in @@ -153,7 +154,9 @@ let (greedy: bool -> 'v Env.t -> 'v Process.t list -> then search_max [] (pnal_acc, v_acc) (c()) else search_max [] (pnal, v) (c()) in - let maxl = (time3 verb "Evil.greedy search" search_max [] (pnal1, p1) (shedules())) in + let maxl = + time3 verb "Evil.greedy search" search_max [] (pnal1, p1) (shedules()) + in List.nth maxl (Random.int (List.length maxl)) in let res = fst (get_max all) in @@ -161,19 +164,20 @@ let (greedy: bool -> 'v Env.t -> 'v Process.t list -> res (* val greedy_central: bool -> 'v Env.t -> ('v Process.t * 'v Register.neighbor list) list -> *) -let (greedy_central: bool -> 'v Env.t -> 'v Process.t list -> - (string -> 'v * ('v Register.neighbor * string) list) -> 'v pna list list -> 'v pna list) = - fun verb e pl neigbors_of_pid all -> +let (greedy_central: bool -> 'v SimuState.t -> 'v Process.t list -> + (string -> 'v * ('v Register.neighbor * string) list) -> + 'v step -> 'v pna list list -> 'v pna list) = + fun verb st pl neigbors_of_pid step all -> assert (all<>[]); match Register.get_potential () with | None -> failwith "No potential function has been provided" | Some user_pf -> let pf pna = let pidl = List.map (fun p -> p.Process.pid) pl in - let ne = Step.f [pna] e in + let nst = step [pna] st in let get_info pid = let _, nl = neigbors_of_pid pid in - Env.get ne pid, nl + Env.get nst.config pid, nl in user_pf pidl get_info in @@ -208,12 +212,12 @@ let (greedy_central: bool -> 'v Env.t -> 'v Process.t list -> [res] (* exported *) -let (bad: int -> 'v Env.t -> 'v pna list list -> 'v pna list) = +let (bad: int -> 'v SimuState.t -> 'v pna list list -> 'v pna list) = fun _max_size _e _all -> assert false (* todo *) (* exported *) -let (worst4convex: 'v Env.t -> 'v pna list list -> 'v pna list) = +let (worst4convex: 'v SimuState.t -> 'v pna list list -> 'v pna list) = fun _e _all -> assert false (* todo *) diff --git a/lib/sasacore/evil.mli b/lib/sasacore/evil.mli index 6cee4338..fc1d57b0 100644 --- a/lib/sasacore/evil.mli +++ b/lib/sasacore/evil.mli @@ -1,29 +1,31 @@ -(* Time-stamp: <modified the 03/05/2021 (at 16:17) by Erwan Jahier> *) +(* Time-stamp: <modified the 17/06/2021 (at 15:28) by Erwan Jahier> *) (** This module gathers daemons that tries to reach the worst case with a potential function using various heuristic. *) type 'v pna = 'v Process.t * 'v Register.neighbor list * Register.action +type 'v step = 'v pna list -> 'v SimuState.t -> 'v SimuState.t -(** [greedy verb e pl neigbors_of_pid all] take the worst case among the combinations of - length 1, i.e., O(2^n) where n is the number of enabled processes - (|all|) *) -val greedy: bool -> 'v Env.t -> 'v Process.t list -> +(** [greedy verb st pl neighbors_of_pid step all] take the worst case + among the combinations of length 1, i.e., O(2^n) where n is the + number of enabled processes (|all|) *) +val greedy: bool -> 'v SimuState.t -> 'v Process.t list -> (string -> 'v * ('v Register.neighbor * string) list) -> - 'v pna list list -> 'v pna list + 'v step -> 'v pna list list -> 'v pna list (** Ditto, but for central daemons (of a connected component) *) -val greedy_central: bool -> 'v Env.t -> 'v Process.t list -> - (string -> 'v * ('v Register.neighbor * string) list) -> 'v pna list list -> - 'v pna list +val greedy_central: + bool -> 'v SimuState.t -> 'v Process.t list -> + (string -> 'v * ('v Register.neighbor * string) list) -> + 'v step -> 'v pna list list -> 'v pna list (** Returns the worst case among the combinations of length 1 for convex potential functions, and just a bad one otherwise (O(n) where n is the number of enabled processes). *) -val worst4convex: 'v Env.t -> 'v pna list list -> 'v pna list +val worst4convex: 'v SimuState.t -> 'v pna list list -> 'v pna list (** enumerate all the cases (of length 1) in sub-graphs of given size (O(2^size_max)) *) -val bad: int -> 'v Env.t -> 'v pna list list -> 'v pna list +val bad: int -> 'v SimuState.t -> 'v pna list list -> 'v pna list diff --git a/lib/sasacore/sasArg.ml b/lib/sasacore/sasArg.ml index 2d20f7da..2019e823 100644 --- a/lib/sasacore/sasArg.ml +++ b/lib/sasacore/sasArg.ml @@ -1,11 +1,11 @@ -(* Time-stamp: <modified the 20/05/2021 (at 09:02) by Erwan Jahier> *) +(* Time-stamp: <modified the 17/06/2021 (at 11:10) by Erwan Jahier> *) type t = { mutable topo: string; mutable length: int; mutable verbose: int; - mutable daemon: Daemon.t; + mutable daemon: DaemonType.t; mutable rif: bool; mutable no_data_file: bool; mutable quiet: bool; @@ -36,7 +36,7 @@ let (make_args : unit -> t) = topo = ""; length = 10000; verbose = 0; - daemon = Daemon.Distributed; + daemon = DaemonType.Distributed; rif = false; no_data_file = false; quiet = false; @@ -97,38 +97,38 @@ let (mkoptab : string array -> t -> unit) = fun argv args -> ( mkopt args ["--synchronous-daemon";"-sd"] - (Arg.Unit(fun () -> args.daemon <- Daemon.Synchronous)) + (Arg.Unit(fun () -> args.daemon <- DaemonType.Synchronous)) ["Use a Synchronous daemon"]; mkopt args ["--central-daemon";"-cd"] - (Arg.Unit(fun () -> args.daemon <- Daemon.Central)) + (Arg.Unit(fun () -> args.daemon <- DaemonType.Central)) ["Use a Central daemon (selects exactly one action)"]; mkopt args ["--locally-central-daemon";"-lcd"] - (Arg.Unit(fun () -> args.daemon <- Daemon.LocallyCentral)) + (Arg.Unit(fun () -> args.daemon <- DaemonType.LocallyCentral)) ["Use a Locally Central daemon"; "(i.e., never activates two neighbors actions in the same step)"]; mkopt args ["--distributed-daemon";"-dd"] - (Arg.Unit(fun () -> args.daemon <- Daemon.Distributed)) + (Arg.Unit(fun () -> args.daemon <- DaemonType.Distributed)) ["Use a Distributed daemon (which select at least one action)."; "This is the default daemon."]; mkopt args ["--custom-daemon";"-custd"] - (Arg.Unit(fun () -> args.daemon <- Daemon.Custom;args.rif <- true)) + (Arg.Unit(fun () -> args.daemon <- DaemonType.Custom;args.rif <- true)) ["Use a Custom daemon (forces --rif)"]; mkopt args ["--greedy-central-daemon";"-gcd"] - (Arg.Unit(fun () -> args.daemon <- Daemon.GreedyCentral)) + (Arg.Unit(fun () -> args.daemon <- DaemonType.GreedyCentral)) ["Use the central daemon that maximizes the potential function"; "for the next step (greedy). Performs |enabled| trials)"]; mkopt args ["--greedy-daemon";"-gd"] - (Arg.Unit(fun () -> args.daemon <- Daemon.Greedy)) + (Arg.Unit(fun () -> args.daemon <- DaemonType.Greedy)) ["Use the daemon that maximizes the potential function"; "for the next step (greedy). Performs 2^|enabled| trials) "]; (* mkopt args ["--bad-daemon";"-bd"] ~arg:" <int>" *) - (* (Arg.Int (fun i -> args.daemon <- Daemon.Bad i)) *) + (* (Arg.Int (fun i -> args.daemon <- DaemonType.Bad i)) *) (* ["Use a daemon that tries to maximize the potential function, "; *) (* "considering sub-graphs of a given maximal size"]; *) diff --git a/lib/sasacore/sasArg.mli b/lib/sasacore/sasArg.mli index efabb6ca..8dd6466b 100644 --- a/lib/sasacore/sasArg.mli +++ b/lib/sasacore/sasArg.mli @@ -1,10 +1,10 @@ -(* Time-stamp: <modified the 20/05/2021 (at 09:02) by Erwan Jahier> *) +(* Time-stamp: <modified the 17/06/2021 (at 11:09) by Erwan Jahier> *) type t = { mutable topo: string; mutable length: int; mutable verbose: int; - mutable daemon: Daemon.t; + mutable daemon: DaemonType.t; mutable rif: bool; mutable no_data_file: bool; mutable quiet: bool; diff --git a/lib/sasacore/simuState.mli b/lib/sasacore/simuState.mli index 6c02a144..7946f3be 100644 --- a/lib/sasacore/simuState.mli +++ b/lib/sasacore/simuState.mli @@ -1,4 +1,4 @@ -(* Time-stamp: <modified the 04/05/2021 (at 08:27) by Erwan Jahier> *) +(* Time-stamp: <modified the 17/06/2021 (at 15:29) by Erwan Jahier> *) (** The module is used by - the main sasa simulation loop (in ../../src/sasaMain.ml) @@ -24,7 +24,7 @@ type 'v enable_processes = val get_enable_processes: 'v t -> 'v enable_processes -(** update the config and network processes *) +(** update the config *) val update_config: 'v Env.t -> 'v t -> 'v t (** Get pid's state and neigbors *) diff --git a/lib/sasacore/step.ml b/lib/sasacore/step.ml index 6e62b4bb..a97f5fbd 100644 --- a/lib/sasacore/step.ml +++ b/lib/sasacore/step.ml @@ -9,7 +9,8 @@ let (update_env: 'v Env.t -> 'v Process.t * 'v -> 'v Env.t) = Env.set e p.pid st -let (f : ('v Process.t * 'v Register.neighbor list * action) list -> 'v Env.t -> 'v Env.t) = +let (f2 : + ('v Process.t * 'v Register.neighbor list * action) list -> 'v Env.t -> 'v Env.t) = fun pnal e -> let lenv_list = List.map (fun (p,nl,a) -> @@ -22,3 +23,9 @@ let (f : ('v Process.t * 'v Register.neighbor list * action) list -> 'v Env.t -> (* 4: update the env *) let ne = List.fold_left update_env e lenv_list in ne + +let (f : ('v Process.t * 'v Register.neighbor list * Register.action) list -> + 'v SimuState.t -> 'v SimuState.t) = + fun pnal st -> + let e = f2 pnal st.config in + SimuState.update_config e st diff --git a/lib/sasacore/step.mli b/lib/sasacore/step.mli index 436e95e3..b5796b26 100644 --- a/lib/sasacore/step.mli +++ b/lib/sasacore/step.mli @@ -1,5 +1,5 @@ (* [f pnal e] performs a step (according to the actions in pnal) and returns a new env *) -val f : ('v Process.t * 'v Register.neighbor list * Register.action) list -> 'v Env.t - -> 'v Env.t +val f : ('v Process.t * 'v Register.neighbor list * Register.action) list -> + 'v SimuState.t -> 'v SimuState.t diff --git a/src/sasaMain.ml b/src/sasaMain.ml index 65f1918a..24937493 100644 --- a/src/sasaMain.ml +++ b/src/sasaMain.ml @@ -10,7 +10,7 @@ let (print_step : int -> int -> string -> SasArg.t -> 'v Env.t -> 'v Process.t l if args.no_data_file then ( Printf.printf "\n#step %s\n%!" (string_of_int (n-i)) ) else ( - if args.daemon = Daemon.Custom then ( + if args.daemon = DaemonType.Custom then ( (* in custom mode, to be able to talk with lurette, this should not be printed on stdout *) @@ -136,24 +136,23 @@ let (simustep: int -> int -> string -> 'v SimuState.t -> 'v SimuState.t * string else st, all, enab_ll in - if st.sasarg.daemon = Daemon.Custom then + if st.sasarg.daemon = DaemonType.Custom then print_step n i pot st.sasarg st.config pl activate_val enab_ll; (* 2: read the actions *) if verb then Printf.eprintf "==> SasaSimuState.simustep : 2: read the actions\n%!"; let get_action_value = RifRead.bool (st.sasarg.verbose > 1) in let next_activate_val, pnal = Daemon.f st.sasarg.dummy_input (st.sasarg.verbose >= 1) st.sasarg.daemon st.network (SimuState.neigbors_of_pid st) - st.config all enab_ll get_action_value + st all enab_ll get_action_value Step.f in List.iter (List.iter (fun b -> if b then incr moves)) next_activate_val; update_round next_activate_val enab_ll; let next_activate_val = bool_ll_to_string next_activate_val in (* 3: Do the steps *) if verb then Printf.eprintf "==> SasaSimuState.simustep : 3: Do the steps\n%!"; - if st.sasarg.daemon <> Daemon.Custom then + if st.sasarg.daemon <> DaemonType.Custom then print_step n i pot st.sasarg st.config pl next_activate_val enab_ll; - let ne = Sasacore.Step.f pnal st.config in - let st = update_config ne st in + let st = Sasacore.Step.f pnal st in st, next_activate_val let rec (simuloop: int -> int -> string -> 'v SimuState.t -> unit) = -- GitLab