Commit e5461c1c authored by Vivien Kraus's avatar Vivien Kraus
Browse files

Resolve "Bagging & stacking"

parent df4b1e83
......@@ -46,6 +46,7 @@ include nsi/Makefile.am
include debian/Makefile.am
include flatpak/Makefile.am
include dataset/Makefile.am
include model/Makefile.am
AM_CPPFLAGS += \
-DLOCALEDIR="\"$(localedir)\"" \
......
......@@ -50,6 +50,7 @@ apt-get install -y \
pkg-config \
r-cran-ggplot2 \
r-cran-glmnet \
r-cran-optparse \
texinfo \
valac \
valgrind \
......
......@@ -25,6 +25,8 @@ TANGLED = \
$(srcdir)/%reldir%/tarot-tune \
$(srcdir)/%reldir%/tarot-learn-tree \
$(srcdir)/%reldir%/tarot-learn-linear \
$(srcdir)/%reldir%/tarot-learn-stacking \
$(srcdir)/%reldir%/gen-prediction-code.xsl \
$(srcdir)/tuneconfig.h \
$(srcdir)/%reldir%/tarot-figures/convergence-parameter.eps \
$(srcdir)/%reldir%/tarot-figures/convergence-parameter.png \
......@@ -41,36 +43,18 @@ EXTRA_DIST += \
%reldir%/setup.el \
$(TANGLED) \
%reldir%/org-stamp \
%reldir%/convergence.csv \
%reldir%/maintainer-tree.xml \
%reldir%/maintainer-linear.xml
%reldir%/convergence.csv
MAINTAINERCLEANFILES += \
$(srcdir)/%reldir%/tarot.texi \
$(TANGLED) \
%reldir%/org-stamp \
%reldir%/maintainer-tree.xml \
%reldir%/maintainer-linear.xml
%reldir%/org-stamp
.PHONY: tune
tune: %reldir%/tarot-tune
$(srcdir)/%reldir%/tarot-tune | tee $(srcdir)/%reldir%/convergence.csv
learn_verbose = $(learn_verbose_@AM_V@)
learn_verbose_ = $(learn_verbose_@AM_DEFAULT_V@)
learn_verbose_0 = @echo " LEARN " $@;
$(srcdir)/%reldir%/maintainer-tree.xml: %reldir%/tarot-learn-tree $(dist_dataset_DATA)
$(MAKE) $(AM_MAKEFLAGS) src/tarot-app/tarot
$(learn_verbose) (cd $(srcdir) && $(abs_top_builddir)/pre-inst-env %reldir%/tarot-learn-tree $(dist_dataset_DATA) | $(XMLLINT) --format - > %reldir%/maintainer-tree.xml-t)
@mv $(srcdir)/%reldir%/maintainer-tree.xml-t $(srcdir)/%reldir%/maintainer-tree.xml
$(srcdir)/%reldir%/maintainer-linear.xml: %reldir%/tarot-learn-linear $(dist_dataset_DATA)
$(MAKE) $(AM_MAKEFLAGS) src/tarot-app/tarot
$(learn_verbose) (cd $(srcdir) && $(abs_top_builddir)/pre-inst-env %reldir%/tarot-learn-linear $(dist_dataset_DATA) | $(XMLLINT) --format - > %reldir%/maintainer-linear.xml-t)
@mv $(srcdir)/%reldir%/maintainer-linear.xml-t $(srcdir)/%reldir%/maintainer-linear.xml
$(srcdir)/%reldir%/org-stamp: %reldir%/tarot.org %reldir%/setup.el %reldir%/convergence.csv
$(org_verbose) cd $(srcdir) && $(EMACS) --batch \
-l %reldir%/setup.el \
......
......@@ -2447,10 +2447,6 @@ This is most easily done with the R =glmnet= package.
y <- data$score
## There are too many individuals yet.
set.seed (42)
cat (sprintf ("Reduced the number of rows from %d to %d\n", nrow (x), 5000), file = stderr ())
i <- sample (seq_len (nrow (x)), 5000)
x <- x[i,]
y <- y[i]
fit <- glmnet::cv.glmnet (x, y)
c <- coef (fit)
cselected <- c[which (c[,1] != 0), 1]
......@@ -2468,7 +2464,11 @@ This is most easily done with the R =glmnet= package.
name <- as.character (model$term[i])
value <- model$weight[i]
names <- strsplit (name, ":")[[1]]
cat (sprintf ("<interaction weight=\"%f\">", value))
if (is.null (model$pvalue)) {
cat (sprintf ("<interaction weight=\"%f\">", value))
} else {
cat (sprintf ("<interaction weight=\"%f\" p-value = \"%f\">", value, model$pvalue[i]))
}
for (name in names) {
cat (sprintf ("<variable name=\"%s\" />", name))
}
......@@ -2479,11 +2479,44 @@ This is most easily done with the R =glmnet= package.
#+END_SRC
*** The learning script
There are two learning scripts: one to learn a tree, and one to learn
a linear model.
a linear model. Of course, to have an ensemble of learners, we have
to introduce some variability. We will do this by sampling 50 games
with replacement (this number could be overriden). The random seed
can be modified too.
The common code is simple: take a sample of the input data.
#+name: learn-common-code
#+BEGIN_SRC R :noweb yes :eval no
suppressPackageStartupMessages (library ("optparse"))
option_list <- list (
make_option (c ("-n", "--n-sampled"), type = "integer", default = 50,
help = "Number of games to sample (default: %default)",
metavar = "number"),
make_option (c ("-s", "--random-seed"), type = "integer", default = NA,
help = "Fix the random seed",
metavar = "number")
)
parser <- OptionParser (usage = "%prog [options] files...", option_list = option_list)
arguments <- parse_args (parser, positional_arguments = TRUE)
opt <- arguments$options
input <- arguments$args
if (!is.na (opt$`random-seed`)) {
set.seed (opt$`random-seed`)
}
which <- sample (seq_len (length (input)), opt$`n-sampled`, replace = TRUE)
input <- input[which]
#+END_SRC
#+BEGIN_SRC R :tangle tarot-learn-tree :shebang "#!/usr/bin/env Rscript" :noweb yes :eval no
options (warn = 1)
<<learn-common-code>>
<<r-function-load-game-features>>
whole_dataset <- do.call (rbind, lapply (commandArgs (trailingOnly = TRUE), load_game_features))
whole_dataset <- do.call (rbind, lapply (input, load_game_features))
<<r-function-learn-tree>>
<<r-function-save-tree>>
cat ("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n")
......@@ -2492,13 +2525,155 @@ a linear model.
#+BEGIN_SRC R :tangle tarot-learn-linear :shebang "#!/usr/bin/env Rscript" :noweb yes :eval no
options (warn = 1)
<<learn-common-code>>
<<r-function-load-game-features>>
whole_dataset <- do.call (rbind, lapply (commandArgs (trailingOnly = TRUE), load_game_features))
whole_dataset <- do.call (rbind, lapply (input, load_game_features))
<<r-function-learn-lasso>>
<<r-function-save-lasso>>
cat ("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n")
print_lasso (learn_lasso (whole_dataset))
#+END_SRC
*** Predicting a score
Once we have learnt the machine learning models, it is now time to
write some prediction code. As the models are fairly simple, this is
not a difficult task.
So, let's define how we do the prediction.
#+BEGIN_SRC xml -i :eval no :tangle gen-prediction-code.xsl :noweb yes
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="text" indent="no"/>
<xsl:strip-space elements="*" />
<xsl:template name="header">
<![CDATA[
<<prediction-header>>]]>
</xsl:template>
<xsl:template name="footer">
<![CDATA[
<<prediction-footer>>]]>
</xsl:template>
<!-- Write a R function definition to vectorize the prediction -->
<xsl:template match="tree">
<xsl:call-template name="header" />
<xsl:text>function (data) {&#xA; sapply (seq_len (nrow (data)), function (i) {&#xA; ret &lt;- 0&#xA;</xsl:text>
<xsl:apply-templates />
<xsl:text> ret&#xA; })&#xA;}</xsl:text>
<xsl:call-template name="footer" />
</xsl:template>
<xsl:template match="split">
<xsl:text> if (data$`</xsl:text><xsl:value-of select="@variable" /><xsl:text>`[i] </xsl:text>
<xsl:value-of select="@operator" /><xsl:text> </xsl:text><xsl:value-of select="@value" /><xsl:text>) {&#xA; ret &lt;- </xsl:text>
<xsl:value-of select="@score" />
<xsl:text>&#xA; }&#xA;</xsl:text>
<xsl:apply-templates />
</xsl:template>
<!-- Write the linear prediction -->
<xsl:template match="linear-model">
<xsl:call-template name="header" />
<xsl:text>function (data) {&#xA; (0&#xA;</xsl:text>
<xsl:apply-templates />
<xsl:text> )&#xA;}&#xA;</xsl:text>
<xsl:call-template name="footer" />
</xsl:template>
<xsl:template match="interaction">
<xsl:text> + </xsl:text><xsl:value-of select="@weight" /><xsl:text> * (1</xsl:text>
<xsl:apply-templates />
<xsl:text>)&#xA;</xsl:text>
</xsl:template>
<xsl:template match="variable[@name != '(Intercept)']">
<xsl:text> * data$`</xsl:text><xsl:value-of select="@name" /><xsl:text>`</xsl:text>
</xsl:template>
</xsl:stylesheet>
#+END_SRC
The script header reads the data, while the footer calls the function.
#+name: prediction-header
#+BEGIN_SRC R :eval no :tangle no
#!/usr/bin/env Rscript
## doc/tarot.org
## This file is part of tarot
## Copyright (C) 2019 Vivien Kraus <vivien@planete-kraus.eu>
##
## This program is free software: you can redistribute it and/or
## modify it under the terms of the GNU General Public License as
## published by the Free Software Foundation, either version 3 of the
## License, or (at your option) any later version.
##
## This program is distributed in the hope that it will be useful, but
## WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
## General Public License for more details.
##
## You should have received a copy of the GNU General Public License
## along with this program. If not, see
## <http://www.gnu.org/licenses/>.
options (warn = 1)
data <- foreign::read.arff (file ("stdin"))
prediction <-
#+END_SRC
#+name: prediction-footer
#+BEGIN_SRC R :eval no :tangle no
yhat <- prediction (data)
writeLines (as.character (yhat))
#+END_SRC
*** Regressor stacking
Stacking is the technique by which we learn a meta regressor, taking
as features the predicted scores of each model, and predicting the
true score. The simplest regressor would be taking the mean of all
outputs, but that would lead to a regressor predicting always small
values.
This is basically the same thing as the previous regressors, except we
do not take the features from the games, but from the native
regressors.
#+BEGIN_SRC R :tangle tarot-learn-stacking :shebang "#!/usr/bin/env Rscript" :noweb yes :eval no
options (warn = 1)
games <- commandArgs (trailingOnly = TRUE)
<<r-function-load-game-features>>
learners <- c (sprintf ("tree-%d", 1:5),
sprintf ("linear-%d", 1:5))
metadata <- function (filename) {
features <- load_game_features (filename)
data_string <- capture.output (foreign::write.arff (features, file = ""), type = c ("output"))
predictions <- do.call (cbind, lapply (learners, function (learner) {
yhat <- as.numeric (system2 (sprintf ("predict-%s", learner),
stdout = TRUE,
input = data_string))
ret <- data.frame (yhat = yhat)
colnames (ret) <- c (learner)
ret
}))
predictions$score <- features$score
predictions
}
dataset <- do.call (rbind, lapply (games, metadata))
model <- lm (score ~ ., data = dataset)
terms <- names (coef (model))
weights <- c (coef (model))
pvalue <- summary (model)$coefficients[,4]
<<r-function-save-lasso>>
print_lasso (data.frame (term = terms, weight = weights, pvalue = pvalue))
#+END_SRC
* GNU Free Documentation License
:PROPERTIES:
:APPENDIX: t
......
# model/Makefile.am
#
# Copyright (C) 2019 Vivien Kraus <vivien@planete-kraus.eu>
#
# This program is free software: you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see
# <http://www.gnu.org/licenses/>.
modeldir = $(pkgdatadir)/model
PREDICTORS = \
%reldir%/predict-tree-1 \
%reldir%/predict-tree-2 \
%reldir%/predict-tree-3 \
%reldir%/predict-tree-4 \
%reldir%/predict-tree-5 \
%reldir%/predict-linear-1 \
%reldir%/predict-linear-2 \
%reldir%/predict-linear-3 \
%reldir%/predict-linear-4 \
%reldir%/predict-linear-5
WEAK_MODELS = \
%reldir%/tree-1.xml \
%reldir%/tree-2.xml \
%reldir%/tree-3.xml \
%reldir%/tree-4.xml \
%reldir%/tree-5.xml \
%reldir%/linear-1.xml \
%reldir%/linear-2.xml \
%reldir%/linear-3.xml \
%reldir%/linear-4.xml \
%reldir%/linear-5.xml
dist_model_DATA = $(WEAK_MODELS) \
%reldir%/stacking.xml
dist_noinst_SCRIPTS += $(PREDICTORS)
learn_verbose = $(learn_verbose_@AM_V@)
learn_verbose_ = $(learn_verbose_@AM_DEFAULT_V@)
learn_verbose_0 = @echo " LEARN " $@;
MAINTAINERCLEANFILES += $(dist_model_DATA) $(PREDICTORS)
$(srcdir)/%reldir%/stacking.xml: doc/tarot-learn-stacking $(PREDICTORS)
$(MAKE) $(AM_MAKEFLAGS) src/tarot-app/tarot
$(learn_verbose) (cd $(srcdir) && $(abs_top_builddir)/pre-inst-env doc/tarot-learn-stacking $(dist_dataset_DATA) | $(XMLLINT) --format - > %reldir%/stacking.xml-t)
@mv $(srcdir)/%reldir%/stacking.xml-t $(srcdir)/%reldir%/stacking.xml
$(srcdir)/%reldir%/tree-1.xml: doc/tarot-learn-tree $(dist_dataset_DATA)
$(MAKE) $(AM_MAKEFLAGS) src/tarot-app/tarot
$(learn_verbose) (cd $(srcdir) && $(abs_top_builddir)/pre-inst-env doc/tarot-learn-tree -s 1 $(dist_dataset_DATA) | $(XMLLINT) --format - > %reldir%/tree-1.xml-t)
@mv $(srcdir)/%reldir%/tree-1.xml-t $(srcdir)/%reldir%/tree-1.xml
$(srcdir)/%reldir%/predict-tree-1: doc/gen-prediction-code.xsl %reldir%/tree-1.xml
$(AM_V_GEN) $(XSLTPROC) $(srcdir)/doc/gen-prediction-code.xsl $(srcdir)/%reldir%/tree-1.xml \
| sed '/^ *$$/d' \
> %reldir%/predict-tree-1-t
@chmod ugo+x %reldir%/predict-tree-1-t
@mv %reldir%/predict-tree-1-t $(srcdir)/%reldir%/predict-tree-1
$(srcdir)/%reldir%/tree-2.xml: doc/tarot-learn-tree $(dist_dataset_DATA)
$(MAKE) $(AM_MAKEFLAGS) src/tarot-app/tarot
$(learn_verbose) (cd $(srcdir) && $(abs_top_builddir)/pre-inst-env doc/tarot-learn-tree -s 2 $(dist_dataset_DATA) | $(XMLLINT) --format - > %reldir%/tree-2.xml-t)
@mv $(srcdir)/%reldir%/tree-2.xml-t $(srcdir)/%reldir%/tree-2.xml
$(srcdir)/%reldir%/predict-tree-2: doc/gen-prediction-code.xsl %reldir%/tree-2.xml
$(AM_V_GEN) $(XSLTPROC) $(srcdir)/doc/gen-prediction-code.xsl $(srcdir)/%reldir%/tree-2.xml \
| sed '/^ *$$/d' \
> %reldir%/predict-tree-2-t
@chmod ugo+x %reldir%/predict-tree-2-t
@mv %reldir%/predict-tree-2-t $(srcdir)/%reldir%/predict-tree-2
$(srcdir)/%reldir%/tree-3.xml: doc/tarot-learn-tree $(dist_dataset_DATA)
$(MAKE) $(AM_MAKEFLAGS) src/tarot-app/tarot
$(learn_verbose) (cd $(srcdir) && $(abs_top_builddir)/pre-inst-env doc/tarot-learn-tree -s 3 $(dist_dataset_DATA) | $(XMLLINT) --format - > %reldir%/tree-3.xml-t)
@mv $(srcdir)/%reldir%/tree-3.xml-t $(srcdir)/%reldir%/tree-3.xml
$(srcdir)/%reldir%/predict-tree-3: doc/gen-prediction-code.xsl %reldir%/tree-3.xml
$(AM_V_GEN) $(XSLTPROC) $(srcdir)/doc/gen-prediction-code.xsl $(srcdir)/%reldir%/tree-3.xml \
| sed '/^ *$$/d' \
> %reldir%/predict-tree-3-t
@chmod ugo+x %reldir%/predict-tree-3-t
@mv %reldir%/predict-tree-3-t $(srcdir)/%reldir%/predict-tree-3
$(srcdir)/%reldir%/tree-4.xml: doc/tarot-learn-tree $(dist_dataset_DATA)
$(MAKE) $(AM_MAKEFLAGS) src/tarot-app/tarot
$(learn_verbose) (cd $(srcdir) && $(abs_top_builddir)/pre-inst-env doc/tarot-learn-tree -s 4 $(dist_dataset_DATA) | $(XMLLINT) --format - > %reldir%/tree-4.xml-t)
@mv $(srcdir)/%reldir%/tree-4.xml-t $(srcdir)/%reldir%/tree-4.xml
$(srcdir)/%reldir%/predict-tree-4: doc/gen-prediction-code.xsl %reldir%/tree-4.xml
$(AM_V_GEN) $(XSLTPROC) $(srcdir)/doc/gen-prediction-code.xsl $(srcdir)/%reldir%/tree-4.xml \
| sed '/^ *$$/d' \
> %reldir%/predict-tree-4-t
@chmod ugo+x %reldir%/predict-tree-4-t
@mv %reldir%/predict-tree-4-t $(srcdir)/%reldir%/predict-tree-4
$(srcdir)/%reldir%/tree-5.xml: doc/tarot-learn-tree $(dist_dataset_DATA)
$(MAKE) $(AM_MAKEFLAGS) src/tarot-app/tarot
$(learn_verbose) (cd $(srcdir) && $(abs_top_builddir)/pre-inst-env doc/tarot-learn-tree -s 5 $(dist_dataset_DATA) | $(XMLLINT) --format - > %reldir%/tree-5.xml-t)
@mv $(srcdir)/%reldir%/tree-5.xml-t $(srcdir)/%reldir%/tree-5.xml
$(srcdir)/%reldir%/predict-tree-5: doc/gen-prediction-code.xsl %reldir%/tree-5.xml
$(AM_V_GEN) $(XSLTPROC) $(srcdir)/doc/gen-prediction-code.xsl $(srcdir)/%reldir%/tree-5.xml \
| sed '/^ *$$/d' \
> %reldir%/predict-tree-5-t
@chmod ugo+x %reldir%/predict-tree-5-t
@mv %reldir%/predict-tree-5-t $(srcdir)/%reldir%/predict-tree-5
$(srcdir)/%reldir%/linear-1.xml: doc/tarot-learn-linear $(dist_dataset_DATA)
$(MAKE) $(AM_MAKEFLAGS) src/tarot-app/tarot
$(learn_verbose) (cd $(srcdir) && $(abs_top_builddir)/pre-inst-env doc/tarot-learn-linear -s 1 $(dist_dataset_DATA) | $(XMLLINT) --format - > %reldir%/linear-1.xml-t)
@mv $(srcdir)/%reldir%/linear-1.xml-t $(srcdir)/%reldir%/linear-1.xml
$(srcdir)/%reldir%/predict-linear-1: doc/gen-prediction-code.xsl %reldir%/linear-1.xml
$(AM_V_GEN) $(XSLTPROC) $(srcdir)/doc/gen-prediction-code.xsl $(srcdir)/%reldir%/linear-1.xml \
| sed '/^ *$$/d' \
> %reldir%/predict-linear-1-t
@chmod ugo+x %reldir%/predict-linear-1-t
@mv %reldir%/predict-linear-1-t $(srcdir)/%reldir%/predict-linear-1
$(srcdir)/%reldir%/linear-2.xml: doc/tarot-learn-linear $(dist_dataset_DATA)
$(MAKE) $(AM_MAKEFLAGS) src/tarot-app/tarot
$(learn_verbose) (cd $(srcdir) && $(abs_top_builddir)/pre-inst-env doc/tarot-learn-linear -s 2 $(dist_dataset_DATA) | $(XMLLINT) --format - > %reldir%/linear-2.xml-t)
@mv $(srcdir)/%reldir%/linear-2.xml-t $(srcdir)/%reldir%/linear-2.xml
$(srcdir)/%reldir%/predict-linear-2: doc/gen-prediction-code.xsl %reldir%/linear-2.xml
$(AM_V_GEN) $(XSLTPROC) $(srcdir)/doc/gen-prediction-code.xsl $(srcdir)/%reldir%/linear-2.xml \
| sed '/^ *$$/d' \
> %reldir%/predict-linear-2-t
@chmod ugo+x %reldir%/predict-linear-2-t
@mv %reldir%/predict-linear-2-t $(srcdir)/%reldir%/predict-linear-2
$(srcdir)/%reldir%/linear-3.xml: doc/tarot-learn-linear $(dist_dataset_DATA)
$(MAKE) $(AM_MAKEFLAGS) src/tarot-app/tarot
$(learn_verbose) (cd $(srcdir) && $(abs_top_builddir)/pre-inst-env doc/tarot-learn-linear -s 3 $(dist_dataset_DATA) | $(XMLLINT) --format - > %reldir%/linear-3.xml-t)
@mv $(srcdir)/%reldir%/linear-3.xml-t $(srcdir)/%reldir%/linear-3.xml
$(srcdir)/%reldir%/predict-linear-3: doc/gen-prediction-code.xsl %reldir%/linear-3.xml
$(AM_V_GEN) $(XSLTPROC) $(srcdir)/doc/gen-prediction-code.xsl $(srcdir)/%reldir%/linear-3.xml \
| sed '/^ *$$/d' \
> %reldir%/predict-linear-3-t
@chmod ugo+x %reldir%/predict-linear-3-t
@mv %reldir%/predict-linear-3-t $(srcdir)/%reldir%/predict-linear-3
$(srcdir)/%reldir%/linear-4.xml: doc/tarot-learn-linear $(dist_dataset_DATA)
$(MAKE) $(AM_MAKEFLAGS) src/tarot-app/tarot
$(learn_verbose) (cd $(srcdir) && $(abs_top_builddir)/pre-inst-env doc/tarot-learn-linear -s 4 $(dist_dataset_DATA) | $(XMLLINT) --format - > %reldir%/linear-4.xml-t)
@mv $(srcdir)/%reldir%/linear-4.xml-t $(srcdir)/%reldir%/linear-4.xml
$(srcdir)/%reldir%/predict-linear-4: doc/gen-prediction-code.xsl %reldir%/linear-4.xml
$(AM_V_GEN) $(XSLTPROC) $(srcdir)/doc/gen-prediction-code.xsl $(srcdir)/%reldir%/linear-4.xml \
| sed '/^ *$$/d' \
> %reldir%/predict-linear-4-t
@chmod ugo+x %reldir%/predict-linear-4-t
@mv %reldir%/predict-linear-4-t $(srcdir)/%reldir%/predict-linear-4
$(srcdir)/%reldir%/linear-5.xml: doc/tarot-learn-linear $(dist_dataset_DATA)
$(MAKE) $(AM_MAKEFLAGS) src/tarot-app/tarot
$(learn_verbose) (cd $(srcdir) && $(abs_top_builddir)/pre-inst-env doc/tarot-learn-linear -s 5 $(dist_dataset_DATA) | $(XMLLINT) --format - > %reldir%/linear-5.xml-t)
@mv $(srcdir)/%reldir%/linear-5.xml-t $(srcdir)/%reldir%/linear-5.xml
$(srcdir)/%reldir%/predict-linear-5: doc/gen-prediction-code.xsl %reldir%/linear-5.xml
$(AM_V_GEN) $(XSLTPROC) $(srcdir)/doc/gen-prediction-code.xsl $(srcdir)/%reldir%/linear-5.xml \
| sed '/^ *$$/d' \
> %reldir%/predict-linear-5-t
@chmod ugo+x %reldir%/predict-linear-5-t
@mv %reldir%/predict-linear-5-t $(srcdir)/%reldir%/predict-linear-5
......@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: tarot 0.4.2.83-ebdc-dirty\n"
"Report-Msgid-Bugs-To: vivien@planete-kraus.eu\n"
"POT-Creation-Date: 2019-06-02 16:35+0200\n"
"POT-Creation-Date: 2019-06-04 23:01+0200\n"
"PO-Revision-Date: 2019-06-02 16:35+0200\n"
"Last-Translator: Vivien Kraus <vivien@planete-kraus.eu>\n"
"Language-Team: French\n"
......
......@@ -2,7 +2,7 @@
abs_top_srcdir="@abs_top_srcdir@"
abs_top_builddir="@abs_top_builddir@"
export TAROT_HEADER_ARFF="@abs_top_srcdir@/src/features/tarot-header.arff"
export PATH="$abs_top_builddir/src/tarot-app:$PATH"
export PATH="$abs_top_builddir/src/tarot-app:$abs_top_srcdir/model:$PATH"
export LD_LIBRARY_PATH="$abs_top_builddir/src/.libs:$LD_LIBRARY_PATH"
export GUILE_AUTO_COMPILE=1
export GUILE_LOAD_PATH="$abs_top_srcdir/src/scm:$abs_top_builddir/src/scm:$GUILE_LOAD_PATH"
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment