\section{genpla}

Syntaxe:\\
\verb|genpla -i n -o n -t n [options] [file_name]|

\tablrad
\begin{table}[h]
\begin{center}
\begin{tabular}{|c|l|}
\hline
-i $n$ & Nastav počet vstupních proměnných na $n$.\\
\hline
-o $n$ & Nastav počet výstupních proměnných na $n$.\\
\hline
-t $n$ & Nastav počet generovaných termů na $n$.\\
\hline
-h $n$ & Nastav počet bitů použítých v hashovací funkci na $n$.\\
& Standartní hodnota je 0. Maximální hodnota je 16.\\
\hline
-idc $n$ & Nastav počet don't cares ve vstupní matici na $n$ \%.\\
& Standartní hodnota je 0\%.\\
\hline
-odc $n$ & Nastav počet don't cares ve výstupní matici na $n$ \%.\\
& Standartní hodnota je 0\%.\\
\hline
-idt $n$ & Nastav poměr 1:0 ve vstupní matici na $n$ \%.\\
& Standartní hodnota je 50\%.\\
\hline
-odt $n$ & Nastav poměr 1:0 ve výstupní matici na $n$ \%.\\
& Standartní hodnota je 50\%.\\
\hline
-glx $n$ & Nastav lineární granularitu, za x lze doplnit\\
& idc - nastav druhou mez počtu don't cares ve vstupní matici na $n$ \%.\\
& odc - nastav druhou mez počtu don't cares ve výstupní matici na $n$ \%.\\
& idt - nastav druhou mez poměru 1:0 ve vstupní matici na $n$ \%.\\
& odt - nastav druhou mez poměru 1:0 ve výstupní matici na $n$ \%.\\
& při použití bude první generovaný term mít valstnost uvedenou v x,\\
& poslední term bude mít vlastnost uvedenou v glx.\\
\hline
-IN & Vypiš informace o funkci.\\
\hline
-NC & Neprovádí se kontrola konzistence a generuje se PLA typu fd.\\
\hline
-ND & Neprovádí se kontrola proti duplicitním termům.\\
\hline
-L & Nahraj tabulku uvedenou ve file\_name a vypiš o ní info.\\
\hline
-timeout $n$ & Nastav timeout na $n$ sekund.\\
& Standartní hodnota je 1000 s.\\
\hline
file\_name & výstupní soubor. Pokud není specifikován, PLA tabulka\\
& je vypsána na standartní výstup.\\
\hline
\end{tabular}
\end{center}
\caption{Popis přepínačů programu genpla}
\label{tab:Ugenpla}
\end{table}
\normrad

Program generuje náhodnou booleovskou funkci ve formátu PLA typu fr nebo typu fd. Standartně je generována tabulka typu fd a tudíž je prováděn test konzistence. Aby nedošlo zařazení některého z termů zaroveň do on-setu a off-setu. Tímto při generování funkcí s velkým procentem vstupních don't care velmi silně stoupá spotřebovaný výpočetní výkon. Proto je v programu nastaven timeout standartně na 1000 vteřin po kterých se program ukončí bez výsledného výstupu.

\subsection*{Příklady:}
\verb|genpla -i 100 -o 20 -t 50 -idc 20 out.pla|\\[7mm]
Generuje PLA tabulku typu fd se 100 vstupními proměnnými, s 20ti výstupními proměnnými. Tabulka bude mít 50 termů a 20\% don't cares na vstupu. Tabulka se uloží do souboru out.pla

\verb|genpla -i 50 -o 20 -t 100 -idt 75 -glidt 25 -IN|\\[7mm]
Generuje tabulku na standartní výstup s 50ti vstupními proměnnými, se 100 termy a s 20ti výstupními proměnnými. První generovaný term bude mít 75\% jedniček na vstupu. Poslední generovaný jich bude mít 25\%, zbytek budou nuly. Po ukončeníse na standartní výstup vytisknou statistické informace o vygenerované PLA tabulce.

{\bf Poznámka}\\
Při generování lineární granularity don't cares je mnohem výhodnější ji zadávat na vstupní matici sestupně. Např je lepší volit přepínače -idc 80 -glidc 20, nežli opačně. Na výstupní matici je tomu obráceně - je lepší volit menší procento u přepínače -odc.

