Commit b1a40b56 authored by Erwan Jahier's avatar Erwan Jahier

lurette 1.40 Fri, 22 Jul 2005 17:06:41 +0200 by jahier

Parent-Version:      1.39
Version-Log:

source/luc_exe.ml
source/command_line_luc_exe.ml
source/command_line_luc_exe.mli
source/lurette.ml
source/command_line.ml
source/command_line.mli
source/lucky.ml
source/rif.ml
source/env_state.mli
source/env_state.ml
source/run_aut.mli
source/run_aut.ml
source/lurettetop.ml
ihm/xlurette/xlurette_glade_main.ml
  Add a reactive mode where the output of the previous cycle is returned
  when the Lucky environment is blocked (because no transition from
  the current node(s) is labelled by a satisfiable constraint.

Remove the dependence on cygwin to run it under windows.

In particular, to be able to do that, I now use socket instead of pipes
in order to communicate between lurettetop and xlurette.

Also, define proper, cp, rm, etc instead of doing them by sys calls.

A lot of changes to make it work with the scade gui

Project-Description: Lurette
parent 3a6425a6
This diff is collapsed.
...@@ -8,22 +8,50 @@ ...@@ -8,22 +8,50 @@
# INCDIRS = $(HOME)/$(HOST_TYPE)/lib # INCDIRS = $(HOME)/$(HOST_TYPE)/lib
# LIBDIRS = $(HOME)/$(HOST_TYPE)/lib # LIBDIRS = $(HOME)/$(HOST_TYPE)/lib
INCDIRS = $(HOME)/$(HOSTTYPE)/lib $(SCADE_INSTALL_DIR)/lib
LIBDIRS = $(HOME)/$(HOSTTYPE)/lib $(SCADE_INSTALL_DIR)/lib ifeq ($(HOST_TYPE),cygwin)
EXE :=
OCAMLLIB = "c:\TEMP\ocaml\lib"
INCDIRS = u:\\cygwin\\lib c:\\TEMP\\ocaml\\lib
LIBDIRS = u:\\cygwin\\lib c:\\TEMP\\ocaml\\lib c:\\cygwin\\lib\\mingw
CAML_INSTALL_DIR=/cygdrive/c/TEMP/ocaml
SYNCHRONE_DIR=//ARPONT/www-verimag/SYNCHRONE
SYNCHRONE_LURETTE_DIR=//ARPONT/www-verimag/SYNCHRONE/lurette/
EXE := .exe
HOSTTYPE32=win32
OCAMLMAKEFILE = $(HOME)/lurette/OcamlMakefile else
ifeq ($(HOST_TYPE),sparc-sun)
EXE :=
INCDIRS = $(HOME)/$(HOSTTYPE)/lib $(SCADE_INSTALL_DIR)/lib
LIBDIRS = $(HOME)/$(HOSTTYPE)/lib $(SCADE_INSTALL_DIR)/lib
OCAMLLIB = /usr/local/soft/ocaml/3.08/lib/ocaml
CAML_INSTALL_DIR=/usr/local/soft/ocaml/3.08/
SYNCHRONE_DIR=/usr/local/www/SYNCHRONE
SYNCHRONE_LURETTE_DIR=/usr/local/www/SYNCHRONE/lurette/
EXE := #
HOSTTYPE32=$(HOST_TYPE)
else
EXE :=
INCDIRS = $(HOME)/$(HOSTTYPE)/lib $(SCADE_INSTALL_DIR)/lib
LIBDIRS = $(HOME)/$(HOSTTYPE)/lib $(SCADE_INSTALL_DIR)/lib
OCAMLLIB = /usr/local/soft/ocaml/3.08.3/lib/ocaml
CAML_INSTALL_DIR=/import/linux/soft/ocaml/3.08.3/
SYNCHRONE_DIR=/usr/local/www/SYNCHRONE
SYNCHRONE_LURETTE_DIR=/usr/local/www/SYNCHRONE/lurette/
EXE := #
HOSTTYPE32=$(HOST_TYPE)
endif
endif
LURETTE_PATH = $(HOME)/lurette
ALL_SOURCES = $(SOURCES) $(SOURCES_OCAML) OCAMLMAKEFILE = $(HOME)/lurette/OcamlMakefile
ifeq ($(HOST_TYPE),cygwin) LURETTE_PATH = $(HOME)/lurette
EXE := .exe
else
EXE :=
endif
ALL_SOURCES = $(SOURCES) $(SOURCES_OCAML)
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
# For updates see: # For updates see:
# http://www.oefai.at/~markus/ocaml_sources # http://www.oefai.at/~markus/ocaml_sources
# #
# $Id: OcamlMakefile 1.52 Mon, 08 Mar 2004 13:46:15 +0100 jahier $ # $Id: OcamlMakefile 1.53 Fri, 22 Jul 2005 17:06:41 +0200 jahier $
# #
########################################################################### ###########################################################################
...@@ -733,24 +733,24 @@ endif ...@@ -733,24 +733,24 @@ endif
$(QUIET)pp=`sed -n -e 's/(\*pp \([^*]*\) \*)/\1/p;q' $<`; \ $(QUIET)pp=`sed -n -e 's/(\*pp \([^*]*\) \*)/\1/p;q' $<`; \
if [ -z "$$pp" ]; then \ if [ -z "$$pp" ]; then \
echo $(INTF_OCAMLC) -c $(THREAD_FLAG) \ echo $(INTF_OCAMLC) -c $(THREAD_FLAG) \
$(OCAMLFLAGS) $(INCFLAGS) $<; \ $(OCAMLFLAGS) $(INCFLAGS) "$<"; \
$(INTF_OCAMLC) -c $(THREAD_FLAG) $(OCAMLFLAGS) \ $(INTF_OCAMLC) -c $(THREAD_FLAG) $(OCAMLFLAGS) \
$(INCFLAGS) $<; \ $(INCFLAGS) "$<"; \
else \ else \
echo $(INTF_OCAMLC) -c -pp \"$$pp\" $(THREAD_FLAG) \ echo $(INTF_OCAMLC) -c -pp \"$$pp\" $(THREAD_FLAG) \
$(OCAMLFLAGS) $(INCFLAGS) $<; \ $(OCAMLFLAGS) $(INCFLAGS) "$<"; \
$(INTF_OCAMLC) -c -pp "$$pp" $(THREAD_FLAG) \ $(INTF_OCAMLC) -c -pp "$$pp" $(THREAD_FLAG) \
$(OCAMLFLAGS) $(INCFLAGS) $<; \ $(OCAMLFLAGS) $(INCFLAGS) "$<"; \
fi fi
.ml.cmi .ml.$(EXT_OBJ) .ml.cmx .ml.cmo: $(EXTRADEPS) .ml.cmi .ml.$(EXT_OBJ) .ml.cmx .ml.cmo: $(EXTRADEPS)
$(QUIET)pp=`sed -n -e 's/(\*pp \([^*]*\) \*)/\1/p;q' $<`; \ $(QUIET)pp=`sed -n -e 's/(\*pp \([^*]*\) \*)/\1/p;q' $<`; \
if [ -z "$$pp" ]; then \ if [ -z "$$pp" ]; then \
echo $(REAL_OCAMLC) -c $(ALL_OCAMLCFLAGS) $<; \ echo $(REAL_OCAMLC) -c $(ALL_OCAMLCFLAGS) $<; \
$(REAL_OCAMLC) -c $(ALL_OCAMLCFLAGS) $<; \ $(REAL_OCAMLC) -c $(ALL_OCAMLCFLAGS) $<; \
else \ else \
echo $(REAL_OCAMLC) -c -pp \"$$pp\" \ echo $(REAL_OCAMLC) -c -pp \"$$pp\" \
$(ALL_OCAMLCFLAGS) $<; \ $(ALL_OCAMLCFLAGS) $<; \
$(REAL_OCAMLC) -c -pp "$$pp" $(ALL_OCAMLCFLAGS) $<; \ $(REAL_OCAMLC) -c -pp "$$pp" $(ALL_OCAMLCFLAGS) $<; \
fi fi
......
V1.40
* Add a reactive mode where the output of the previous cycle is returned
when the Lucky environment is blocked (because no transition from
the current node(s) is labelled by a satisfiable constraint.
* First version of the integration in the Scade editor
* Replace the Cudd package by an home made (Pascal Raymond) BDD
package
V1.39 V1.39
* Fix a bug where the probability of a translation was sligthly wrong * Fix a bug where the probability of a translation was sligthly wrong
in some circumstances (namely, when a formula happens to be false in some circumstances (namely, when a formula happens to be false
because of the numeric part; in such a case, the draw was done again because of the numeric part; in such a case, the draw was done
from the current node instead of doing it from the last choice point). again from the current node instead of doing it from the last
choice point).
* Add a button in xlurette that generates default environments for the * Add a button in xlurette to explicitely generate default
current SUT. environments for the current SUT.
V1.38 V1.38
* When no environment is provided, also generate a file named * When no environment is provided, also generate a file named
"<node>_env_UD" in addition to the fake env in "<node>_env". That one "<node>_env_UD.luc" in addition to the fake environment
is more elaborated and contraints the output variables so that they "<node>_env.luc". That one is more elaborated and contraints the
move up and down. output variables so that they move up and down (saw-edge curve).
* Fix a bug due to the fact that not all variable name start with "_" * Fix a bug due to the fact that not all variable name start with "_"
in the C code generated by scade, as it was assumed (and generally the case). in the C code generated by scade, as it was assumed (and generally
the case).
* Fix a bug occurring for lucky formula containing more than 1200 monomes * Fix a bug occurring for lucky formula containing more than 1200
(float overflew when counting the number of solutions). monomes because float overflew when counting the number of
solutions. The fix consisted in using a float/logarithm-based
encoding, where the mantissa is a float, and where the exponent is
an integer.
V1.37 V1.37
* The automatically generated oracle in now named "<sut_node>_always_true.lus" * The automatically generated oracle in now named
instead of "always_true.lus". "<sut_node>_always_true.lus" instead of just "always_true.lus".
* fix a bug where xlurettte was crashing down when the seed field * fix a bug where xlurettte was crashing down when the seed field
(spin button) was empty. (spin button) was empty.
* Allow negative values to be set in xlurette as a seed. * Allow negative values to be set in xlurette as a seed.
...@@ -34,19 +51,21 @@ V1.37 ...@@ -34,19 +51,21 @@ V1.37
V1.36 V1.36
* A better error msg is displayed when one try to write something like * A better error msg is displayed when one try to write something
"x : int ^ 3 ~default pre x ^ 3", which is currently not supported. like "x : int ^ 3 ~default pre x ^ 3", which is currently not
supported.
* Fix a bug in gen_fake_lucky that was introduced in V1.33 * Fix a bug in gen_fake_lucky that was introduced in V1.33 (incorrect
(incorrect environment were generated). environments were generated).
V1.35 V1.35
* The file <node>_io.c generated by sildex is now automatically deleted * The file <node>_io.c generated by sildex is now automatically
(it is included by <node>.c, and causes compile errors even if lurette deleted (it is included by <node>.c, and causes compile errors even
does not use its content, which is only meant for the sildex simulator). if lurette does not use its content, which is only meant for the
sildex simulator).
* Fix a bug in the step by step mode where the graph was not always * Fix a bug in the step by step mode where the graph was not always
refreshed when the step was not 1. refreshed when the step was not 1.
V1.34 V1.34
......
*********** BUGS *********** BUGS
* ???
1 000 000 000
Fatal error: exception Assert_failure("/home/jahier/lurette/source/solver.ml", 30038, 30050)
* Le remplacement dynamique de .luc est tres surement cassé (les current_nodes
ne sont pas mis a jour) -> le retester
(nb : cette feature n'est pas documenté de toutes facons)
* time lucky -l 100 six_lines.luc
prend 5 secondes pour n=1000 alors que
time lucky -l 10 six_lines.luc
prend 170 secondes pour n=10000 * Quand Scade utilise des float, comme caml utilise des doubles,
!!! je dois faire un cast. Il me faudrait un moyen de dire au solver
de ne pas générer des flottants trop grands (max float) quand
real est un float. Je ne vois pas bien comment faire, mais bon.
Ou alors, je limite systematiquement à max_c_float...
* NF : Je viens d'avoir une erreur en utilisant un dossier dont le nom * Les noms de repertoires avec des espaces foutent la merde .
«
NF : Je viens d'avoir une erreur en utilisant un dossier dont le nom
contient un espace (erreur de gen_stubs). Ceci doit pouvoir être contient un espace (erreur de gen_stubs). Ceci doit pouvoir être
éviter en mettant entre guillemets chaques arguments. Ca ne vaut éviter en mettant entre guillemets chaques arguments. Ca ne vaut
peut être pas le coup de corriger cela (modification du script peut être pas le coup de corriger cela (modification du script
appelant gen_stubs_exe, puis de toutes les commande exécutées par appelant gen_stubs_exe, puis de toutes les commande exécutées par
gen_stubs_exe (appels de cp par exemple)). Une petite note dans la gen_stubs_exe (appels de cp par exemple)). Une petite note dans la
doc peut être suffisante. doc peut être suffisante.
»
* XXX attention a l'affichage du .rif quand lus est syntaxiquement faux dans
l'onglet "diagram manager" d'xlurette.
* cygwin : lurettetop ne marche pas sous un shell cygwin parce qu'il ne
trouve pas le Makefile.lurette. lapin compris pourquoi...
*********** Performances
* time lucky -l 100 six_lines.luc
prend 5 secondes pour n=1000 alors que pour n=10000
time lucky -l 10 six_lines.luc
prend 170 secondes !!! (pour faire autant de tirage in fine ...)
Bien sur, il manipule 10000 variables au lieu de 1000, mais tout de même.
*********** A faire *********** A faire
* precision ne devrait pas vouloir dire "nombre de chiffres apres le virgule"
mais "nombre de chiffres significatifs". Ca me permettrait de plus d'implementer
un Polyhedron.rat_of_float qui soit moint délirant, ainsi que de donner
un max_float qui vaudrait max_int sans risque que ca pete.
* Utiliser le mode --log avec xlurette aussi (pas seulement avec scade_gui)
* j'ai retiré les -I et -L dans Makefile.lurette parce que ca provoquait
des erreurs quand les var telles EXTRA_LIB etaient vides. -> il faudrait
que je les rajoute automatiquement au niveau de xlurette ou mieux,
de lurettetop (quand elles n'y sont pas).
* portage windows
- sim2chro
*** noter quelque part les bidouilles que j'ai du faire
pour compiler le bouzin sous win32
- en particulier, j'ai du faire croire a camlidl que je n'etais
pas sous win32 (#undef _WIN32). En effet, camlidl a été compilé
avec ocamc/mingw et l'option --mno-cygwin. En effet, ...
* autoriser plusieurs automates dans le meme fichier
* gen_stubs devrait etre une API, pas un script * gen_stubs devrait etre une API, pas un script
* quand on quitte lurette, on perd les .o et les executables, ce qui * quand on quitte lurette, on perd les .o et les executables, ce qui
est dommage quand les .c générés sont énormes !!! est dommage quand les .c générés sont énormes !!!
* il me faudrait un bouton "gen fake env" qui fasse l'appel idoine explicitement
plutot que d'avoir a le faire en donnant un environement vide.
* de plus, quand scade genere de fcext.dc, le fait de creer un repertoire <node> * de plus, quand scade genere de fcext.dc, le fait de creer un repertoire <node>
est un peu penible, parce que le plus pratique devient alors de est un peu penible, parce que le plus pratique devient alors de
changer de repertoire en allant dans celui-ci, puis de relancer lurette ... changer de repertoire en allant dans celui-ci, puis de relancer lurette ...
* XXX attention a l'affichage du .rif quand lus est syntaxiquement faux dans * Le remplacement dynamique de .luc est tres surement cassé (les current_nodes
l'onglet "diagram manager" d'xlurette. ne sont pas mis a jour) -> le retester
(nb : cette feature n'est pas documenté de toutes facons, et plus utilisé)
* Au sujet des l'heuristique nbac -> lucky, il faudrait peut-etre verifier * Au sujet des l'heuristique nbac -> lucky, il faudrait peut-etre verifier
que tous les points sont ergodiques (recurrents). que tous les points sont ergodiques (recurrents).
* Dans le mem ordre d'idée : * Dans le meme ordre d'idée :
Cela pourrait etre relativement utile de connaitre les temps de passage Cela pourrait etre relativement utile de connaitre les temps de passage
de chaque noeud (temps au sens, chaine de Markov). En faisant abstraction de chaque noeud (temps au sens, chaine de Markov). En faisant abstraction
...@@ -91,15 +135,6 @@ INCONV ...@@ -91,15 +135,6 @@ INCONV
* utiliser la meme version de caml pour gcc2 et gcc3 car sinon * utiliser la meme version de caml pour gcc2 et gcc3 car sinon
on ne peut pas reproduire les tests a partir de la graine !!! on ne peut pas reproduire les tests a partir de la graine !!!
* cygwin
- xlurette
installer lablgtk
http://wwwfun.kurims.kyoto-u.ac.jp/soft/olabl/dist
-lucky
//PAVE/jahier/cygwin/lib/libcudd_caml.a(cudd_caml.o)(.text+0x1c0e):cudd_caml.c: undefined reference to `_gc_full_major'
- gen_stubs
File /tmp/lurette1/modele_vehicule.h could not be opened.
- sim2chro
* le nom du repertoire share est particulierement mal choisi... * le nom du repertoire share est particulierement mal choisi...
...@@ -119,10 +154,6 @@ INCONV ...@@ -119,10 +154,6 @@ INCONV
* tuer la fenetre de parametres plus proprement. * tuer la fenetre de parametres plus proprement.
* rajouter une option --verbose <int> pour avoir plusieurs niveau de verbosité.
Ameliorer aussi les messages correspondant
* Faire une experience ou je n'utilise plus du tout les bdds mais je * Faire une experience ou je n'utilise plus du tout les bdds mais je
passe par une forme normale pour les booleans pour voir passe par une forme normale pour les booleans pour voir
...@@ -131,28 +162,13 @@ donne une repartition 25/75, et depend de l'ordre dans lequel ...@@ -131,28 +162,13 @@ donne une repartition 25/75, et depend de l'ordre dans lequel
apparaissent les monomes. Ca fout les boules... apparaissent les monomes. Ca fout les boules...
* autoriser plusieurs automates dans le meme fichier
* Finir lucky2lus * Finir lucky2lus
* rajouter une option --reactive dans lucky où il rend ses valeurs precedentes
si aucune formule n'est satisfiable (ainsi que --reactive-no-warning)
* plot a besion de gnu-awk ... Je devrais ecrire moi-meme en caml
le programme qui genere le bon format pour gnuplot...
En plus, Pour les gros fichier, ca rame à donf !
* Finir le compilo lutin de Yvan * Finir le compilo lutin de Yvan
* Les alias doivent ils etre dans le .rif au meme titre * Les alias doivent ils etre dans le .rif au meme titre
que les autres variables locales -> ajouter une option ! que les autres variables locales -> ajouter une option !
* Ajouter la possibilité de pouvoir rejouer un séquence et de la continuer
(? redondant avec la graine ?)
* inclure la libc en statique (comme pascal) * inclure la libc en statique (comme pascal)
ou mettre tous les .so dans un repertoire (comme matlab) ??? ou mettre tous les .so dans un repertoire (comme matlab) ???
......
Cuddaux 0.9:
============
First release.
#=======================================
# Configuration Section
#=======================================
#---------------------------------------
# Directories
#---------------------------------------
SRCDIR = $(shell pwd)
#
#
#
# XXX autoconf
CUDD_INSTALL = $(HOME)/$(HOSTTYPE)
ifndef BIN_INSTALL_DIR
BIN_INSTALL_DIR := $(HOME)/$(HOSTTYPE)/bin
endif
ifndef INC_INSTALL_DIR
INC_INSTALL_DIR := $(HOME)/$(HOSTTYPE)/include
endif
ifndef LIB_INSTALL_DIR
LIB_INSTALL_DIR := $(HOME)/$(HOSTTYPE)/lib
endif
#---------------------------------------
# C part
#---------------------------------------
CC = gcc
ICFLAGS = \
-I$(CUDD_INSTALL)/include \
-Winline -Wimplicit-function-declaration \
-Wall
#
# XCFLAGS should be the same than the one with which CUDD is compiled
#
# i386-linux
# XCFLAGS = -DHAVE_IEEE_754 -DBSD # -mcpu=pentiumpro -malign-double
#XCFLAGS = -mcpu=i386 -DHAVE_IEEE_754 -DBSD
# sparc-sun
# XCFLAGS = -mcpu=ultrasparc -DHAVE_IEEE_754 -DUNIX100
# Windows95/98/NT with Cygwin tools
XCFLAGS = -mcpu=i386 -malign-double -DHAVE_IEEE_754 -DHAVE_GETRLIMIT=0 -DRLIMIT_DATA_DEFAULT=67108864
CFLAGS = $(ICFLAGS) $(XCFLAGS) -O3 -DNDEBUG
CFLAGS_DEBUG = $(ICFLAGS) $(XCFLAGS) -O1 -g -UNDEBUG
CFLAGS_PROF = $(ICFLAGS) $(XCFLAGS) -O3 -DNDEBUG -g -pg
#=======================================
# End of Configuration Section
#=======================================
#---------------------------------------
# Files
#---------------------------------------
CCMODULES = \
cuddauxAddIte cuddauxBridge cuddauxCompose \
cuddauxGenCof cuddauxMisc cuddauxTDGenCof
CCSRC = cuddaux.h cuddauxInt.h $(CCMODULES:%=%.c)
CCLIB_TOINSTALL = libcuddaux.a libcuddaux_debug.a libcuddaux_prof.a
CCINC_TOINSTALL = cuddaux.h
#---------------------------------------
# Rules
#---------------------------------------
# Global rules
all: $(CCLIB_TOINSTALL)
debug: libcuddaux_debug.a
prof: libcuddaux_prof.a
install: all
cp -f $(CCLIB_TOINSTALL) $(LIB_INSTALL_DIR)
cp -f $(CCINC_TOINSTALL) $(INC_INSTALL_DIR)
distclean: mostlyclean
(cd $(LIB_INSTALL_DIR); /bin/rm -f $(CCLIB_TOINSTALL))
(cd $(INC_INSTALL_DIR); /bin/rm -f $(CCINC_TOINSTALL))
mostlyclean:
/bin/rm -f cuddaux.?? cuddaux.??? cuddaux.info
/bin/rm -fr html
clean:
/bin/rm -f *.[ao]
tar: $(CCSRC) Makefile README Changes cuddaux.texi texinfo.tex
(cd ..; tar zcvf $(HOME)/cuddaux.tgz $(^:%=cuddaux/%))
dist: $(CCSRC) Makefile README Changes cuddaux.texi texinfo.tex cuddaux.dvi cuddaux.info html
(cd ..; tar zcvf $(HOME)/cuddaux.tgz $(^:%=cuddaux/%))
# TEX rules
cuddaux.dvi: cuddaux.texi
texi2dvi $<
cuddaux.ps: cuddaux.dvi
dvips -o $@ $<
cuddaux.info: cuddaux.texi
makeinfo --no-split $<
cuddaux.html: cuddaux.texi
texi2html -split=chapter -nosec_nav -subdir=html $<
#--------------------------------------------------------------
# IMPLICIT RULES AND DEPENDENCIES
#--------------------------------------------------------------
.SUFFIXES: .c .h .o .a
#-----------------------------------
# C
#-----------------------------------
libcuddaux.a: $(CCMODULES:%=%.o)
ar rcs libcuddaux.a $^
libcuddaux_debug.a: $(CCMODULES:%=%_debug.o)
ar rcs $@ $^
libcuddaux_prof.a: $(CCMODULES:%=%_prof.o)
ar rcs $@ $^
%.o: %.c cuddaux.h
$(CC) $(CFLAGS) -c -o $@ $<
%_debug.o: %.c cuddaux.h
$(CC) $(CFLAGS_DEBUG) -c -o $@ $<
%_prof.o: %.c cuddaux.h
$(CC) $(CFLAGS_PROF) -c -o $@ $<