Index: /reasoner/conclusion.tex
===================================================================
--- /reasoner/conclusion.tex	(revision 276)
+++ /reasoner/conclusion.tex	(revision 277)
@@ -10,9 +10,10 @@
 
 \begin{itemize}
-    \item Analyze constraints for their properties with respect to the actual reasoning mode before translating them. In most cases, this may blur the code or require a traversal of the constraint syntax tree, i.e., it may easily lead to an adverse effect to reasoning time.
-    \item Immediate evaluation of default value constraints and storing only initially failing assignment constraints in the constraint base. Although this appears to be a rather simple idea, an initial experiment showed that it neither works for deferred default values nor for (nested) default values of constraint variables, the latter due to side effects of immediate constraint re-scheduling.
-    \item Integrate a type-based cache with the variable mapping to avoid translating complex types from scratch over and over again. While this may lead to a slow down for smaller models, it may lead to a reduction of the translation time in general.
-    \item Unrolling quantified expressions so that only simple constraints (with IVML operations) are added to the constraint base. This is an opportunity implying many tradeoffs. While unrolling will enlarge the constraint base, it may also ease the integration of further reasoning steps that do not support quantification. Unrolling will increase the size of the constraint base and, thus, require more memory, but as only simple constraints are evaluated, only failing sub-constraints instead of the quantified constraint must be re-scheduled. However, additional tracking is needed to correctly evaluate (embedded) quantors, e.g., in case of existential quantification. Moreover, this idea increases the complexity of the re-scheduling, as sub-constraints must be added or removed when container and container element values change.
-    \item Several operations of the underlying IVML model may require a critical revision with respect to performance. As these operations are frequently called, they may have an hidden effect on the performance of the reasoner. Probably also some leaf node types of the Constraint tree might be merged wit Model elements, e.g., variable use vs.~ variable declaration;
+    \item \emph{Analyze constraint properties} with respect to the actual reasoning mode before translating them. In most cases, this may blur the code or require a traversal of the constraint syntax tree, i.e., it may easily lead to an adverse effect to reasoning time.
+    \item \emph{Immediate evaluation of default value constraints} and storing only initially failing assignment constraints in the constraint base. Although this appears to be a rather simple idea, an initial experiment showed that it neither works for deferred default values nor for (nested) default values of constraint variables, the latter due to side effects of immediate constraint re-scheduling.
+    \item Integrate a \emph{type-based cache} with the variable mapping to avoid translating complex types from scratch over and over again. Caches are typically a simple mean to improve performance~\cite{Shirazi02}. However, a type cache for the IVML reasoner is neither simple nor improving the performance as we figured out in an additional experiment. To cope with annotations and constraint variables, a type cache for compound types must store/restore the actual variable mapping and be integrated with the constraint scheduling. An initial run with 10 intra-experiment repetitions using the treatments introduced in Section \ref{sectEvaluation} leads to a slowdown of 1ms regarding average and around 20\% regarding maximum reasoning time. Due to a different translation path, supporting derived types leads to even more modifications. In summary, we believe that caching will not improve the overall performance of the reasoner.
+    \item \emph{Unrolling quantified expressions} so that only simple constraints (with IVML operations) are added to the constraint base. This is an opportunity implying many tradeoffs. While unrolling will enlarge the constraint base, it may also ease the integration of further reasoning steps that do not support quantification. Unrolling will increase the size of the constraint base and, thus, require more memory, but as only simple constraints are evaluated, only failing sub-constraints instead of the quantified constraint must be re-scheduled. However, additional tracking is needed to correctly evaluate (embedded) quantors, e.g., in case of existential quantification. Moreover, this idea increases the complexity of the re-scheduling, as sub-constraints must be added or removed when container and container element values change.
+    \item Several operations of the underlying \emph{IVML model} may require a critical revision with respect to performance. As these operations are frequently called, they may have an hidden effect on the performance of the reasoner. Probably also some leaf node types of the Constraint tree might be merged wit Model elements, e.g., variable use vs.~ variable declaration.
+    \item Improve the \emph{execution speed of the tests} to allow for regular experiments and automatic analysis of performance degradation. Switching off unneeded output and properly cleaning up model copies during the tests already led to a speedup of around 25\% for initial run experiments.
 \end{itemize}
 