\clearpage
\section{genstate}

Syntaxe:\\
\verb|genstate -i n -o n -t n -s n [options] [file_name]|

\tablrad
\begin{table}[h!]
\begin{center}
\begin{tabular}{|c|l|}
\hline
-i $n$ & Nastav počet vstupních proměnných na $n$.\\
\hline
-o $n$ & Nastav počet výstupních proměnných na $n$.\\
\hline
-t $n$ & Nastav počet generovaných termů na $n$.\\
\hline
-s $n$ & Nastav počet generovaných stavů na $n$.\\
\hline
-idc $n$ & Nastav počet don't cares ve vstupní matici na $n$ \%.\\
& Standartní hodnota je 0\%.\\
\hline
-odc $n$ & Nastav počet don't cares ve výstupní matici na $n$ \%.\\
& Standartní hodnota je 0\%.\\
\hline
-idt $n$ & Nastav poměr 1:0 ve vstupní matici na $n$ \%.\\
& Standartní hodnota je 50\%.\\
\hline
-odt $n$ & Nastav poměr 1:0 ve výstupní matici na $n$ \%.\\
& Standartní hodnota je 50\%.\\
\hline
-sr & Přidej do obvodu jeden vstup, kterým se resetuje automat\\
& Zároveň přidá jeden přechod, který se počítá do hodnoty zadané\\
& přepínačem -t. Ten označuje přechod, kterým se automat vyresetuje.\\
\hline
-se $n$ & Nastav počet tříd ekvivalence na $n$.\\
\hline
-sp $n$ & Nastav $n$ \% přechodů automatu na neurčitý. Vytvoří tzv.\\
& pseudoekvivalentní stav.\\
\hline
-timeout $n$ & Nastav timeout na $n$ sekund.\\
& Standartní hodnota je 1000 s.\\
\hline
-NC & Neprovádí se kontrola konzistence termů.\\
\hline
-ND & Neprovádí se kontrola proti duplicitním termům.\\
\hline
-NS & Neprovádí se kontrola spojitosti grafu automatu.\\
& V automatu můžou vzniknout nedostupné části.\\
\hline
-NK & Neprovádí se kontrola koncovosti každého stavu.\\
& Může se vygenerovat automat se stavem\\
& ze kterého nepovedou žádné přechody.\\
\hline
-NZ & Neprovádí se kontrola dostupnosti každého stavu.\\
& Může nastat že do některého stavu nepovede žádný přechod.\\
\hline
-ND & Neprovádí se kontrola determinismu.\\
& Může se nastat situace, že pro stejné ohodnocení vstupů bude \\
& mít automat nastaveny přechody do různých stavů.\\
\hline
file\_name & výstupní soubor. Pokud není specifikován, tak se\\
& automat ve formátu KISS vypíše na standartní výstup.\\
\hline
\end{tabular}
\end{center}
\caption{Popis přepínačů programu genstate}
\label{tab:Ugenstate}
\end{table}
\normrad

Program generuje náhodný stavový automat ve formátu KISS podle zadaných parametrů. Generátor se může při jistých nastaveních dostat do smyčky, kdy již nedokáže kvůli kontrolám vygenerovat další přechod. Tento stav není schopen kvůli povaze systému odhalit. Proto je v programu implementován timeout. Při jeho vypršení se program ukončí. Standartně generuje deterministický automat. Pokud mu zadáme více termů než má odpovídající deterministický úplný automat, tak počet termů omezí.

\subsection*{Příklady:}
\verb|genstate -i 10 -o 2 -s 8 -t 100 out.kiss|\\[7mm]
Generuje deterministický stavový sutomat s 10ti vstupy, 2ma výstupy, 8mi stavy. Automat bude mít 100 přechodů a uloží se do souboru out.kiss

\verb|genstate -i 10 -o 2 -s 5 -t 20 -idc 20 -ND -NC -sr|\\[7mm]
Generuje nedeterministický automat. Bude mít 10 vstupů + 1 resetující vstup, 2 výstupy, 5 stavů, 19 přechodů a jeden přechod ze všech stavů do stavu RESET, každý term bude mít na 20ti procentech vstupech don't care. Automat se vypíše na standratní výstup.

