From e5a41b8a1f8cbecc3507aa26dc872bddcf7fea0d Mon Sep 17 00:00:00 2001
From: Erwan Jahier <erwan.jahier@univ-grenoble-alpes.fr>
Date: Mon, 27 Feb 2023 16:59:02 +0100
Subject: [PATCH] delete outdated stuff

---
 test/toy-example-sum/heuristic-bad-propag.ml | 132 ------------
 test/toy-example-sum/heuristic-explore.ml    | 202 -------------------
 2 files changed, 334 deletions(-)
 delete mode 100644 test/toy-example-sum/heuristic-bad-propag.ml
 delete mode 100644 test/toy-example-sum/heuristic-explore.ml

diff --git a/test/toy-example-sum/heuristic-bad-propag.ml b/test/toy-example-sum/heuristic-bad-propag.ml
deleted file mode 100644
index 31ac490e..00000000
--- a/test/toy-example-sum/heuristic-bad-propag.ml
+++ /dev/null
@@ -1,132 +0,0 @@
-
-(* Heuristique : pour aller vers le pire cas du Toy Example, on cherche à maximiser le nombre
-  de propagations (action top-down) d'un résultat erroné. Pour un noeud que l'action top-down R
-  n'est pas possible si l'action bottom-up S est possible, il faut donc faire S lorsque
-  c'est nécessaire afin de continuer à avancer, mais le moins souvent possible. *)
-
-open RdbgRun
-
-let daemon_i = ref 0
-
-type node_info = {
-  lvl: int;
-  s: bool;
-  r: bool
-}
-
-(* Entrée : le contenu de !e.data
-   Sortie : tuples ("n_S", activate) avec n le nom du noeud et S le nom de l'état, activate un booléen
-   Attention, les noms ne doivent contenir que des lettres à cause du Data.type_to_string dans rdbgRun.ml:37 *)
-let custom_daemon (data: Data.subst list): Data.subst list option =
-  (* liste des noeuds-états *)
-  let sl = List.filter (fun (n,v) -> String.length n > 5 && String.sub n 0 5 = "Enab_") data in
-
-  (* regroupe les états par noeud *)
-  let nodes = Hashtbl.create (List.length sl / 3) in
-  List.iter (fun (n,v) ->
-    let split = String.split_on_char '_' n in
-    let enabled = match v with
-    | Data.B b -> b
-    | _ -> assert false
-    in
-
-    match split with
-    | _::pid::state::[] -> (* Enab_pid_state *)
-      let combine_info info =
-        match state with
-        | "S" -> {info with s=enabled}
-        | "Rr" -> if info.lvl=0 then {info with r=enabled} else info
-        | "Rp" -> if info.lvl>0 then {info with r=enabled} else info
-        | _ -> assert false
-      in
-      (match Hashtbl.find_opt nodes pid with
-      | None -> Hashtbl.add nodes pid (combine_info {lvl=Algo.level pid; s=false; r=false});
-      | Some x -> Hashtbl.replace nodes pid (combine_info x);
-      )
-    | _ -> assert false
-  ) sl;
-  (* liste des états triés par niveau croissant (la racine en 1er) *)
-  let nl = List.of_seq (Hashtbl.to_seq nodes) in
-  let from_top = List.sort (fun (k1,v1) (k2,v2) -> Stdlib.compare v1.lvl v2.lvl) nl in
-
-  (* Maximise le nombre de propagations en activant les noeuds tour à tour depuis la racine,
-     à l'aide de la variable globale i *)
-  let ni = !daemon_i in
-  let n = List.length from_top in
-  let res = List.flatten (List.mapi (fun i (k,v) ->
-    let str_s = Printf.sprintf "%s_S" k in
-    let str_rr = Printf.sprintf "%s_Rr" k in
-    let str_rp = Printf.sprintf "%s_Rp" k in
-    let s,rr,rp =
-      if i = ni then
-        (* c'est ce noeud-là qu'il faut activer, de préférence avec l'action R, sinon avec S puis R *)
-        if v.r then (
-          (* R maintenant *)
-          daemon_i := (!daemon_i + 1) mod n;
-          if v.lvl = 0 then
-            false, true, false
-          else
-            false, false, true
-        ) else (
-          (* S au prochain coup *)
-          assert v.s;
-          true, false, false
-        )
-      else
-        false, false, false
-      in
-      [(str_s, Data.B s); (str_rr, Data.B rr); (str_rp, Data.B rp)]
-  ) from_top) in
-
-  (* Simule le greedy daemon pour la fonction de potentiel du toy example : *)
-  (* on fait R le + bas possible, sinon on fait S le + haut possible *)
-  (* 
-  let from_bottom = List.sort (fun (k1,v1) (k2,v2) -> Stdlib.compare v2.lvl v1.lvl) nl in
-  let activate_r = List.find_opt (fun (_,info) -> info.r) from_bottom in
-  let activate_s = List.find_opt (fun (_,info) -> info.s) from_top in
-
-  (* résultat du démon *)
-  let res = List.map (fun (n,v) ->
-    let split = String.split_on_char '_' n in
-    match split with
-    | "Enab"::pid::state::[] ->
-      let activate = g
-        if v = Data.B true then
-          if state <> "S" then
-            match activate_r with
-            | Some (node,info) -> node=pid
-            | None -> false
-          else if activate_r = None then
-            match activate_s with
-            | Some (node,info) -> node=pid
-            | None -> false
-          else
-            false
-        else
-          false
-      in
-      let str = Printf.sprintf "%s_%s" pid state in
-      (str, Data.B activate)
-    | _ -> assert false
-  ) sl
-  in *)
-  Some res
-
-let is_end (e: RdbgEvent.t) =
-  match (List.assoc_opt "potential" e.data) with
-  | Some (Data.F 0.0) -> true
-  | Some (Data.F x) -> false
-  | _ -> assert false
-
-let auto () =
-  let stop = ref false in
-  while not !stop do
-    e := next_cond !e (fun e -> e.lang = "sasa");
-    pe ();
-    stop := is_end !e;
-  done;
-  Printf.printf "done in %d moves\n" (!e.step - 1);
-  ()
-
-let _ =
-  rdbg_mv_hook := Some custom_daemon;
diff --git a/test/toy-example-sum/heuristic-explore.ml b/test/toy-example-sum/heuristic-explore.ml
deleted file mode 100644
index 740b6331..00000000
--- a/test/toy-example-sum/heuristic-explore.ml
+++ /dev/null
@@ -1,202 +0,0 @@
-
-(* Heuristique : pour aller vers le pire cas, on va simplement tester tous les coups
-   possibles (ou presque) et choisir le scénario qui maximise le temps de stabilisation. *)
-
-open RdbgRun
-open RdbgStdLib
-
-type node_info = {
-  lvl: int;
-  s: bool;
-  r: bool
-}
-
-let computed_moves: (string * string) list option ref = ref None
-
-let daemon_choice = ref ("", "")
-
-let set_daemon_choice (node: string) (state: string) =
-  daemon_choice := node, state
-
-(* Liste des activables sous forme de couples (noeud,état) *)
-let enabled (e: RdbgEvent.t): (string * string) list =
-  List.filter_map (fun (n,v) ->
-    match v with
-    | Data.B true -> (
-        match String.split_on_char '_' n with
-        | "Enab"::pid::state::[] -> Some (pid, state)
-        | _ -> None
-      )
-    | _ -> None
-  ) e.data
-
-(* Heuristique qui élimine des coups lors de l'exploration, pour en réduire le coût. 
-Comme la fonction de potentiel ne mène pas toujours au pire cas sur le Toy Exemple,
-on se base sur les noeuds activables en essayant de faire l'action de propagation "R"
-en priorité. On pourrait aussi changer la fonction de potentiel et l'utiliser ici, ce
-qui rendrait la méthode beaucoup plus générale. *)
-let exploration_hint (enabled_list: (string * string) list) =
-  let l = List.filter (fun (_, state) -> state = "Rp" || state = "Rr") enabled_list in
-  if l = [] then enabled_list else l
-
-
-(* Explore un coup, donne le nombre de coups total qu'il engendre (pour aller jusqu'à la fin) *)
-let rec explore_count e i moves: int =
-  let possible_choices = enabled e in
-  match possible_choices with
-  | [] ->
-    moves (* fini *)
-  | l ->
-    e.save_state i;
-    (* tout explorer coûte trop cher, on élimine les coups les moins intéressants *)
-    let filtered = exploration_hint l in
-    
-    (* calcule le score de tous les coups sélectionnés *)
-    let score = List.map (fun (node, st) ->
-      set_daemon_choice node st;
-      let next = next_cond e (fun x -> x.lang = "sasa") in
-      let to_end = explore_count next (i+1) (moves+1) in
-      e.restore_state i;
-      to_end
-    ) filtered in
-
-    (* sélectionne le pire cas *)
-    match score with
-    | [] -> assert false
-    | x::xs ->
-      let worst_score = List.fold_left max x xs in
-      worst_score
-
- 
-(* Table des états déjà explorés, pour éviter de recalculer pour rien.
-On stocke les data des outputs en clé et les coups suivants en valeur. *)
-let explored = Hashtbl.create 64
-
-(* Donne la partie "outputs" de e.data *)
-let event_outputs (e: RdbgEvent.t) =
-  (* On utilise le fait que les inputs viennent toujours en premier, puis les outputs *)
-  let ins = (List.length e.inputs) + 3 in (* +3 pour enlever silent,legitimate,potential *)
-  (List.filteri (fun i _ -> i >= ins) e.data)
-  
-  (* Autre méthode : filtrer par nom de variable et ne prendre que l'état des noeuds *)
-  (* let states = ["input"; "sub"; "res"] in
-  let res = List.filter_map (fun (n,v) ->
-    let s = String.split_on_char '_' n in
-    match s with
-    | _::x::[] when List.mem x states -> Some (x,v)
-    | _ -> None
-  ) e.data
-  in
-  res *)
- 
-
-(* Explore un état, donne le pire cas qu'il engendre
-(liste tous les coups suivants menant au pire cas possible à partir de cette configuration) *)
-let rec explore e i: (string * string) list =
-  (* si on a déjà été dans la même situation avant, on réutilise le résultat *)
-  let outputs = event_outputs e in
-  match Hashtbl.find_opt explored outputs with
-  | Some x -> x
-  | None ->
-    (
-    let possible_choices = enabled e in
-    match possible_choices with
-    | [] -> [] (* fini: rien ensuite *)
-    | l ->
-      e.save_state i;
-      (* tout explorer coûte trop cher, on élimine les coups les moins intéressants *)
-      let filtered = exploration_hint l in
-      
-      (* calcule les coups suivants pour tous les coups sélectionnés *)
-      let all_moves = List.map (fun (node, st) ->
-        set_daemon_choice node st;
-        let next = next_cond e (fun x -> x.lang = "sasa") in
-        (* calcule jusqu'à la fin et choisit la pire suite de coups à partir d'ici *)
-        let to_end = explore next (i+1) in
-        (* restore l'évènement originel *)
-        e.restore_state i;
-        (* renvoie ce coup-là avec la pire suite, dans l'ordre chronologique (prepend pour + de perf) *)
-        let elem = (node,st) in
-        elem::to_end
-      ) filtered in
-
-      (* sélectionne le pire cas *)
-      match all_moves with
-      | [] -> assert false
-      | x::xs ->
-        let compare a b = 
-          let na = List.length a in
-          let nb = List.length b in
-          if nb > na then b else a
-        in
-        let worst_case = List.fold_left compare x xs in
-        (* stocke le résultat pour éviter de le recalculer si on retombe sur cette config *)
-        Hashtbl.add explored outputs worst_case;
-        worst_case
-    )
-
-
-(* Entrée : le contenu de !e.data
-   Sortie : tuples ("n_S", activate) avec n le nom du noeud et S le nom de l'état, activate un booléen
-   Attention, les noms ne doivent contenir que des lettres à cause du Data.type_to_string dans rdbgRun.ml:37 *)
-let custom_daemon (data: Data.subst list): Data.subst list option =
-  (* liste des noeuds-états *)
-  let sl = List.filter (fun (n,v) -> String.length n > 5 && String.sub n 0 5 = "Enab_") data in
-
-  (* évènement sasa courant *)
-  let evt = !e in
-
-  (* sortie du démon : active le noeud sélectionné *)
-  let get_daemon_choice : string * string =
-    match !computed_moves with
-    | None ->
-      (* lance l'exploration si elle n'est pas déjà en cours *)
-      let a,b = !daemon_choice in
-      if a = "" && b = "" then (
-        Printf.printf "computing worst case...\n";
-        let worst_case = explore evt 0 in
-        let moves = worst_case in
-        Printf.printf "found worst case: %d moves\n" (List.length moves);
-        let first_move = List.hd moves in
-        computed_moves := Some (List.tl moves);
-        first_move
-      )
-      else
-        a,b
-    | Some (next_move::rest) ->
-      computed_moves := Some rest;
-      next_move
-    | Some [] ->
-      Printf.printf "no event left\n";
-      assert false
-  in
-  
-  let sel_pid, sel_state = get_daemon_choice in
-  let res = List.map (fun (n,v) ->
-    match String.split_on_char '_' n with
-    | _::pid::state::[] ->
-      let str = Printf.sprintf "%s_%s" pid state in 
-      let activate = (pid = sel_pid) && (sel_state = state) in
-      (str, Data.B activate)
-    | _ -> assert false
-  ) sl in
-
-  Some res
-
-let is_end (e: RdbgEvent.t) =
-  match (List.assoc_opt "potential" e.data) with
-  | Some (Data.F 0.0) -> true
-  | _ -> false
-
-let auto () =
-  let stop = ref false in
-  while not !stop do
-    e := next_cond !e (fun e -> e.lang = "sasa");
-    pe ();
-    stop := is_end !e;
-  done;
-  Printf.printf "done in %d moves\n" (!e.step - 1);
-  ()
-
-let _ =
-  rdbg_mv_hook := Some custom_daemon;
-- 
GitLab