Index: /reasoner/evaluation.tex
===================================================================
--- /reasoner/evaluation.tex	(revision 276)
+++ /reasoner/evaluation.tex	(revision 277)
@@ -63,5 +63,5 @@
   \item\label{newLaptopId} Actual office laptop: Dell Latitude 7490 laptop with Intel core i7-8650 U processor (4 physical cores at 1.9 GHz), 32 GBytes RAM with Windows 10 Professional (10.0.17134) and Open JDK 1.8.0.201 64 bit as well 10.0.2 64 bit. The installation here relies on OpenJDK instead of Oracle JDK due to licensing issues. Besides Maven 3.2.3, ANT 1.10.3 with Maven-ANT-tasks 2.1.3, an Eclipse Oxygen 3a release 4.7.3a are installed. 
   \item\label{jenkinsId} Our continuous integration server, a Ubuntu Linux 16.4.5 LTS VM with 4 GBytes RAM and OpenJDK 8 64bit. The measurement script is integrated as a manual build action that prevents any other continuous build action running at the same time.
-  \item\label{piId} A Raspberry Pi 3 by vendor element14 hosting an 8 GB SanDisk class-4 SD (a device used in \cite{KnocheEichelberger18}) with Raspbian Stretch Lite version November 2018, Linux Kernel 4.14 and Oracle JDK 1.8.\TBD{65} ARM. % and, as alternative for some experiments, Oracle JDK 1.8.0\_201 ARM.
+  \item\label{piId} A Raspberry Pi 3 by vendor element14 hosting an 8 GB SanDisk class-4 SD (a device used in \cite{KnocheEichelberger18}) with Raspbian Stretch Lite version November 2018, Linux Kernel 4.14 and Oracle JDK 1.8.0\_65 ARM. % and, as alternative for some experiments, Oracle JDK 1.8.0\_201 ARM.
 \end{enumerate}
 
Index: /reasoner/measures/logTypeCache.txt
===================================================================
--- /reasoner/measures/logTypeCache.txt	(revision 277)
+++ /reasoner/measures/logTypeCache.txt	(revision 277)
@@ -0,0 +1,17 @@
+typeCache
+
+[1] "#tests;434"
+[1] "reasoning time;0;15.8097432521396;571.714285714286"
+[1] "translation time;0;6.72531270572745;272.428571428571"
+[1] "evaluation time;0;5.35763660302831;248.285714285714"
+[1] "constraints count;0;692.767281105991;28645"
+[1] "reevaluation count;0;796.50362080316;33428.4285714286"
+
+no typeCache
+
+[1] "#tests;434"
+[1] "reasoning time;0;14.6031928900592;462.142857142857"
+[1] "translation time;0;5.99193548387097;221"
+[1] "evaluation time;0;4.61191573403555;210.285714285714"
+[1] "constraints count;0;476.993087557604;18300"
+[1] "reevaluation count;0;554.825543120474;21621.5714285714"
Index: /reasoner/measures/script.r
===================================================================
--- /reasoner/measures/script.r	(revision 276)
+++ /reasoner/measures/script.r	(revision 277)
@@ -115,5 +115,5 @@
     tmp.resTables <- list()
     if (repetitions == 1) {
-        tmp.table <- my.readFile(folder, filenames[f], repetitions, skip, statCols, skipT) 
+        tmp.table <- my.readFile(folder, filenames[f], 0, skip, statCols, skipT) 
     } else {
       for (run in 1:fullRepetitions){
@@ -286,5 +286,12 @@
 }
 
-my.processAll(dataBaseDir)
+#uncomment for processing all
+#my.processAll(dataBaseDir)
+
+#uncomment for processing just initial runs
+#iDir <- paste(dataBaseDir, "benchmark-results-new-1.3-ojdk10-typeCache", sep="/")
+#iData <- my.readData(iDir, 1)
+#my.createDiagrams(iData, iDir, 1)
+
 
 # DEBUGGING STUFF
