From a7d172f277b926eb4c04591df9763df06a6f8bf9 Mon Sep 17 00:00:00 2001 From: Antongiacomo Polimeno Date: Tue, 2 Apr 2024 19:54:24 +0200 Subject: [PATCH] wip --- experiment.tex | 54 +++++++++++++++++---------- main.pdf | Bin 316831 -> 318992 bytes metrics.tex | 8 ++-- motivations.tex | 2 +- pipeline_instance.tex | 4 +- pipeline_template.tex | 2 +- system_model.tex | 2 +- text.tex | 84 +++++++++++++++++++++--------------------- 8 files changed, 86 insertions(+), 70 deletions(-) diff --git a/experiment.tex b/experiment.tex index b08ff5f..51e3a4c 100644 --- a/experiment.tex +++ b/experiment.tex @@ -5,10 +5,10 @@ % \cref{subsec:experiments_infrastructure} presents the simulator and testing infrastructure adopted in our experiments, as well as the complete experimental settings; \cref{subsec:experiments_performance} analyses the performance of our solution in terms of execution time; \cref{subsec:experiments_quality} presents the quality of our heuristic algorithm in terms of the metrics in \cref{subsec:metrics}. % \subsection{Testing Infrastructure and Experimental Settings}\label{subsec:experiments_infrastructure} -% Our testing infrastructure is a Swift-based simulator of a service-based ecosystem, including service execution, comparison, and composition. The simulator first defines the pipeline template as a sequence of nodes in the range \hl{x-y}. We recall that alternative nodes are modeled in different pipeline templates, while parallel nodes only add a fixed execution time that is negligible and do not affect the quality of our approach. Each node is associated with a (set of) policy with transformations varying in three classes: \hl{a,b,c}. A set of functionally-equivalent candidate services is randomly generated, each service having a profile...\hl{to conclude}. -% Upon setting up the pipeline template, the sliding window size is configured and our methodology for pipeline instance generation starts. %The simulator selects a subset of nodes along with their corresponding candidate services. -% The simulator calculates all possible pipeline instances, that is, it instantiates all nodes with a service according to the selected window size. For each node, the simulator calculates a quality metric, selecting the first service from the optimal combination in the sliding window, then shifting the window by step 1. -% When the end of the node list is reached, or when the window size equals the node count, the simulator computes the optimal service combination for the remaining nodes and the pipeline instance is generated. +% Our testing infrastructure is a Swift-based simulator of a service-based ecosystem, including service execution, comparison, and composition. The simulator first defines the pipeline template as a sequence of vertexes in the range \hl{x-y}. We recall that alternative vertexes are modeled in different pipeline templates, while parallel vertexes only add a fixed execution time that is negligible and do not affect the quality of our approach. Each node is associated with a (set of) policy with transformations varying in three classes: \hl{a,b,c}. A set of functionally-equivalent candidate services is randomly generated, each service having a profile...\hl{to conclude}. +% Upon setting up the pipeline template, the sliding window size is configured and our methodology for pipeline instance generation starts. %The simulator selects a subset of vertexes along with their corresponding candidate services. +% The simulator calculates all possible pipeline instances, that is, it instantiates all vertexes with a service according to the selected window size. For each node, the simulator calculates a quality metric, selecting the first service from the optimal combination in the sliding window, then shifting the window by step 1. +% When the end of the node list is reached, or when the window size equals the node count, the simulator computes the optimal service combination for the remaining vertexes and the pipeline instance is generated. % \hl{NON MI E' CHIARISSIMA To ensure that each service is interdependent within a combination, a hash function is employed. This function generates weights that services use to simulate transformations (data removal) mandated by the specified policies.} % ======= @@ -20,11 +20,27 @@ \subsection{Testing Infrastructure and Experimental Settings}\label{subsec:experiments_infrastructure} Our testing infrastructure is a Swift-based simulator of a service-based ecosystem, including service execution, comparison, and composition. -Upon setting the sliding window size, the simulator selects a subset of nodes along with their corresponding candidate services. -It then generates all possible service combinations for the chosen nodes. +The simulator first defines the pipeline template as a sequence of vertexes in the range $3-7$. +We recall that alternative vertexes are modeled in different pipeline templates, +while parallel vertexes only add a fixed execution time that is negligible and do not affect the quality of our approach. +Each node is associated with a (set of) policy with transformations varying in three classes: + +\begin{itemize*}[label=roman*] + \item \textit{Confident}: Adjusts data removal to a percentage within $[0.8,1]$. + \item \textit{Diffident}: Sets data removal percentage to $[0.2,0.5]$. + \item \textit{Average}: Modifies data removal percentage within $[0.2,1]$. +\end{itemize*} +set of functionally-equivalent candidate services is randomly generated. + +Upon setting the sliding window size, the simulator selects a subset of vertexes along with their corresponding candidate services. +It then generates all possible service combinations for the chosen vertexes. For each combination, the simulator calculates a metric, selecting the first service from the optimal combination before shifting the sliding window. -When the end of the node list is reached, or when the window size equals the node count, the simulator computes the optimal service combination for the remaining nodes. -To ensure that each service is interdependent within a combination, a hash function is employed. This function generates weights that services use to simulate data removal due to an anonymization process. +When the end of the node list is reached, or when the window size equals the node count, the simulator computes the optimal service combination for the remaining vertexes. + +An hash function is to simulate the natural interdependence between services. +This is particularly important when the removal of data by one service may impact another. +By assigning weights to the services using this function, the system aims to reflect the interconnected dynamics among the services. + The simulator is used to assess the performance and quality of our sliding window heuristic in Section \ref{sec:heuristics} for the generation of the best pipeline instance (Section \ref{sec:instance}). % Performance measures the heuristics execution time in different settings, while quality compares the results provided by our heuristics in terms of selected services with the optimal solution retrieved using the exhaustive approach. %We note that the exhaustive approach generates the best pipeline instance by executing all possible combinations of candidate services. @@ -106,16 +122,16 @@ \subsection{Perfomance}\label{subsec:experiments_performance} % \end{itemize} % \subsection{Metriche/Euristiche} We first calculated the execution time required by our exhaustive solution. -We incrementally varied the number of nodes and the number of services per node. +We incrementally varied the number of vertexes and the number of services per node. The results of these evaluations are presented in \cref{fig:perf_exhaustive}. As anticipated, the trend in execution times is exponential. \cref{fig:perf_exhaustive} displays the execution time plots, -clearly showing that as the number of nodes increases, the execution time grows exponentially. -Execution times for up to 5 nodes and 6 services were computed directly, +clearly showing that as the number of vertexes increases, the execution time grows exponentially. +Execution times for up to 5 vertexes and 6 services were computed directly, while the remaining data points were obtained through interpolation. Subsequently, the logical extension of this empirical inquiry involves evaluating the execution time efficiency attributable to the implementation of the sliding window heuristic. We then evaluated our heuristics to quantify the execution time reduction achieved through the application of heuristics. -In this context, the number of nodes and services per node was incrementally increased, +In this context, the number of vertexes and services per node was incrementally increased, with the addition of a sliding window whose size was progressively enlarged in each experiment. The outcomes are depicted in \cref{fig:perf_window}, and as expected, we observed a marked reduction in execution times with the implementation of the sliding window heuristic. @@ -126,7 +142,7 @@ \subsection{Perfomance}\label{subsec:experiments_performance} \subsection{Quality}\label{subsec:experiments_quality} -We finally evaluated the quality of our heuristic comparing, where possible, its results with the optimal solution retrieved by executing the exhaustive approach. The latter executes with window size equals to the number of nodes and provides the best, among all possible, solution. +We finally evaluated the quality of our heuristic comparing, where possible, its results with the optimal solution retrieved by executing the exhaustive approach. The latter executes with window size equals to the number of vertexes and provides the best, among all possible, solution. We recall that we considered three different setting, confident, diffident, average, varying the policy transformations, that is, the amount of data removal at each node. Setting confident assigns to each policy a transformation that changes the amount of data removal in the interval [x,y] (Jaccard coefficient) or decreases the probability distribution dissimilarity in the interval [x,y] (Jensen-Shannon Divergence). Setting diffident assigns to each policy a transformation that changes the amount of data removal in the interval [x,y] (Jaccard coefficient) or decreases the probability distribution dissimilarity in the interval [x,y] (Jensen-Shannon Divergence). Setting average assigns to each policy a transformation that changes the amount of data removal in the interval [x,y] (Jaccard coefficient) or decreases the probability distribution dissimilarity in the interval [x,y] (Jensen-Shannon Divergence). We finally evaluated the quality of our heuristic comparing, where possible, @@ -134,7 +150,7 @@ \subsection{Quality}\label{subsec:experiments_quality} The latter executes with window size equals to the number of services per node and provides the best, among all possible, solution. -The number of nodes has been varied from 3 to 7, while the number of services per node has been set from 2 to 6. +The number of vertexes has been varied from 3 to 7, while the number of services per node has been set from 2 to 6. The experiments have been conducted with different service data pruning profiles. % \hl{DOBBIAMO SPIEGARE COSA ABBIAMO VARIATO NEGLI ESPERIMENTI E COME, WINDOW SIZE, NODI, ETC. @@ -142,9 +158,9 @@ \subsection{Quality}\label{subsec:experiments_quality} % LE IMMAGINI CHE ABBIAMO SONO SOLO QUELLE 5? POSSIAMO ANCHE INVERTIRE GLI ASSI E AGGIUNGERE VISUALI DIVERSE} % <<<<<<< HEAD -% \cref{fig:quality_window} presents our results with setting \hl{confident} and metric Jaccard coefficient. \cref{fig:quality_window}(a)--(e) \hl{aggiungere le lettere e uniformare l'asse y} present the retrieved quality varying the number of nodes in [3, 7], respectively. Each figure in \cref{fig:quality_window}(a)--(e) varies the number of candidate services at each node in the range [2, 6] and the window size W in the range [1, $|$nodes$|$]. +% \cref{fig:quality_window} presents our results with setting \hl{confident} and metric Jaccard coefficient. \cref{fig:quality_window}(a)--(e) \hl{aggiungere le lettere e uniformare l'asse y} present the retrieved quality varying the number of vertexes in [3, 7], respectively. Each figure in \cref{fig:quality_window}(a)--(e) varies the number of candidate services at each node in the range [2, 6] and the window size W in the range [1, $|$vertexes$|$]. % \hl{aggiungiamo i numeri piu significativi (asse y).} -% From the results, some clear trends emerge. As the number of nodes increases, the metric values tend to decrease (better data quality) as the window size increases across different node configurations. +% From the results, some clear trends emerge. As the number of vertexes increases, the metric values tend to decrease (better data quality) as the window size increases across different node configurations. % This suggests that the heuristic performs better when it has a broader perspective of the data and services. The trend is consistent across all node cardinalities (from three to seven), indicating that the heuristic's enhanced performance with larger window sizes is not confined to a specific setup but rather a general characteristic of its behavior. % Finally, the data suggest that while larger window sizes generally lead to better performance, % there might exist a point where the balance between window size and performance is optimized. \hl{For instance, ...} @@ -173,7 +189,7 @@ \subsection{Quality}\label{subsec:experiments_quality} % \end{figure} %======= \cref{fig:quality_window} presents our results -In the figure each chart represents a configuration with a specific number of nodes, ranging from 3 to 7. +In the figure each chart represents a configuration with a specific number of vertexes, ranging from 3 to 7. On the x-axis of each chart, the number of services is plotted, which ranges from 2 to 6. The y-axis represents the metric value, which varies across the charts. Each chart shows different window sizes, labeled as W Size 1, W Size 2, and so on, corresponding to various metric values. @@ -189,10 +205,10 @@ \subsection{Quality}\label{subsec:experiments_quality} Lastly, the fifth chart, presenting a 7-node configuration, indicates that metric values start at 0.28 and reduce to 0.10 as the number of services escalates. The difference in metric values for a window size of one is pronounced, while values for window sizes three to six are lower, with overlapping occurrences similar to those in the 6-node setup. Metric values for window sizes two and three fluctuate between 0.25 and 0.12, while those for window sizes four and five oscillate between 0.22 and 0.1. It's worth noting -As the number of nodes increases in each subsequent chart, the relationship between the window size and metric value is depicted, +As the number of vertexes increases in each subsequent chart, the relationship between the window size and metric value is depicted, showing how metric values tend to decrease (better data preservation) as the window size increases across different node configurations. This suggests that the heuristic performs better when it has a broader perspective of the data it is analyzing. -The trend is consistent across various numbers of nodes, from three to seven, indicating that the heuristic's enhanced +The trend is consistent across various numbers of vertexes, from three to seven, indicating that the heuristic's enhanced performance with larger window sizes is not confined to a specific setup but rather a general characteristic of its behavior. Finally, the data suggest that while larger window sizes generally lead to better performance, there might exist a point where the balance between window size and performance is optimized. diff --git a/main.pdf b/main.pdf index e0d327efaa5122d4bfc51cc835a324b28e3bd90f..b9ba2f59356a9e4bd56d0d6326f6994c5795f1e0 100644 GIT binary patch delta 47541 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 diff --git a/metrics.tex b/metrics.tex index 93dd3fe..6dd2c75 100644 --- a/metrics.tex +++ b/metrics.tex @@ -2,7 +2,7 @@ \section{Maximizing the Pipeline Instance Quality}\label{sec:heuristics} % % %Ovviamente non รจ sufficiente scegliere il best service per ogni vertice, ma diventa un problema complesso dove si devono calcolare/valutare tutte le possibili combinazioni dei servizi disponibili, tra le quali scegliere la migliore. Our goal is to generate a pipeline instance with maximum quality, which addresses data protection requirements with the minimum amount of information loss across the pipeline execution. To this aim, we first discuss the role of some metrics (\cref{sec:metrics}) to specify and measure data quality, and describe the ones used in the paper. -Then, we prove that the problem of generating a pipeline instance with maximum quality is NP-hard (\cref{sec:nphard}). Finally, we present a parametric heuristic (\cref{subsec:heuristics}) tailored to address the computational complexity associated with enumerating all possible combinations within a given set. The primary aim of the heuristic is to approximate the optimal path for service interactions and transformations, particularly within the landscape of more complex pipelines composed of numerous nodes and candidate services. Our focus extends beyond identifying optimal combinations, encompassing an understanding of the quality changes introduced during the transformation processes. +Then, we prove that the problem of generating a pipeline instance with maximum quality is NP-hard (\cref{sec:nphard}). Finally, we present a parametric heuristic (\cref{subsec:heuristics}) tailored to address the computational complexity associated with enumerating all possible combinations within a given set. The primary aim of the heuristic is to approximate the optimal path for service interactions and transformations, particularly within the landscape of more complex pipelines composed of numerous vertexes and candidate services. Our focus extends beyond identifying optimal combinations, encompassing an understanding of the quality changes introduced during the transformation processes. %Inspired by existing literature, these metrics, categorized as quantitative and statistical, play a pivotal role in quantifying the impact of policy-driven transformations on the original dataset. @@ -92,7 +92,7 @@ \subsection{NP-Hardness of the Max Quality Pipeline Instantiation Process}\label %The computational challenge posed by the enumeration of all possible combinations within a given set is a well-established NP-hard problem.} %The exhaustive exploration of such combinations swiftly becomes impractical in terms of computational time and resources, particularly when dealing with the analysis of complex pipelines. %In response to this computational complexity, the incorporation of heuristic emerges as a strategy to try to efficiently address the problem. - \hl{HO RIVISTO IL PARAGRAFO VELOCEMENTE GIUSTO PER DARE UN'INDICAZIONE. DOBBIAMO USARE LA FORMALIZZAZIONE E MAGARI FORMALIZZARE ANCHE LO PSEUDOCODICE.} We design and implement a heuristic algorithm for computing the pipeline instance maximizing data quality. Our heuristic is built on a \emph{sliding window} and aims to minimize information loss according to quality metrics. At each step, a set of nodes in the pipeline template $\tChartFunction$ is selected according to a specific window w=[i,j], where $i$ and $j$ are the starting and ending depth of window w. Service filtering and selection in Section~\ref{sec:instance} are then executed to minimize information loss in window w. The heuristic returns as output the list of services instantiating nodes at depth $i$. A new window w=[i+1,j+1] is considered until $j$+1 is equal to the max depth of $\tChartFunction$, that is the window reaches the end of the template. + \hl{HO RIVISTO IL PARAGRAFO VELOCEMENTE GIUSTO PER DARE UN'INDICAZIONE. DOBBIAMO USARE LA FORMALIZZAZIONE E MAGARI FORMALIZZARE ANCHE LO PSEUDOCODICE.} We design and implement a heuristic algorithm for computing the pipeline instance maximizing data quality. Our heuristic is built on a \emph{sliding window} and aims to minimize information loss according to quality metrics. At each step, a set of vertexes in the pipeline template $\tChartFunction$ is selected according to a specific window w=[i,j], where $i$ and $j$ are the starting and ending depth of window w. Service filtering and selection in Section~\ref{sec:instance} are then executed to minimize information loss in window w. The heuristic returns as output the list of services instantiating vertexes at depth $i$. A new window w=[i+1,j+1] is considered until $j$+1 is equal to the max depth of $\tChartFunction$, that is the window reaches the end of the template. %For example, in our service selection problem where the quantity of information lost needs to be minimized, the sliding window algorithm can be used to select services composition that have the lowest information loss within a fixed-size window. This strategy ensures that only services with low information loss are selected at each step, minimizing the overall information loss. Pseudo-code for the sliding window algorithm is presented in Algorithm 1. @@ -147,9 +147,9 @@ \subsection{NP-Hardness of the Max Quality Pipeline Instantiation Process}\label \end{lstlisting} -The pseudocode implemets function {\em SlidingWindowHeuristic}, which takes a sequence of nodes and a window size as input and returns a set of selected nodes as output. The function starts by initializing an empty set of selected nodes (line 3). Then, for each node in the sequence (lines 4--12), the algorithm iterates over the nodes in the window (lines 7--11) and selects the node with the lowest metric value (lines 9-11). The selected node is then added to the set of selected nodes (line 12). Finally, the set of selected nodes is returned as output (line 13). +The pseudocode implemets function {\em SlidingWindowHeuristic}, which takes a sequence of vertexes and a window size as input and returns a set of selected vertexes as output. The function starts by initializing an empty set of selected vertexes (line 3). Then, for each node in the sequence (lines 4--12), the algorithm iterates over the vertexes in the window (lines 7--11) and selects the node with the lowest metric value (lines 9-11). The selected node is then added to the set of selected vertexes (line 12). Finally, the set of selected vertexes is returned as output (line 13). -We note that a window of size 1 corresponds to the \emph{greedy} approach, while a window of size N, where N represents the total number of nodes, corresponds to the \emph{exhaustive} method. +We note that a window of size 1 corresponds to the \emph{greedy} approach, while a window of size N, where N represents the total number of vertexes, corresponds to the \emph{exhaustive} method. The utilization of heuristic in service selection can be enhanced through the incorporation of techniques derived from other algorithms, such as Ant Colony Optimization or Tabu Search. By integrating these approaches, it becomes feasible to achieve a more effective and efficient selection of services, with a specific focus on eliminating paths that have previously been deemed unfavorable. diff --git a/motivations.tex b/motivations.tex index d7e761a..0688101 100644 --- a/motivations.tex +++ b/motivations.tex @@ -41,4 +41,4 @@ \subsection{Data Processing} Deep Learning copes well with the distribution of computations reaching excellent performances thanks to the work done in the parallelization of machine learning processing \cite{verbraeken2020survey, Goodfellow-et-al-2016,wu2022survey}. At the same time, substantial research and development effort has been put on the infrastructures supporting data analysis, which underwent a gradual evolution starting from a monolithic model towards a model based on micro and nano services \cite{kratzke2018brief}. The spread of the cloud computing and containerized systems allowed these systems to be more resilient, easier to develop, and adaptive, while increasing their complexity.\footnote{Today the Apache big data ecosystem counts more than 50 tools.} -With the spread of big data, new tools and infrastructures have been developed for data ingestion, storage, and analysis. The main challenge to be addressed was the inability for a single system to handle such huge amount of data; this resulted in the spread of solutions based on a distributed file system \cite{blomer2015survey}, a system that permits to share data across multiple machines (made in general of commodity hardware), making possible for the user to read and write data without perceiving this distribution. Over the years these systems have seen more and more refinements and expansions, such as, resource managers to manage the distribution of resources in the network of nodes (YARN) \cite{kulkarni2014survey}, SQL-Like systems that support access following standard RDBMS (HIVE, Presto, Trino) \cite{thusoo2009hive,sethi2019presto}. Finally, other software components (for example Apache Spark \cite{salloum2016big}) have been created to meet the ever increasing needs for data access and analysis requested by machine learning technologies. +With the spread of big data, new tools and infrastructures have been developed for data ingestion, storage, and analysis. The main challenge to be addressed was the inability for a single system to handle such huge amount of data; this resulted in the spread of solutions based on a distributed file system \cite{blomer2015survey}, a system that permits to share data across multiple machines (made in general of commodity hardware), making possible for the user to read and write data without perceiving this distribution. Over the years these systems have seen more and more refinements and expansions, such as, resource managers to manage the distribution of resources in the network of vertexes (YARN) \cite{kulkarni2014survey}, SQL-Like systems that support access following standard RDBMS (HIVE, Presto, Trino) \cite{thusoo2009hive,sethi2019presto}. Finally, other software components (for example Apache Spark \cite{salloum2016big}) have been created to meet the ever increasing needs for data access and analysis requested by machine learning technologies. diff --git a/pipeline_instance.tex b/pipeline_instance.tex index 9467430..5feda75 100644 --- a/pipeline_instance.tex +++ b/pipeline_instance.tex @@ -35,7 +35,7 @@ \section{Pipeline Instance}\label{sec:instance} \centering \newcommand{\function}{$\instanceChartAnnotation{}$} \begin{tikzpicture}[scale=0.7] - % Nodes + % vertexes \node[draw, circle, fill,text=white,minimum size=1 ] (sr) at (0,0) {}; % \node[draw, circle] (node2) at (1,0) {$\s{1}$}; @@ -171,7 +171,7 @@ \subsection{Example}\label{sec:example} TBD (mettere un esempio in cui non sia s % \centering % \newcommand{\function}{$\instanceChartAnnotation{}$} % \begin{tikzpicture}[scale=0.7] -% % Nodes +% % vertexes % \node[draw, circle] (sr) at (0,0) {$\vi{r}$}; % % \node[draw, circle] (node2) at (1,0) {$\s{1}$}; % \node[draw, circle, plus,minimum size=1.5em] (plus) at (1.5,0) {}; diff --git a/pipeline_template.tex b/pipeline_template.tex index d5ce510..d22f918 100644 --- a/pipeline_template.tex +++ b/pipeline_template.tex @@ -34,7 +34,7 @@ \subsection{Pipeline Template Definition}\label{sec:templatedefinition} \centering \newcommand{\function}{$\templateChartAnnotation$} \begin{tikzpicture}[scale=0.9] - % Nodes + % vertexes \node[draw, circle, fill,text=white,minimum size=1 ] (sr) at (0,0) {}; % \node[draw, circle] (node2) at (1,0) {$\s{1}$}; \node[draw, circle, plus,minimum size=1.5em] (plus) at (1.5,0) {}; diff --git a/system_model.tex b/system_model.tex index 49ae265..d7d0392 100644 --- a/system_model.tex +++ b/system_model.tex @@ -83,7 +83,7 @@ \subsection{Service Pipeline and Reference Scenario}\label{sec:service_definitio \begin{figure}[ht!] \centering \begin{tikzpicture}[scale=0.9,y=-1cm] - % Nodes + % vertexes \node[draw, circle, fill,text=white,minimum size=1 ] (root) at (0,0) {}; \node[draw, circle, plus , below = 1em, minimum size=1.5em] (split) at (root.south) {}; diff --git a/text.tex b/text.tex index c9168ee..821d37d 100644 --- a/text.tex +++ b/text.tex @@ -1,64 +1,64 @@ \documentclass[tikz]{standalone} \begin{document} \begin{figure}[ht!] - \centering + \centering - \tikzset{ - do path picture/.style={% - path picture={% - \pgfpointdiff{\pgfpointanchor{path picture bounding box}{south west}}% - {\pgfpointanchor{path picture bounding box}{north east}}% - \pgfgetlastxy\x\y% - \tikzset{x=\x/2,y=\y/2}% - #1 - } - }, - cross/.style={do path picture={ - \draw [line cap=round] (-1,-1) -- (1,1) (-1,1) -- (1,-1); - }}, - plus/.style={do path picture={ - \draw [line cap=round] (-3/4,0) -- (3/4,0) (0,-3/4) -- (0,3/4); - }} - } + \tikzset{ + do path picture/.style={% + path picture={% + \pgfpointdiff{\pgfpointanchor{path picture bounding box}{south west}}% + {\pgfpointanchor{path picture bounding box}{north east}}% + \pgfgetlastxy\x\y% + \tikzset{x=\x/2,y=\y/2}% + #1 + } + }, + cross/.style={do path picture={ + \draw [line cap=round] (-1,-1) -- (1,1) (-1,1) -- (1,-1); + }}, + plus/.style={do path picture={ + \draw [line cap=round] (-3/4,0) -- (3/4,0) (0,-3/4) -- (0,3/4); + }} + } - \begin{tikzpicture}[scale=0.9,y=-1cm] - % Nodes + \begin{tikzpicture}[scale=0.9,y=-1cm] + % vertexes - \node[draw, circle ] (node1) at (0,0) {$\vi{r}$}; + \node[draw, circle ] (node1) at (0,0) {$\vi{r}$}; - \node[draw, circle, plus , below = 1em, minimum size=1.5em] (node2) at (node1.south) {}; + \node[draw, circle, plus , below = 1em, minimum size=1.5em] (node2) at (node1.south) {}; - \node[draw, circle,below =1em] (node3) at (node2.south) {$\vi{2}$}; - \node[draw, circle,left=1em] (node5) at (node3.west) {$\vi{1}$}; - \node[draw, circle,right=1em] (node4) at (node3.east) {$\vi{3}$}; + \node[draw, circle,below =1em] (node3) at (node2.south) {$\vi{2}$}; + \node[draw, circle,left=1em] (node5) at (node3.west) {$\vi{1}$}; + \node[draw, circle,right=1em] (node4) at (node3.east) {$\vi{3}$}; - \node[draw, circle,below=1em] (merge) at (node3.south) {$M$}; + \node[draw, circle,below=1em] (merge) at (node3.south) {$M$}; - \node[draw, circle, plus , minimum size=1.5em,below=1em] (node7) at (merge.south) {}; - \node[draw, circle,below =1em] () at (node7.south) {$\vi{2}$}; + \node[draw, circle, plus , minimum size=1.5em,below=1em] (node7) at (merge.south) {}; + \node[draw, circle,below =1em] () at (node7.south) {$\vi{2}$}; - \node[right] at (node1.east) { $$}; - \node[right] at (node2.east) { $parallel$}; + \node[right] at (node1.east) { $$}; + \node[right] at (node2.east) { $parallel$}; - % Connection + % Connection - \draw[->] (node1) -- (node2); - \draw[->] (node2) -- (node3); - \draw[->] (node2) -- (node4); - \draw[->] (node2) -- (node5); + \draw[->] (node1) -- (node2); + \draw[->] (node2) -- (node3); + \draw[->] (node2) -- (node4); + \draw[->] (node2) -- (node5); - \draw[->] (node3) -- (node6); - \draw[->] (node4) -- (node6); - \draw[->] (node5) -- (node6); - \draw[->] (node6) -- (node7); + \draw[->] (node3) -- (node6); + \draw[->] (node4) -- (node6); + \draw[->] (node5) -- (node6); + \draw[->] (node6) -- (node7); - \end{tikzpicture} - \caption{Reference Scenario} - \label{fig:reference_scenario} + \end{tikzpicture} + \caption{Reference Scenario} + \label{fig:reference_scenario} \end{figure}