\verb|genstate -i 10 -o 2 -s 10 -t 80 -se 7|\\[7mm]
Vygeneruje deterministický stavový automat, který vypíše na standartní výstup. Automat bude mít 10 vstupů, 2 výstupy, 10 stavů, 80 termů a 7 tříd ekvivalence. Tzn. že 3 stavy budou redundantní.
  
\clearpage
\section{gennetwork}

Syntaxe:\\
\verb|gennetwork -i n -o n -n n [options] [file_name]|

Ve všech parametrech se za $n$, $g$ a $x$ vkládá celé kladné číslo, místo $d$ se použije realné číslo. $n$ znamená nějaký počet, místo $g$ se zadává číslo označující výběr typu hradla, $x$ má speciální význam --- určený u parametru.

\paragraph{Typy hradel ---}
hradla mají tyto hodnoty: AND-1, NAND-2, OR-4, NOR-8, XOR-16, XNOR-32, NOT-64. Více typů hradel se volí jako součet jejich hodnot. např.: Všechny hradla mimo XOR a XNOR: 1001111b=79. Takže za $g$ dosadíme číslo 79. 

\paragraph{Povinné parametry} jsou uvedeny v tabulce~\ref{tab:Ugennetwork1}.
\tablrad
\begin{table}[h!]
\begin{center}
\begin{tabular}{|c|l|}
\hline
-i $n$ & Nastav počet vstupů obvodu na $n$.\\
\hline
-o $n$ & Nastav počet výstupů obvodu na $n$.\\
\hline
-t $n$ & Nastav počet všech hradel v obvodu na $n$.\\
\hline
\end{tabular}
\end{center}
\caption{Popis přepínačů programu gennetwork - část 1.}
\label{tab:Ugennetwork1}
\end{table}
\normrad


\paragraph{Volitelné parametry} jsou uvedeny v tabulce~\ref{tab:Ugennetwork2}.
\tablrad
\begin{table}[h!]
\begin{center}
\begin{tabular}{|c|l|}
\hline
-l $n$ & Nastav úroveň obvodu na $n$.\\
\hline
-c $n$ & Nastav stupeň maximálního větvení na $n$.\\
& Používat opatrně! Nízké hodnoty v kombinaci s jinými parametry\\
& mohou vést k neschopnosti generovat jakýkoliv obvod. Program se může \\
& zaseknout nebo se ukončit vyjímkou. Standartně je nastaveno 255.\\
\hline
-m $g$ $n$ & Nastav maximální fan-in hradla $g$ na hodnotu $n$ \\
& Standartně je nastaven na 2 pro všechny hradla.\\
\hline
-p $g$ $n$ & Nastav index pravděpodobnosti hradla $g$ na hodnotu $n$.\\
& Standartně je nastavena hodnota 5. Pokud se nastaví $0$ tak se \\
& hradlo $g$ nebude generovat.\\
\hline
-s $x$ & Nastav výstupní formát na $x$. Může se použít kombinace hodnot\\
& $x$= 1-BENCH, 2-BLIF, 4-SLIF. Standartně je nastaven výstup BENCH\\
& a BLIF. Každý formát si přidá k file\_name svojí koncovku.\\
\hline
-tc $d$ & Nastav požadovanou řiditelnost na $d$ $<0;1>$\\
\hline
-to $d$ & Nastav požadovanou pozorovatelnost na $d$ $<0;1>$\\
\hline
-tt $d$ & Nastav požadovanou testovatelnost na $d$ $<0;1>$\\
\hline
-w $x$ $d$ & Nastav váhu složky $x$ na $d$ ve fitness funkci. Složky:\\
& 1-úrovně,2-\# hradel,4-řiditelnost,8-pozorovatelnost,16-testovatelnost\\
& Standartně je váha všech složek nastavena na 1.\\
\hline
-g $n$ & Nastav počet dynamických generací na $n$. Standartně je 50.\\
& Program končí, když po dobu $n$ generací se nejsilnější jedinec nezmění.\\
\hline
-G $n$ & Nastav počet statických generací na $n$. Standartně není nastaveno.\\
& Program se ukončí po projití $n$ generací, funguje společně s -g\\
\hline
-P $n$ & Nastav velikost populace genetického algoritmu. Standartně je 80.\\
\hline
-cg & Zapne optimalizační kritérium, které kontroluje počet hradel v obvodě.\\
& Realný stav srovnává s předpočítaným stavem z indexu pravděpodobností\\
\hline
-info & Zapne výpis informací o generovaném obvodě na konci programu do\\
& chybového výstupu. Zároveň vypisuje info do výstupních souborů.\\
\hline
file\_name & Zvol jméno souboru pro výstup obvod ve formátech zvolených\\
& přepínačem -s. Pokud se nezadá tak se vše píše do standartního výstupu.\\
\hline
\end{tabular}
\end{center}
\caption{Popis přepínačů programu gennetwork - část 2.}
\label{tab:Ugennetwork2}
\end{table}
\normrad

