aboutsummaryrefslogtreecommitdiffstats
path: root/Tests/MODELS2020-CaseStudies/case.study.pledge.run/MODELS2020Plots-temp.ipynb
blob: b91d8e53d84ba1256c9f0c7af42e4041881f99f3 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Data analysis for the paper \"Automated Generation of Consistent Models with Structural and Attribute Constraints\""
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "First, let's load some packages."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Loading required package: tidyverse\n",
      "\n",
      "── \u001b[1mAttaching packages\u001b[22m ─────────────────────────────────────── tidyverse 1.3.0 ──\n",
      "\n",
      "\u001b[32m✔\u001b[39m \u001b[34mggplot2\u001b[39m 3.3.2     \u001b[32m✔\u001b[39m \u001b[34mpurrr  \u001b[39m 0.3.4\n",
      "\u001b[32m✔\u001b[39m \u001b[34mtibble \u001b[39m 3.0.3     \u001b[32m✔\u001b[39m \u001b[34mdplyr  \u001b[39m 1.0.0\n",
      "\u001b[32m✔\u001b[39m \u001b[34mtidyr  \u001b[39m 1.1.0     \u001b[32m✔\u001b[39m \u001b[34mstringr\u001b[39m 1.4.0\n",
      "\u001b[32m✔\u001b[39m \u001b[34mreadr  \u001b[39m 1.3.1     \u001b[32m✔\u001b[39m \u001b[34mforcats\u001b[39m 0.5.0\n",
      "\n",
      "Warning message:\n",
      "“package ‘ggplot2’ was built under R version 4.0.1”\n",
      "Warning message:\n",
      "“package ‘tibble’ was built under R version 4.0.2”\n",
      "── \u001b[1mConflicts\u001b[22m ────────────────────────────────────────── tidyverse_conflicts() ──\n",
      "\u001b[31m✖\u001b[39m \u001b[34mdplyr\u001b[39m::\u001b[32mfilter()\u001b[39m masks \u001b[34mstats\u001b[39m::filter()\n",
      "\u001b[31m✖\u001b[39m \u001b[34mdplyr\u001b[39m::\u001b[32mlag()\u001b[39m    masks \u001b[34mstats\u001b[39m::lag()\n",
      "\n",
      "Warning message in dir.create(\"plots\"):\n",
      "“'plots' already exists”\n"
     ]
    }
   ],
   "source": [
    "require(tidyverse)\n",
    "dir.create('plots')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "scrolled": false
   },
   "outputs": [],
   "source": [
    "ProcessDetailedStatistics <- function(str) {\n",
    "    str <- sub('TransformationExecutionTime', 'TransformationExecutionTime:', str)\n",
    "    str <- sub('Backtrackingtime', 'BacktrackingTime', str)\n",
    "    str <- gsub('\\\\(|\\\\)', '', str)\n",
    "    str <- lapply(strsplit(str, '\\\\||:'), function (v) {\n",
    "        dim(v) <- c(2, 12)\n",
    "        values <- as.double(v[2,])\n",
    "        names(values) <- v[1,]\n",
    "        as.data.frame(t(values))\n",
    "    })\n",
    "    str\n",
    "}\n",
    "Load10Log <- function(filename, size) {\n",
    "    read_csv(filename, col_types = cols(\n",
    "      .default = col_double(),\n",
    "      Result = col_character(),\n",
    "      Solution1DetailedStatistics = col_character(),\n",
    "      Solution2DetailedStatistics = col_character(),\n",
    "      Solution3DetailedStatistics = col_character(),\n",
    "      Solution4DetailedStatistics = col_character(),\n",
    "      Solution5DetailedStatistics = col_character(),\n",
    "      Solution6DetailedStatistics = col_character(),\n",
    "      Solution7DetailedStatistics = col_character(),\n",
    "      Solution8DetailedStatistics = col_character(),\n",
    "      Solution9DetailedStatistics = col_character(),\n",
    "      Solution10DetailedStatistics = col_character()\n",
    "    )) %>% transmute(\n",
    "        n = size,\n",
    "        Run = Run,\n",
    "        preprocessingTime = get('Domain to logic transformation time') + get('Logic to solver transformation time') + ExplorationInitializationTime,\n",
    "        Solution0FoundAt = Solution0FoundAt,\n",
    "        additionalTime = Solution9FoundAt - Solution0FoundAt,\n",
    "        Solution1DetailedStatistics = ProcessDetailedStatistics(Solution1DetailedStatistics)\n",
    "    ) %>% unnest() %>% mutate(\n",
    "        # (Logical) constraint evluation should count as refinement.\n",
    "        ForwardTime = ForwardTime + GlobalConstraintEvaluationTime + FitnessCalculationTime,\n",
    "        preprocessingTime = preprocessingTime,\n",
    "        BacktrackingTime = Solution0FoundAt - (StateCoderTime + ForwardTime + NumericalSolverSumTime)\n",
    "    ) %>% select(n, Run, preprocessingTime, StateCoderTime, ForwardTime, BacktrackingTime, NumericalSolverSumTime, additionalTime)\n",
    "}\n",
    "Load1Log <- function(filename, size) {\n",
    "    read_csv(filename, col_types = cols(\n",
    "      .default = col_double(),\n",
    "      Result = col_character(),\n",
    "      Solution1DetailedStatistics = col_character()\n",
    "    )) %>% filter(Result == \"ModelResultImpl\") %>% transmute(\n",
    "        n = size,\n",
    "        Run = Run,\n",
    "        preprocessingTime = get('Domain to logic transformation time') + get('Logic to solver transformation time') + ExplorationInitializationTime,\n",
    "        Solution0FoundAt = Solution0FoundAt,\n",
    "        Solution1DetailedStatistics = ProcessDetailedStatistics(Solution1DetailedStatistics)\n",
    "    ) %>% unnest(cols = c(Solution1DetailedStatistics)) %>% mutate(\n",
    "        ForwardTime = ForwardTime + GlobalConstraintEvaluationTime + FitnessCalculationTime,\n",
    "        BacktrackingTime = Solution0FoundAt - (StateCoderTime + ForwardTime + NumericalSolverSumTime)\n",
    "    ) %>% select(n, Run, preprocessingTime, StateCoderTime, ForwardTime, BacktrackingTime, NumericalSolverSumTime)\n",
    "}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "ProcessRQ1 <- function(df) {\n",
    "    df %>% group_by(n) %>% summarize(\n",
    "        .groups = 'drop',\n",
    "        time = median(preprocessingTime + StateCoderTime + ForwardTime + BacktrackingTime + NumericalSolverSumTime) / 1000.0\n",
    "    )\n",
    "}\n",
    "ProcessRQ2 <- function(df) {\n",
    "    df %>% group_by(n) %>% summarize(\n",
    "        .groups = 'drop',\n",
    "        preprocessingTime = median(preprocessingTime) / 1000.0,\n",
    "        StateCoderTime = median(StateCoderTime) / 1000.0,\n",
    "        ForwardTime = median(ForwardTime) / 1000.0,\n",
    "        BacktrackingTime = median(BacktrackingTime) / 1000.0,\n",
    "        NumericalSolverSumTime = median(NumericalSolverSumTime) / 1000.0,\n",
    "        additionalTime = median(additionalTime) / 1000.0\n",
    "    )\n",
    "}\n",
    "ProcessRQ3 <- ProcessRQ1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "RQ2Plot <- function(df, name) {\n",
    "    df <- df %>% gather(name, value, -n) %>% filter(name != \"preprocessingTime\")\n",
    "    df$name <- factor(df$name, levels=rev(c('ForwardTime', 'BacktrackingTime', 'StateCoderTime', 'NumericalSolverSumTime', 'additionalTime')))\n",
    "    plot <- df %>% ggplot(aes(x=n, y=value, fill=name)) +\n",
    "        geom_bar(stat='identity') +\n",
    "        scale_fill_brewer(palette='Set2',\n",
    "                          labels=rev(c('Refinement', 'Backtracking', 'State Coding', 'SMT Solver Calls', 'Additional Model Generation')),\n",
    "                          guide=FALSE) +\n",
    "        scale_x_continuous(breaks=c(20, 40, 60, 80, 100), name=\"Model Size (# nodes)\") +\n",
    "        scale_y_continuous(name=\"Runtime (s)\") +\n",
    "        theme_bw()\n",
    "    ggsave(plot=plot, filename=paste0('plots/plot_RQ2_', name, '.pdf'), width=3.5, height=2.5)\n",
    "    plot\n",
    "}"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Fam domain"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Warning message:\n",
      "“`cols` is now required when using unnest().\n",
      "Please use `cols = c(Solution1DetailedStatistics)`”\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<table>\n",
       "<caption>A tibble: 1 × 8</caption>\n",
       "<thead>\n",
       "\t<tr><th scope=col>n</th><th scope=col>Run</th><th scope=col>preprocessingTime</th><th scope=col>StateCoderTime</th><th scope=col>ForwardTime</th><th scope=col>BacktrackingTime</th><th scope=col>NumericalSolverSumTime</th><th scope=col>additionalTime</th></tr>\n",
       "\t<tr><th scope=col>&lt;dbl&gt;</th><th scope=col>&lt;dbl&gt;</th><th scope=col>&lt;dbl&gt;</th><th scope=col>&lt;dbl&gt;</th><th scope=col>&lt;dbl&gt;</th><th scope=col>&lt;dbl&gt;</th><th scope=col>&lt;dbl&gt;</th><th scope=col>&lt;dbl&gt;</th></tr>\n",
       "</thead>\n",
       "<tbody>\n",
       "\t<tr><td>20</td><td>1</td><td>14735</td><td>994</td><td>1890</td><td>1272</td><td>4391</td><td>14750</td></tr>\n",
       "</tbody>\n",
       "</table>\n"
      ],
      "text/latex": [
       "A tibble: 1 × 8\n",
       "\\begin{tabular}{llllllll}\n",
       " n & Run & preprocessingTime & StateCoderTime & ForwardTime & BacktrackingTime & NumericalSolverSumTime & additionalTime\\\\\n",
       " <dbl> & <dbl> & <dbl> & <dbl> & <dbl> & <dbl> & <dbl> & <dbl>\\\\\n",
       "\\hline\n",
       "\t 20 & 1 & 14735 & 994 & 1890 & 1272 & 4391 & 14750\\\\\n",
       "\\end{tabular}\n"
      ],
      "text/markdown": [
       "\n",
       "A tibble: 1 × 8\n",
       "\n",
       "| n &lt;dbl&gt; | Run &lt;dbl&gt; | preprocessingTime &lt;dbl&gt; | StateCoderTime &lt;dbl&gt; | ForwardTime &lt;dbl&gt; | BacktrackingTime &lt;dbl&gt; | NumericalSolverSumTime &lt;dbl&gt; | additionalTime &lt;dbl&gt; |\n",
       "|---|---|---|---|---|---|---|---|\n",
       "| 20 | 1 | 14735 | 994 | 1890 | 1272 | 4391 | 14750 |\n",
       "\n"
      ],
      "text/plain": [
       "  n  Run preprocessingTime StateCoderTime ForwardTime BacktrackingTime\n",
       "1 20 1   14735             994            1890        1272            \n",
       "  NumericalSolverSumTime additionalTime\n",
       "1 4391                   14750         "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<table>\n",
       "<caption>A tibble: 1 × 7</caption>\n",
       "<thead>\n",
       "\t<tr><th scope=col>n</th><th scope=col>preprocessingTime</th><th scope=col>StateCoderTime</th><th scope=col>ForwardTime</th><th scope=col>BacktrackingTime</th><th scope=col>NumericalSolverSumTime</th><th scope=col>additionalTime</th></tr>\n",
       "\t<tr><th scope=col>&lt;dbl&gt;</th><th scope=col>&lt;dbl&gt;</th><th scope=col>&lt;dbl&gt;</th><th scope=col>&lt;dbl&gt;</th><th scope=col>&lt;dbl&gt;</th><th scope=col>&lt;dbl&gt;</th><th scope=col>&lt;dbl&gt;</th></tr>\n",
       "</thead>\n",
       "<tbody>\n",
       "\t<tr><td>20</td><td>14.735</td><td>0.994</td><td>1.89</td><td>1.272</td><td>4.391</td><td>14.75</td></tr>\n",
       "</tbody>\n",
       "</table>\n"
      ],
      "text/latex": [
       "A tibble: 1 × 7\n",
       "\\begin{tabular}{lllllll}\n",
       " n & preprocessingTime & StateCoderTime & ForwardTime & BacktrackingTime & NumericalSolverSumTime & additionalTime\\\\\n",
       " <dbl> & <dbl> & <dbl> & <dbl> & <dbl> & <dbl> & <dbl>\\\\\n",
       "\\hline\n",
       "\t 20 & 14.735 & 0.994 & 1.89 & 1.272 & 4.391 & 14.75\\\\\n",
       "\\end{tabular}\n"
      ],
      "text/markdown": [
       "\n",
       "A tibble: 1 × 7\n",
       "\n",
       "| n &lt;dbl&gt; | preprocessingTime &lt;dbl&gt; | StateCoderTime &lt;dbl&gt; | ForwardTime &lt;dbl&gt; | BacktrackingTime &lt;dbl&gt; | NumericalSolverSumTime &lt;dbl&gt; | additionalTime &lt;dbl&gt; |\n",
       "|---|---|---|---|---|---|---|\n",
       "| 20 | 14.735 | 0.994 | 1.89 | 1.272 | 4.391 | 14.75 |\n",
       "\n"
      ],
      "text/plain": [
       "  n  preprocessingTime StateCoderTime ForwardTime BacktrackingTime\n",
       "1 20 14.735            0.994          1.89        1.272           \n",
       "  NumericalSolverSumTime additionalTime\n",
       "1 4.391                  14.75         "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "14.735"
      ],
      "text/latex": [
       "14.735"
      ],
      "text/markdown": [
       "14.735"
      ],
      "text/plain": [
       "[1] 14.735"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0gAAANICAMAAADKOT/pAAAC+lBMVEUAAAABAQECAgIDAwME\nBAQFBQUGBgYHBwcICAgJCQkKCgoLCwsMDAwNDQ0ODg4PDw8QEBARERESEhITExMUFBQVFRUW\nFhYXFxcYGBgZGRkaGhobGxscHBwdHR0eHh4fHx8gICAhISEiIiIjIyMkJCQlJSUmJiYnJyco\nKCgpKSkqKiorKyssLCwtLS0uLi4vLy8wMDAxMTEyMjIzMzM0NDQ1NTU2NjY3Nzc4ODg5OTk6\nOjo7Ozs8PDw9PT0+Pj4/Pz9AQEBBQUFCQkJDQ0NERERFRUVGRkZHR0dISEhJSUlKSkpLS0tM\nTExNTU1OTk5PT09QUFBRUVFSUlJTU1NUVFRVVVVWVlZXV1dYWFhZWVlaWlpbW1tcXFxdXV1e\nXl5fX19gYGBhYWFiYmJjY2NkZGRlZWVmZmZmwqVoaGhpaWlqampra2tsbGxtbW1ubm5vb29w\ncHBxcXFycnJzc3N0dHR1dXV2dnZ3d3d4eHh5eXl6enp7e3t8fHx9fX1+fn5/f3+AgICBgYGC\ngoKDg4OEhISFhYWGhoaHh4eIiIiJiYmKioqLi4uMjIyNjY2NoMuOjo6Pj4+RkZGSkpKTk5OV\nlZWWlpaXl5eYmJiampqbm5ucnJydnZ2enp6fn5+goKChoaGjo6OkpKSlpaWmpqam2FSnp6eo\nqKipqamqqqqrq6usrKytra2urq6vr6+wsLCxsbGzs7O0tLS1tbW2tra3t7e4uLi5ubm6urq7\nu7u8vLy9vb2+vr6/v7/AwMDBwcHCwsLDw8PExMTFxcXGxsbHx8fIyMjJycnKysrLy8vMzMzO\nzs7Pz8/Q0NDR0dHS0tLT09PU1NTV1dXW1tbX19fY2NjZ2dna2trb29vc3Nzd3d3e3t7f39/g\n4ODh4eHi4uLj4+Pk5OTl5eXm5ubnisPn5+fo6Ojp6enq6urr6+vs7Ozt7e3u7u7v7+/w8PDx\n8fHy8vLz8/P09PT19fX29vb39/f4+Pj5+fn6+vr7+/v8jWL8/Pz9/f3+/v7///9xBoAgAAAA\nCXBIWXMAABJ0AAASdAHeZh94AAAXzUlEQVR4nO3dfbwddWHn8SGQRHmQWp4UUbr1AV0whYaC\nBbEVWGorSZCHUAISEh5WBBdFu9BCF1jasBWosZYtAgrSRYoPFdAIimBdgoKGCrIIibYEFsIl\n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",
      "text/plain": [
       "plot without title"
      ]
     },
     "metadata": {
      "image/png": {
       "height": 420,
       "width": 420
      },
      "text/plain": {
       "height": 420,
       "width": 420
      }
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "FamilyTreeRQ2Raw <- rbind(\n",
    "#     Load10Log(\"measurements/stats/FamilyTree//size010to-1r10n10rt300nsdrealstats_06-0249.csv\", 10),\n",
    "    Load10Log(\"measurements1/stats.csv\", 20)\n",
    ")\n",
    "FamilyTreeRQ2Raw\n",
    "FamilyTreeRQ2 <- FamilyTreeRQ2Raw %>% ProcessRQ2\n",
    "FamilyTreeRQ2\n",
    "median(FamilyTreeRQ2Raw$preprocessingTime) / 1000.0\n",
    "FamilyTreeRQ2 %>% RQ2Plot('FamilyTree')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "R",
   "language": "R",
   "name": "ir"
  },
  "language_info": {
   "codemirror_mode": "r",
   "file_extension": ".r",
   "mimetype": "text/x-r-source",
   "name": "R",
   "pygments_lexer": "r",
   "version": "4.0.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}