\documentclass{article}
%\usepackage{times}
\usepackage[utf8]{inputenc}


%\usepackage{amsthm}
\usepackage{algorithm} % for pseudo-codes
%\usepackage{enumerate}
\usepackage{algpseudocode}
%\usepackage{DotArrow}
%\usepackage{subfig}
%\usepackage{amsmath, environ}
%\usepackage{amssymb}
%\usepackage{amsthm}
%%\usepackage{bm}
%%\usepackage{mathtools}
\usepackage{graphicx} 
%\usepackage{wrapfig}
%\usepackage{minibox}
%\usepackage{multirow}
%\usepackage{pifont} % \ding{}
%\usepackage[percent]{overpic}
%\usepackage{scrextend} % labeling environment
%
%\newtheorem{theorem}{Theorem}
%\newtheorem{definition}{Definition}
%\newtheorem{example}{Example}
%
%\renewcommand{\textfraction}{0.05}
%\renewcommand{\floatpagefraction}{0.75}

\newcommand{\centerimage}[5][-7pt]{ % [vskip] | graphics-opt | imgname | label | caption
\begin{figure}[!htb]%
\centering%
\vspace{#1}%
\includegraphics[#2]{#3}%
\caption{#5}\label{#4}\vspace{2mm}%
%\vspace{-3pt}\caption{#5}\label{#4}\vspace{-2pt}%
\end{figure}}
\date{}
%\includegraphics[trim=1cm 2cm 3cm 4cm, clip=true]{example.pdf}



\begin{document}



\title{Relazione Esercizio Rete WN (F)}


\author{Francesco Galla`, francesco.galla@edu.unito.it}

\maketitle


%========================================================================= 
%%%%%%%                       INTRODUCTION                         %%%%%%%
%========================================================================= 

\section{Rete F}  \label{sec:reteF}

Rete F: Master di tre tipi distinti (seppur di uguale struttura) che chiameremo m1, m2 e m3 e
due  slave, di distinto tipo ID1 e ID2, ma di uguale struttura (usare quella indicata come “tipo 1”).
I master di tipo m1 e m3 richiedono servizio solo agli slave di tipo ID1 e i master di tipo m2
richiedono servizio solo agli slave di tipo ID2.
Vi siano N master per ognuno dei tre tipi e R1 slave per il tipo ID1 e R2 per il tipo ID2.
%=========================================================================================================
\subsection{La rete di Petri}  \label{ssec:reteF-PN}


La Figura~\ref{img:reteF} rappresenta la rete di Petri WN del secondo esercizio (rete F).
Il master è modellato dai posti M\_Richieste, M\_Attesa, M\_Risultati e dalle transizioni Dispatch, M\_Return, Ottieni\_Res.
Lo slave di tipo 1 è modellato dai posti S1\_Attesa, Child1/Child2, Fine\_C1/Fine\_C2,
S1\_Fine e dalle transizioni Fork, C1\_Processa/C2\_Processa, Join, S1\_Return,
S1\_Send\_Res.
Per collegare le strutture di master e slave sono stati utilizzati due buffer: uno in
ingresso, identificato dal posto Buffer, uno in uscita identificato dal posto S1\_Send\_Res.

\subsection{I colori}

Questa rete utilizza due classi di colori: una classe di colori chiamata Master, utilizzata
per distinguere i tipi di master ${m1, m2, m3}$, e una classe chiamata Slave, utilizzata per
distinguere i tipi di slave ${ID1,ID2}$.
Le due classi sono divise in due sottoclassi ciascuna per permettere la differenziazione dei
tipi di slave.
L'utilizzo di un domain $MxS = (Master)x(Slave)$ permette di identificare le richieste in base
ai tipi corrispondenti di Master e Slave.
Questo dominio \`e utilizzato principalmente per i posti della struttura Slave, per evitare
di perdere traccia delle richieste una volta che viene chiamata la transizione Fork.

\subsection{Fork con Guardia}

Sulla transizione Fork \`e stata inserita una guardia che permette lo scatto solo in caso il
master e lo slave rispettino i requisiti dell'esercizio, nello specifico:

\begin{description}
    \item{1.} Se il master appartiene alla sottoclasse $Master_1$ (vale per $m_1,m_3$)
        allora lo slave deve appartenere alla sottoclasse $Slave_1$ ($ID_1$).
    \item{2.} Se il master appartiene alla sottoclasse $Master_2$ (vale per $m_2$)
        allora lo slave deve appartenere alla sottoclasse $Slave_2$ ($ID_2$).
\end{description}

%\centerimage{trim=1cm 10cm 3cm 4cm, clip=true}
	\centerimage{width=\columnwidth}
{reteF.jpg}{img:reteF}
	{Modello WN della rete F}

\subsection{I risultati}  \label{ssec:reteE-res}

Le tabelle elencano la dimensione dello spazio degli stati al variare del numero di master
e di slave (marcatura iniziale).
Il numero di markings aumenta in maniera simile sia nel caso del RG sia nel caso del SRG,
considerando che l'incremento di $R_1,R_2$ causa un aumento del numero di marking di un
fattore di circa $3$, mentre l'incremento di $N$ causa un aumento di un fattore $30$.
Il SRG permette di ridurre il numero di markings a circa la met\`a rispetto al corrispettivo RG,
seppure la dimensione dello spazio degli stati aumenti in maniera coerente con il RG.
L'SRG permette inoltre di ottenere tempi di calcolo leggermente minori rispetto all'RG.

\begin{table}[h!]
  \centering
  \begin{tabular}{ |p{3cm}||p{3cm}|p{3cm}||p{3cm}| }
    \hline
    \multicolumn{3}{|c|}{Effetto della marcatura iniziale sul numero di markings} \\
    \hline
      N & R1/R2 & Markings RG & Markings SRG \\
    \hline
      1 & 1 & 768 & 432 \\
      1 & 2 & 2560 & 1440\\
      1 & 3 & 5376 & 3024 \\
      2 & 1 & 18720 & 9720 \\
      2 & 2 & 97696 & 50481 \\
      2 & 3 & 267120 & 137376 \\
      3 & 1 & 192000 & 97600 \\
      3 & 2 & 1309440 & 663520 \\
    \hline
  \end{tabular} \\
  \caption{Variazione dello spazio degli stati.}
    \label{tab:reteE}
\end{table}

\subsection{Tipologie di Master}

Aumentando le tipologie di master non \`e stato sempre possibile preservare la proporzione
tra le due sottoclassi, per cui si \`e scelto di mantenere la seguente relazione:
\begin{description}
    \item $|Master_1| > |Master_2|$
\end{description}

I valori di $N,R_1,R_2$ sono costanti e fissati a $1$, per evidenziare l'effetto
dell'incremento delle tipologie di master sulla rete. Le tipologie di Slave sono fissate a
$2$.
\break

Si nota come la crescita delle tipologie di master abbia portato ad un incremento maggiore
(circa di un fattore $6$) nel caso del RG, mentre il SRG ha un incremento in proporzione
minore (circa di un fattore $2$).

%===================== TEST 2 FMS 
\begin{table}[h!]
  \centering
  \begin{tabular}{ |p{3cm}||p{3cm}||p{3cm}| }
    \hline
    \multicolumn{3}{|c|}{Effetto delle tipologie di master sul numero di markings} \\
    \hline
      Tipologie Master & Markings RG & Markings SRG \\
    \hline
      3 & 768 & 432 \\
      4 & 3840 & 960 \\
      5 & 20480 & 2880 \\
      6 & 98304 & 5400 \\
      7 & 481520 & 12000 \\
    \hline
    \hline
  \end{tabular} \\
  \caption{Variazione dello spazio degli stati.}
    \label{tab:reteE}
\end{table}
%===================== 

\subsection{Tipologie di Slave}

Aumentando le tipologie di Slave si \`e cercato di mantenere la proporzione $|Slave_1| ==
|Slave_2|$ quando possibile (ossia quando erano presenti un numero pari di slave).

Anche in questo caso si \`e scelto di mantenere i valori $N==R_1==R_2==1$ e $|Master| = 3$,
cambiando solo le tipologie di Slave per evidenziarne l'effetto sullo spazio degli stati.

Come visto analizzando la variazione delle tipologie di master, il SRG si dimostra molto
pi\`u compatto rispetto al RG, mantenendo uno spazio degli stati notevolmente ridotto.
Si nota infatti come con pi\`u di $5$ tipologie di master il rapporto tra RG e SRG \`e di
circa un'ordine di grandezza.

\break

Si nota inoltre come l'aumento delle tipologie di slave non abbia influenzato lo spazio degli
stati quanto l'aumento delle tipologie di master.

\begin{table}[h!]
  \centering
  \begin{tabular}{ |p{3cm}||p{3cm}||p{3cm}| }
    \hline
    \multicolumn{3}{|c|}{Effetto delle tipologie di slave sul numero di markings} \\
    \hline
      Tipologie Slave & Markings RG & Markings SRG \\
    \hline
      2 & 768 & 432 \\
      3 & 2688 & 864 \\
      4 & 7168 & 1440 \\
      5 & 22528 & 2160 \\
      6 & 56320 & 3024 \\
      7 & 163840 & 4032 \\
      8 & 393216 & 5184 \\
      9 & 1081344 & 6480 \\
    \hline
    \hline
  \end{tabular} \\
  \caption{Variazione dello spazio degli stati.}
    \label{tab:reteE}
\end{table}

\subsection{Considerazioni sulla Join}

La rete utilizza due classi di colori e un color domain che \`e dato dal prodotto vettoriale
delle due classi, permettendo cos\i` una differenziazione precisa delle richieste da parte
dello slave, che le utilizza come una tuple $<m,id>$.

Per ottenere una Join tra due processi che non sono stati creati dalla stessa Fork, bisogna
che siano presenti nei posti Child1, Child2 due sottoprocessi (per posto) che abbiano:
\begin{description}
    \item{1.} Lo stesso tipo di master $m_i$
    \item{2.} Lo stesso tipo di slave $ID_i$
\end{description}

Questo si verifica solo nel caso in cui vi siano pi\`u master e slave dello stesso tipo,
ovvero con $N > 1$ e $R_1 > 1 || R_2 > 1$.
In tutti gli altri casi, le Join sono eseguite solo tra due sottoprocessi figli della stessa
Fork.

\end{document}