Berte v úvahu, že některé kombinace přepínačů mohou vést k situaci, kdy nebude možné vygenerovat obvod. Jedná se především o kombinaci hodně výstupů s málo hradly, nebo hodně hradel spolu s malou hodnotou maximálního větvení. Program také nekontroluje nesmyslné zadávání parametrů, jako například záporné hodnoty apod.

\paragraph{Pravděpodobnost} jednotlivých hradel je počítána z jejich indexů. A to takto: Pravděpodobnost hradla typu i je rovný podílu jeho indexu a součtu indexů všech typů. Standartně jsou indexy nastaveny na 5 u všech typů hradel. Takže abychom generovali hradlo AND v 50ti procentech. Tak musíme jeho index nastavit na 30. $0.5 = \frac{30}{30+5+5+5+5+5+5}$.

\clearpage
\subsection*{Příklady:}
\verb|gennetwork -i 10 -o 2 -n 20 out|\\[7mm]
Vygeneruje triviálně zapojený obvod, který má 10 vstupů, 2 výstupy a bude tvořen 20ti maximálně 2vstupovými hradly. Hradla budou generována se stejnou pravděpodobností. Výstup uloží ve formátu BENCH do souboru out.bench a ve formátu BLIF do souboru out.blif.

\verb|gennetwork -i 10 -o 2 -n 30 -m 3 4 -l 5 -s 1 -g 200|\\[7mm]
Vygeneruje obvod s 10ti vstupy, 2ma výstupy s 30 ti hradly, ve kterých bude hradlo AND a NAND maximálně 4vstupvé, ostatní hradla budou maximálně 2vstupová. Všechny hradla budou generovány se stejnou pravděpodobností. Genetický algortimus bude obvod šlechtit, aby měl 5 úrovní hradel. Výstup je ve formátu BENCH do standartního výstupu. A optimalizace se ukončí, pokud 200 generací se nezmění nejsilnější jedinec v populaci.

\verb|gennetwork -i 10 -o 2 -n 50 -p 48 0 -tc 0.5 -w 4 10 -cg -G 1000 out|\\[4mm]
Vygeneruje obvod s 10ti vstupy, 2ma výstupy s 40 ti hradly. Bude generovat všechna hradla se stejnou pravděpodobností mimo XOR a XNOR, které se nebudou generovat vůbec. Optimalizovat se bude podle řiditelnosti nastavenou na 0.5  bude mít 10x větší vliv, než optimalizace podle počtu hradel. Konec algortimu bude po provedení 1000 generací nebo pokud se nezmění nejsilnější jedinec po dobu 50ti generací.

{\bf Poznámka}\\
Při zadávání optimalizace podle jedné z testovatelnosti, je vhodné použít i optimalizační kritérium -cg a nastavit mu zhruba 20$\times$ menší váhu. Bez kontroly hradel, se totiž po nějaké době stává, že začnou převažovat hradla, která mají lepší testovatelnost (XOR,XNOR,NOT). Tyto hradla se většinou pak přesouvají k začátku nebo konci obvodu, aby řídítelnost nebo pozorovatelnost propagovali hlouběji do obvodu.