Újabb 2015-ös kidolgozás hozzáadva
After Width: | Height: | Size: 6.5 KiB |
After Width: | Height: | Size: 84 KiB |
After Width: | Height: | Size: 113 KiB |
After Width: | Height: | Size: 62 KiB |
After Width: | Height: | Size: 52 KiB |
After Width: | Height: | Size: 61 KiB |
After Width: | Height: | Size: 30 KiB |
After Width: | Height: | Size: 17 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 13 KiB |
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 16 KiB |
After Width: | Height: | Size: 13 KiB |
After Width: | Height: | Size: 8.7 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 16 KiB |
After Width: | Height: | Size: 15 KiB |
After Width: | Height: | Size: 18 KiB |
After Width: | Height: | Size: 22 KiB |
After Width: | Height: | Size: 19 KiB |
After Width: | Height: | Size: 47 KiB |
After Width: | Height: | Size: 30 KiB |
After Width: | Height: | Size: 127 KiB |
After Width: | Height: | Size: 24 KiB |
After Width: | Height: | Size: 31 KiB |
After Width: | Height: | Size: 59 KiB |
After Width: | Height: | Size: 52 KiB |
After Width: | Height: | Size: 34 KiB |
After Width: | Height: | Size: 50 KiB |
@@ -0,0 +1 @@
|
||||
<mxfile host="Electron" modified="2019-12-16T11:49:03.186Z" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/12.1.7 Chrome/78.0.3905.1 Electron/7.0.0 Safari/537.36" etag="XMfqWq1FAjVAp7R6_hnl" version="12.1.7" type="device" pages="2"><diagram id="O22BQxIm6jxxuw1t4vPX" name="Shannon">7Zldb5swFIZ/DZeVMCQkuczXOmmdNCmTpu1msuAUrBnMjMlHf/1MsCHGq5JsadKNXgGv7XOMn9fGgOPP0+09x3nykUVAHc+Nto6/cDwPueNAHiplVyuTQAkxJ5Gq1Aor8gS6pVJLEkFhVBSMUUFyUwxZlkEoDA1zzjZmtUdGzaw5jsESViGmtvqFRCKp1fHQbfX3QOJEZ0auKkmxrqyEIsER2xxI/tLx55wxUZ+l2znQavD0uNTt3j1T2nSMQyZOafD1w+d7tCi/j75l4wFiD+VT8nCnoqwxLdUNO15AZbzZI5NhZa/FTg1F8LNkuuCu2IOaygpomEvYs7ZcnsXquA9U5Dj7q0CujiTvrQ5mJpBy3Vkte0Y6D7JoWjlBXoUUFwUJZa1EpFQKSPVDGQ8N9bVqrsYHIssl7bCjBqacBcBSEHwnq2xau2i3JAdO0RoHigVZm+Gxcm3chGsyfGJkD0bNsCaOml8D14xQsJKHoBoduqMTB/lmHBR0AgnMYxBWIHlycNettDffGUb0LCOiN5B/AtIf3Rak/7ai/NtGPLoSnOrEjqE997pGHPR9RbkYyGYzdiOSgUVybpEUsBUmu0Jw9gPmjDIulYxlUAEklHYkTEmcVQaQ1EDqszVwQeQOcKoKUhJFVZrZJiECVjkOq5wbud+VGmdlFkHVe9fyh+mfUbOSVAlge65pNIwOC83mwFOD33jKc5+3j8HrXDgjC469XvYGDpq8Mjpji45r0fmvF8Gj26GTF8Eu2isvghOL5LS/88wbvbJ5pvP3d7dxsYk2uPG+EdnfRHqG8iiBk98AOjtQ66X2pVHaXxV69vi7GMru9L46Svu7wqK/zz+/i3V46+ef/ba97C+eYfeF+eXwyMv2F0I92dofMf7yFw==</diagram><diagram id="prQHgRt_IZWCSpqamX92" name="Huffman">7Zldj6IwFIZ/DZeTtHypl8q4H4mTmPVi527ShQrNFsqWKjq/fosUsXQ3o64fm8iV8NKeQ3ne0xaxnCDdfOYoT15YhKllg2hjOc+WbUMw9OVPpWxrZeg5tRBzEqlGrbAg77jpqdQViXChNRSMUUFyXQxZluFQaBrinJV6syWjetYcxdgQFiGipvqdRCJpRgFa/QsmcdJkhkBdSVHTWAlFgiJWHkjO1HICzpioj9JNgGn18JrnQvH7dvYG5y9b/m3xno9eX8vlUx3s0yld9kPgOBNnhx76ix/z2dcALWd+Hr95g3TgqS5gjehKPS/L9qlMMlkymUsOWmzVk/R/rVhz4anYcR7LBtDLpVcm7XV5FKvfXaAiR9k/BQJNJDm2OpieQMr1zTayraWzcRaNKyPJs5CioiChbJWIlEoBqvtQvoVec666q0ePI8NkH7CAe4PIysIsxYJvZb+ytWDjwOTAfY3GMUWCrPWcSFVCvA+3zzBnZEdLVe0+jqpZF+gRCrbiIVadDi3TiTPUw0C/E0cgHmNhxJEHB4NupZ0hTzAnNMwJe7gXg+uC+9J1DbqBQVfgjdB5FoKznzhglHGpZCzDFVRCaUdClMRZZQpJEkt9ssZcELksjNWFlERRlWZSJkTgRY7CKmcpF0GpcbbKIlzdPTA8o3tqsJ9xqgR4cxEjqSh+B9BAnR/4zP2Dz2zwd0tpEE8l5hvEgEHs8erxwzo6tiDtgR7IBrctyGE/3V4Tr+fdF++ox3sOlWPx+k4nUHddvvZmydzK97PzBfm63dn51nzN3fDY4PvY+yW3y9q784YJ2gYz8/X0sZn58H9j5vTr5Dmb02PnUadbpLeeR833zn6dvCBfOLozX8/gO+3nXG3OhV3Wd59zzX8WnntmGjOn+3pxPWbytP2oUZdl+2nImf4G</diagram></mxfile>
|
After Width: | Height: | Size: 11 KiB |
After Width: | Height: | Size: 6.5 KiB |
After Width: | Height: | Size: 35 KiB |
After Width: | Height: | Size: 11 KiB |
After Width: | Height: | Size: 9.1 KiB |
After Width: | Height: | Size: 35 KiB |
@@ -0,0 +1,715 @@
|
||||
\documentclass[tikz,12pt,margin=0px]{article}
|
||||
|
||||
\usepackage[a4paper, margin=1in]{geometry}
|
||||
\usepackage[export]{adjustbox}
|
||||
\usepackage[hungarian]{babel}
|
||||
\usepackage[normalem]{ulem}
|
||||
\usepackage[table,xcdraw]{xcolor}
|
||||
\usepackage[thinlines]{easytable}
|
||||
\usepackage[utf8]{inputenc}
|
||||
\usepackage{amsmath}
|
||||
\usepackage{amssymb}
|
||||
\usepackage{amsthm}
|
||||
\usepackage{bigints}
|
||||
\usepackage{enumitem}
|
||||
\usepackage{fancyhdr}
|
||||
\usepackage{float}
|
||||
\usepackage{fontawesome}
|
||||
\usepackage{titlesec}
|
||||
\usepackage{geometry}
|
||||
\usepackage{graphicx}
|
||||
\usepackage{hhline}
|
||||
\usepackage{ifthen}
|
||||
\usepackage{listings}
|
||||
\usepackage{tikz}
|
||||
\usepackage{makecell}
|
||||
\usepackage{multirow}
|
||||
\usepackage{newunicodechar}
|
||||
\usepackage{pgf,tikz}
|
||||
\usepackage{pgfplots}
|
||||
\usepackage{pgfplotstable}
|
||||
\usepackage{subcaption}
|
||||
\usepackage{tikz}
|
||||
\usepackage{tipa}
|
||||
\usepackage{wasysym}
|
||||
\usepackage{xcolor}
|
||||
\usetikzlibrary{positioning,calc,shapes.multipart,arrows,arrows.meta,matrix,automata,shapes.misc,patterns}
|
||||
|
||||
\newcommand\ddfrac[2]{\frac{\displaystyle #1}{\displaystyle #2}}
|
||||
|
||||
\geometry{
|
||||
a4paper,
|
||||
total={170mm,257mm},
|
||||
left=20mm,
|
||||
right=20mm,
|
||||
top=20mm,
|
||||
bottom=20mm
|
||||
}
|
||||
|
||||
\setlist[itemize,1]{label=$\bullet$}
|
||||
\setlist[itemize,2]{label=$\circ$}
|
||||
\setlist[itemize,3]{label=$\centerdot$}
|
||||
\setlist[itemize,4]{label=$\cdot$}
|
||||
|
||||
\titleformat*{\section}{\Large\bfseries}
|
||||
\titleformat*{\subsection}{\large\bfseries}
|
||||
\titleformat*{\subsubsection}{\normalsize\bfseries}
|
||||
\titleformat*{\paragraph}{\small\bfseries}
|
||||
\titleformat*{\subparagraph}{\footnotesize\bfseries}
|
||||
|
||||
\newcommand\lword[1]{\leavevmode\nobreak\hskip0pt plus\linewidth\penalty50\hskip0pt plus-\linewidth\nobreak #1}
|
||||
\pgfmathdeclarefunction{gauss}{2}{\pgfmathparse{1/(#2*sqrt(2*pi))*exp(-((x-#1)^2)/(2*#2^2))}%
|
||||
}
|
||||
\pagestyle{fancy}
|
||||
|
||||
\newcommand\blfootnote[1]{%
|
||||
\begingroup
|
||||
\renewcommand\thefootnote{}\footnote{#1}%
|
||||
\addtocounter{footnote}{-1}%
|
||||
\endgroup
|
||||
}
|
||||
|
||||
\renewcommand{\figurename}{ábra}
|
||||
\newenvironment{tetel}[1]{\paragraph{#1 \\}}{}
|
||||
|
||||
\newcommand{\N}{\mathbb{N}}
|
||||
\newcommand{\Z}{\mathbb{Z}}
|
||||
\newcommand{\R}{\mathbb{R}}
|
||||
\newcommand{\Q}{\mathbb{Q}}
|
||||
\newcommand{\C}{\mathbb{C}}
|
||||
|
||||
\makeatletter
|
||||
\renewcommand\paragraph{%
|
||||
\@startsection{paragraph}{4}{0mm}%
|
||||
{-\baselineskip}%
|
||||
{.5\baselineskip}%
|
||||
{\normalfont\normalsize\bfseries}}
|
||||
\makeatother
|
||||
|
||||
\useunder{\uline}{\ul}{}
|
||||
\fancyhead{}
|
||||
\cfoot{5. tétel | \thepage. oldal}
|
||||
|
||||
\renewcommand{\headrulewidth}{0pt}
|
||||
\renewcommand{\footrulewidth}{0.4pt}
|
||||
|
||||
\begin{document}
|
||||
\thispagestyle{fancy}
|
||||
\hyphenation{oddword}
|
||||
\uchyph=0
|
||||
|
||||
\begin{center}
|
||||
{\Large\bfseries\noindent 5. Valószínűségszámítási és statisztikai alapok} \\
|
||||
\end{center}
|
||||
|
||||
\section*{Alapfogalmak}
|
||||
|
||||
\noindent \textbf{Véletlen kísérlet}: Egy olyan történés / jelenség, aminek az eredményeinek halmazát ismerjük előre, de a pontos kimenet ezek között véletlen alakul. Azonos feltételek mellett megismételhető.\\
|
||||
|
||||
{\small
|
||||
\noindent A kockadobásunk esetén maga a dobás a kísérlet, az eredmények halmaza {1, 2, 3, 4, 5, 6}. \\
|
||||
A (0, 1)-beli véletlen szám választása esetén az eredmények halmaza a (0, 1) intervallum.\\
|
||||
}
|
||||
|
||||
\noindent \textbf{Esemény}: Egy olyan állítás, aminek az igazságtartalma a kísérlet elvégzése után kiértékelhető. Az eseményeket nagybetűvel jelöljük. Két esemény kizáró, ha egyszerre nem következhet be mindkettő. \\
|
||||
|
||||
\noindent Egy A esemény \textbf{\emph{része}} egy B eseménynek (A maga után vonja B-t), ha A teljesülése esetén B mindenképp teljesül. Jelölése: $A \subseteq B$. Két esemény ekvivalens, ha mindkettő része a másiknak. Jelölése: $A = B$.
|
||||
A biztos esemény jele: $\Omega$, a lehetetlené $\varnothing$.\\
|
||||
|
||||
{\small
|
||||
\noindent Kockadobás esetén az alábbiak mind események:\\
|
||||
A = \{4-et dobunk\}, B = \{4-et vagy 6-ot dobunk\}, C = \{Összetett számot dobunk\},\\
|
||||
D = \{Páratlant dobunk\}, E = \{100-nál kisebbet dobunk\}, F = \{3, 5-öt dobunk\}.\\
|
||||
A és D \emph{kizáróak}, A \emph{része} B-nek, B és C ekvivalensek, E a \emph{biztos esemény}, F pedig a \emph{lehetetlen}.\\
|
||||
}
|
||||
|
||||
\noindent \textbf{Teljes eseményrendszer}: $A_1, A_2, ..., A_n, ...$ páronként kizáró események rendszere teljes \lword{eseményrendszer}, ha a kísérlet bármely kimenetele esetén valamelyik $A_i$ bekövetkezik (az alább definiált összeadást felhasználva átfogalmazható: az összegük $\Omega$).\\
|
||||
|
||||
{\small
|
||||
\noindent A kockadobás esetén például\\
|
||||
T1 = \{\{párosat dobunk\}, \{páratlant pobunk\}\}, vagy\\
|
||||
T2 = \{\{1-et dobunk\}, \{prímet dobunk\}, \{4-et vagy 6-ot dobunk\}\}\\
|
||||
is \emph{teljes eseményrendszert alkot}nak.
|
||||
}
|
||||
|
||||
\paragraph*{Műveletek eseményekkel\\}
|
||||
|
||||
\noindent Egy A esemény \textbf{\emph{ellentettjén}} (vagy \textbf{\emph{komplementerén}}) azt az eseményt értjük, ami pontosan akkor következik be, amikor A nem. Jele $\overline{A}$. (Pl: $\overline{\Omega} = \varnothing$).\\
|
||||
|
||||
\noindent Két esemény összege (vagy uniója) az az esemény, ami pontosan akkor következik be, ha a két esemény közül legalább egy teljesül. Jele $A + B$ vagy $A \cup B$.\\
|
||||
|
||||
\noindent Két esemény szorzatán (vagy metszetén) azt az eseményt értjük, ami pontosan akkor következik be, amikor mindkét esemény teljesül. Jele $A \cdot B$, $AB$ vagy $A \cap B$.
|
||||
|
||||
\noindent Egy A és egy B esemény különbségén azt az eseményt értjük, amikor az A bekövetkezik, de a B nem. Jele $A -B$ vagy $A \backslash B$.
|
||||
Valamint $A - B = A \cdot \overline{B}$.\\
|
||||
\newpage
|
||||
\paragraph*{$\sigma$ algebra}
|
||||
|
||||
\noindent Legyen X egy halmaz. Egy $\mathcal{R} \subseteq 2^{X}$ halmaz pontosan akkor $\boldsymbol{\sigma}$ \textbf{\emph{algebra}} X \emph{felett}, ha teljesíti az alábbi három feltételt:
|
||||
\begin{itemize}
|
||||
\item $X \in \mathcal{R}$
|
||||
\item $\mathcal{R}$ zárt a komplementerképzésre: $A \in \mathcal{R} \Rightarrow \overline{A} = X - A \in \mathcal{R}$
|
||||
\item $\mathcal{R}$ zárt a megszámlálható összegre: $A_1, A_2, \ldots, A_n, \ldots \in \mathcal{R} \Rightarrow \sum\limits_{i}A_i \in \mathcal{R}$
|
||||
\end{itemize}
|
||||
|
||||
\noindent Egy kísérlet kimeneteleinek a halmazának nem feltétlen minden eleme érdekes számunkra. A vizsgálatainkhoz fontos a kísérleten definiálható események közül a számunkra megfigyelhetőeket mindig megadni előre.\\
|
||||
|
||||
\noindent \textbf{Elemi esemény}: Azokat a nem lehetetlen, megfigyelhető eseményeket, amiknek nincs olyan nem lehetetlen, megfigyelhető részeseménye, ami nem ekvivalens vele, elemi eseményeknek nevezzük. Azaz $A \in \mathcal{R}$ pontosan akkor \textbf{\emph{elemi esemény}}, ha:\\
|
||||
\[
|
||||
A \neq \varnothing\ \text{és}\ \forall B \neq \varnothing,\ B \in \mathcal{R},\ B \subseteq A : A \subseteq B
|
||||
\]
|
||||
Az elemi eseményeket $\omega$-val jelöljük.\\
|
||||
|
||||
\noindent A kockadobásnál a megfelelő elemi események a következők:\\
|
||||
$\omega_1$ = \{1-et dobunk\},\ $\omega_2$ = \{2-t dobunk\},\ $\omega_3$ = \{3-mat dobunk\},\ $\omega_4$ = \{4-et dobunk\},\\
|
||||
$\omega_5$ = \{5-öt dobunk\},\ $\omega_6$ = \{6-ot dobunk\}.\\
|
||||
Lehetne elemi esemény az, hogy ”x lett a dobott érték, amit y oldalról átfordulva értünk el”, de persze ez nem célszerű választás.\\
|
||||
|
||||
\noindent \textbf{Eseménytér}: Az elemi események halmaza. Mivel az összes elemi esemény összege $\Omega$, ezért az eseményteret is szokásosan $\Omega$-val jelöljük. Fontos megjegyezni, hogy abban az esetben, ha $\Omega$ nem megszámlálható, akkor az eseménytér önmagában nem határozza meg a megfigyelhető események halmazát.\\
|
||||
|
||||
\noindent A kockadobás esetén az előző példában látott elemi események mellett az eseménytér
|
||||
\[\Omega = \{\omega_1,\ \omega_2,\ \omega_3,\ \omega_4,\ \omega_5,\ \omega_6\}\]
|
||||
|
||||
\section*{Valószínűség}
|
||||
|
||||
\noindent \textbf{Definíció}. Megfigyelhető események egy $\mathcal{R}\ \sigma$ algebráján definiálhatjuk a \textbf{\emph{valószínűség}}et, mint a következő tulajdonságokat teljesítő $P: \mathcal{R} \to [0,1]$ valós függvény:
|
||||
\begin{itemize}
|
||||
\item A valószínűség nem negatív: $0 \leq P(A)$
|
||||
\item A biztos esemény valószínűsége 1: $P(\Omega) = 1$
|
||||
\item $\forall A \in \mathcal{R}$-ra, páronként kizáró ($A_{i} \cdot A_{j} = \emptyset, i \neq j$)
|
||||
\item Kizáró események megszámlálható összegének valószínűsége a valószínűségek összege:
|
||||
\[
|
||||
A_1, A_2, \ldots, A_n, \ldots \in \mathcal{R},\ \forall i \neq j: A_iA_j = \varnothing \Rightarrow P(\bigcup\limits_{i}A_i) = \sum\limits_{i}P(A_i).
|
||||
\]
|
||||
\end{itemize}
|
||||
|
||||
\noindent \textbf{Definíció}. Az eseménytér, a megfigyelhető események halmaza és a rajtuk definiált valószínűség együtt úgynevezett (\emph{\textbf{Kolmogorov-féle}}) valószínűségi mezőt alkot: $(\Omega, \mathcal{R}, P)$ hármas.\\
|
||||
|
||||
{\footnotesize
|
||||
\noindent A kockadobás esetén, ha szabályos kockáról beszélünk (és minden értékű kimenetel megfigyelhető), akkor vehetjük $\ddfrac{1}{6}$-nak minden lehetséges érték valószínűségét, és így rögtön megkapjuk a 3. tulajdonságból minden esemény valószínűségét (az eseménybe foglalt lehetséges kimenetelek száma szorozva $\ddfrac{1}{6}$-al). Ha az eseménytér megszámlálható elemszámú, akkor működik is ez a módszer, azaz az elemi események valószínűségeiből minden esemény valószínűségét megkaphatjuk (nem megszámlálható esetben nem működik, például az egységintervallumon egyenletesen választott pont esetén minden egyes pont valószínűsége nulla, az intervallumok azonban már a hosszuknak megfelelő valószínűséget képviselnek).
|
||||
}
|
||||
|
||||
\section*{Diszkrét és folytonos valószínűségi változók}
|
||||
|
||||
\noindent \textbf{\emph{Valószínűségi változónak}} nevezünk egy eseménytér (kísérlet) elemeihez valós számokat\\
|
||||
rendelő $X : \Omega \to \mathbb{R}$ függvényt, ha
|
||||
\[
|
||||
\forall x \in \mathbb{R}: \Big\{\omega \in \Omega : X(\omega) < x\Big\} \in \mathcal{R}\ \textit{(halmaz eseményt alkot)}
|
||||
\]
|
||||
|
||||
\noindent A kockadobás esetén legegyszerűbb módon úgy definiálhatunk egy $X$ valószínűségi változót, hogy az értékének a dobás kimenetelét adjuk.\\
|
||||
|
||||
\noindent A $X$ valószínűségi változó \textbf{\emph{diszkrét}}, ha az értékkészlete véges vagy megszámlálhatóan végtelen.\\
|
||||
|
||||
\noindent Ha a $X$ diszkrét valószínűségi változó értékkészlete $\left\{x_1, x_2, \ldots\right\}$, akkor a $P(X = x_i)$ számokat $X$ \textbf{\emph{eloszlás}ának} nevezzük.\\
|
||||
|
||||
\noindent \textit{Megjegyzés}: Véges vagy végtelen sok szám, akkor és csak akkor alkot diszkrét eloszlást, ha nem negatívak és az összegük \textbf{1}.\\
|
||||
|
||||
\noindent A $X$ valószínűségi változó \textbf{eloszlásfüggvénye}: $F_{X}: \mathbb{R} \to \mathbb{R}$
|
||||
\[
|
||||
F_{X}(x)= P(X < x)
|
||||
\]
|
||||
|
||||
\noindent \textbf{Tétel.} Az $F_{X}: \mathbb{R} \to \mathbb{R}$ függvény pontosan akkor \textbf{\emph{eloszlásfüggvénye}} valamely valószínűségi változónak, ha
|
||||
\begin{enumerate}
|
||||
\item monoton növekvő: $\forall x_1 < x_2: F_{X}(x_1) \leq F_{X}(x_2)$
|
||||
\item balról folytonos: $\forall x_0 \in \mathbb{R}: \lim\limits_{x \to x_0^{-}}F_{X}(x) = F_{X}(x_0)$
|
||||
\item $\lim\limits_{x \to -\infty}{F_{X}(x)} = 0$
|
||||
\item $\lim\limits_{x \to +\infty}{F_{X}(x)} = 1$
|
||||
\end{enumerate}
|
||||
|
||||
\noindent Egy diszkrét valószínűségi változó eloszlásfüggvénye olyan lépcsős függvény, amely a lehetséges értékeknél ugrik, és az ugrás nagysága az adott érték valószínűsége.\\
|
||||
|
||||
\noindent Ketten lőnek céltáblára. Az $A$ találati esélye 0,7. és a $B$ találati esélye 0,8.\\
|
||||
Mindketten egy lövést adnak le egymástól függetlenül.\\
|
||||
Jelentse $X$ a találatok számát és adjuk meg az eloszlásfüggvényt!
|
||||
|
||||
\begin{center}
|
||||
$\begin{array}{|c|c|}
|
||||
\hline
|
||||
\textbf{találatok száma} & \textbf{valószínűség} \\ \hline
|
||||
0 & (1-0.7) * (1-0.8) = 0.3 * 0.2 = \textbf{0.06} \\ \hline
|
||||
1 & 0.7 * (1 - 0.8) + (1-0.7) * 0.8 = 0.7*0.2 + 0.3*0.8 = \textbf{0.38} \\ \hline
|
||||
2 & 0.7 * 0.8 = \textbf{0.56} \\ \hline
|
||||
\end{array}$\\
|
||||
\end{center}
|
||||
|
||||
\begin{center}
|
||||
\begin{tikzpicture}[scale=1.0]
|
||||
\begin{axis}[axis lines=middle,xmin=-2.0,xmax=5.0,ymin=0.0,ymax=1.3,legend pos=north west,ymajorgrids=true,
|
||||
xlabel=$\scriptstyle x$,
|
||||
ylabel=$\scriptstyle y$,
|
||||
tick label style={font=\small}]
|
||||
\addplot[only marks,mark=*,blue] coordinates { (1.0,0.06) };
|
||||
\addplot[only marks,mark=o,blue] coordinates { (0.0,0.06) };
|
||||
\addplot[no marks,domain=0.05:1,samples=10,smooth,line width=2pt,blue]{0.06};
|
||||
\addplot[only marks,mark=*,blue] coordinates { (0,0) };
|
||||
\addplot[only marks,mark=o,blue] coordinates { (1.0,0.44) };
|
||||
\addplot[no marks,domain=1.05:2,samples=10,smooth,line width=2pt,blue]{0.44};
|
||||
\addplot[only marks,mark=*,blue] coordinates { (2,0.44) };
|
||||
\addplot[no marks,domain=-2.0:-0.05,samples=10,smooth,line width=2pt,blue]{0};
|
||||
\addplot[only marks,mark=o,blue] coordinates { (2,1) };
|
||||
\addplot[no marks,domain=2.05:5.0,samples=10,smooth,line width=2pt,blue]{1};
|
||||
\end{axis}
|
||||
\end{tikzpicture}
|
||||
\end{center}
|
||||
|
||||
\noindent Ha $X$ diszkrét valószínűségi változó értékkészlete $\{x_1, x_2, \ldots\}$, akkor
|
||||
\[
|
||||
F_{X}(x) = \sum\limits_{i: x_i < x}P(X = x_i)
|
||||
\]
|
||||
|
||||
\noindent A szabályos kockadobás esetén az előző példában definiált $X$ valószínűségi változónak adjuk meg az eloszlásfüggvényét.
|
||||
Látható, hogy az 1, 2, 3, 4, 5 és 6 értékeknél lesz csak változás, ezeken a pontokon kívül nem.\\
|
||||
Az egyes intervallumokra a megfelelő valószínűségeket kiszámolva megkapjuk, hogy
|
||||
\begin{itemize}
|
||||
\item $F_{X}(x) = 0,\ \text{ha}\ x \leq 1$,
|
||||
\item $F_{X}(x) = \ddfrac{i}{6},\ \text{ha}\ i < x \leq i + 1\ \text{és}\ 1 < x \leq 6$,
|
||||
\item $F_{X}(x) = 1,\ \text{ha}\ x > 6$.
|
||||
\end{itemize}
|
||||
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\includegraphics[width=0.39\linewidth]{img/kockadobas_eloszlasfuggveny.png}
|
||||
\caption{}
|
||||
\label{fig:imder}
|
||||
\end{figure}
|
||||
|
||||
\noindent Legyen a $X$ diszkrét valószínűségi változó értékkészlete $\{x_1, x_2, \ldots\}$.\\
|
||||
Ekkor $X$ \emph{\textbf{várható értéke}}
|
||||
\[
|
||||
E(X) = \sum\limits_{k}x_k \cdot P(X = x_k)
|
||||
\]
|
||||
(feltéve, hogy ez a sor abszolút konvergens, azaz $\sum\limits_{k}\big|x_k\big| \cdot P(X = x_k) < \infty$).\\
|
||||
|
||||
\noindent \emph{Példa}:
|
||||
\noindent 3 darab 10 dollárossal befektetési terveink vannak, egy rulett segítségével. \\
|
||||
A terv a következő: felteszünk 10 dollárt a pirosra.\\
|
||||
|
||||
\noindent Ha nyer, akkor megdupláztuk a 10 dollárt és abbahagyjuk a játékot.\\
|
||||
\noindent Ha veszít, akkor újabb 10 dollárt teszünk a pirosra, és ha ezúttal nyerünk, akkor szintén abbahagyjuk a játékot.\\
|
||||
\noindent Ha másodszorra sem nyerünk, akkor az utolsó 10 dollárt is felrakjuk a pirosra.\\
|
||||
|
||||
\noindent A kérdés, hogy várhatóan mennyi pénzünk lesz a tranzakció végén.\\
|
||||
|
||||
\noindent A ruletten 18 piros, 18 fekete és egy zöld mező található.\\
|
||||
\noindent NY: Nyert, V: Veszített.
|
||||
|
||||
\begin{center}
|
||||
\renewcommand{\arraystretch}{2}
|
||||
$\begin{array}{|ccc|c|c|}
|
||||
\hline
|
||||
1. & 2. & 3. & X_i & P(X_i) \\ \hline
|
||||
NY & & & 40 & \ddfrac{18}{37} = 00487 \\ \hline
|
||||
V & NY & & 30 & \ddfrac{19}{37} \cdot \ddfrac{18}{37} = 0.25 \\ \hline
|
||||
V & V & NY & 20 & \ddfrac{19}{37} \cdot\ddfrac{19}{37} \cdot\ddfrac{18}{37} = 0.128 \\ \hline
|
||||
V & V & V & 0 & \ddfrac{19}{37} \cdot\ddfrac{19}{37} \cdot\ddfrac{19}{37} = 0.135 \\ \hline
|
||||
\end{array}$
|
||||
\renewcommand{\arraystretch}{1}
|
||||
\end{center}
|
||||
\[
|
||||
EX = \sum\limits_{k}x_k \cdot P(X = x_k) = 40 * 0,487 + 30 * 0.25 + 20 * 0.128 = 29,54
|
||||
\]
|
||||
|
||||
\subsection*{Folytonos valószínűségi változók}
|
||||
|
||||
\noindent A $X$ valószínűségi változó abszolút folytonos, ha létezik olyan $f_{X}: \mathbb{R} \to \mathbb{R}$ függvény, hogy $F_{X} = \bigintsss\limits_{-\infty}^{x}f_{X}(t)\ dt$ minden $x \in \mathbb{R}$ esetén. Ekkor az $f_{X}$ függvényt a $X$ valószínűségi változó \textbf{\emph{sűrűségfüggvényének}} nevezzük.\\
|
||||
|
||||
\noindent \textbf{Tétel.} Egy $f:\mathbb{R} \to \mathbb{R}$ függvény, ,,akkor és csak akkor" \emph{sűrűségfüggvény}e valamilyen abszolút folytonos valószínűségi változónak, ha
|
||||
\begin{itemize}
|
||||
\item $f$ nem negatív (azaz $f(x) \geq 0,\ \forall x \in \mathbb{R}$)
|
||||
\item $\bigintss\limits_{-\infty}^{\infty}f(x)\ dx = 1$
|
||||
\end{itemize}
|
||||
|
||||
\noindent \emph{Megjegyzés}:
|
||||
\begin{itemize}
|
||||
\item $P(a \leq X \leq b) = \bigintss\limits_{a}^{b}f_{X}(x)\ dx \qquad$ ($a,b \in \mathbb{R},\ a < b$ esetén)
|
||||
\item Ha $X$ abszolút folytonos valószínűségi változó, akkor $F_{X}(x)$ mindig folytonos függvény, és $f_{X}(x)$ folytonos az $x \in \mathbb{R}$ pontban, akkor $F_{X}$ differenciálható $x$-ben és $F_{X}'(x) = f_{X}(x)$.
|
||||
\end{itemize}
|
||||
|
||||
\begin{center}
|
||||
\begin{tikzpicture}
|
||||
\begin{axis}[
|
||||
no markers,
|
||||
domain=0:10,
|
||||
samples=100,
|
||||
axis lines*=left,
|
||||
xlabel=,
|
||||
ylabel=,
|
||||
height=6cm,
|
||||
width=10cm,
|
||||
xtick={-3, -2, -1, 0, 1, 2, 3},
|
||||
xticklabels={, a, , , b, , },
|
||||
ytick=\empty,
|
||||
enlargelimits=false,
|
||||
clip=false,
|
||||
axis on top,
|
||||
]
|
||||
\addplot [fill=cyan!30, draw=blue, line width=2pt, domain=-3:3] {gauss(0,1)} \closedcycle;
|
||||
\addplot [fill=orange!30, draw=orange, line width=2pt, domain=-3:-2] {gauss(0,1)} \closedcycle;
|
||||
\addplot [fill=red!30, draw=red, line width=2pt, domain=1:3] {gauss(0,1)} \closedcycle;
|
||||
\node[coordinate, pin={$P(a < X < b) = \int\limits_{a}^{b} f(x) dx$}] at (axis cs: 0, 0.4){};
|
||||
\node[coordinate, pin={$\makecell{P(b < X) =\\ \int\limits_{b}^{\infty} f(x) dx}$}] at (axis cs: 2.2, 0.0665){};
|
||||
\node[coordinate, pin={$\makecell{P(X < a) =\\ \int\limits_{-\infty}^{a} f(x) dx}$}] at (axis cs: -2.15, 0.05){};
|
||||
\end{axis}
|
||||
\end{tikzpicture}
|
||||
\end{center}
|
||||
|
||||
\begin{center}
|
||||
$\int\limits_{-\infty}^{\infty} f_{X}(x) dx = \int\limits_{-\infty}^{a} f(x) dx + \int\limits_{a}^{b} f(x) dx + \int\limits_{b}^{\infty} f(x) dx = 1$\\
|
||||
\end{center}
|
||||
|
||||
\noindent Legyen a $X$ abszolút folytonos valószínűségi változó sűrűségfüggvénye $f_{X}(x)$.\\
|
||||
Ekkor $X$ \emph{\textbf{várható értéke}}
|
||||
\[
|
||||
EX = \bigintssss\limits_{-\infty}^{\infty}x \cdot f_{X}(x)\ dx
|
||||
\]
|
||||
(feltéve, hogy ez az integrál abszolút konvergens, azaz $\bigintss\limits_{-\infty}^{\infty}\big|x\big| \cdot f_{X}(x)\ dx < \infty$)
|
||||
|
||||
\noindent A $X$ valószínűségi változó \textbf{\emph{szórásnégyzete}} (vairanciája):
|
||||
\[
|
||||
D^{2}X = E\big(X - EX\big)^{2} = EX^2 - E^2X
|
||||
\]
|
||||
(feltéve, hogy ez létezik.)
|
||||
|
||||
\noindent \emph{Megjegyzés}: A $X$ valószínűségi változó szórása
|
||||
\[
|
||||
DX = +\sqrt{D^{2}X}
|
||||
\]
|
||||
|
||||
\begin{itemize}
|
||||
\item Ha $X$ diszkrét valószínűségi változó:
|
||||
\[
|
||||
D^{2}X = \sum\limits_{k}x_{k}^{2} \cdot P(X = x_k) - \left(\sum\limits_{k}x_k \cdot P(X = x_k)\right)^2
|
||||
\]
|
||||
|
||||
\noindent Roulettes példa: $D^{2}X = 40^2 * 0,487 + 30^2 * 0.25 + 20^2 * 0.128 = 1055.2$
|
||||
|
||||
\item Ha $X$ abszolút folytonos valószínűségi változó:
|
||||
\[
|
||||
D^{2}X = \bigintssss\limits_{-\infty}^{\infty}x^{2} \cdot f_{X}\ dx - \left(\bigintssss\limits_{-\infty}^{\infty}x \cdot f_{X}(x)\ dx\right)
|
||||
\]
|
||||
\end{itemize}
|
||||
|
||||
\subsection*{Diszkrét valószínűségi változók}
|
||||
|
||||
\noindent Értékkészlete legfeljebb megszámlálhatóan végtelen, azaz $\{x_1, \ldots, x_n, ... \}$ elemekből áll.\\
|
||||
|
||||
\noindent Ekkor eloszlása: $p_k := P(X = x_k)$.\\
|
||||
|
||||
\noindent \begin{tabular}{|p{3.0cm}|p{4cm}|p{4cm}|c|c|}
|
||||
\hline \textbf{Név} & \textbf{Értelmezés} & \textbf{Eloszlás} & \textbf{$EX$} & \textbf{$D^{2}X$} \\
|
||||
\hline indikátor \newline $Ind(p)$ & Egy $p$ valószínűségű esemény bekövetkezik-e vagy sem. & $P(X=1) = p$ \newline $P(X=0) = 1-p$ & $p$ & $p(1-p)$ \\
|
||||
\hline geometriai (Pascal) \newline $Geo(p)$ & Hányadikra következik be először egy $p$ valószínűségű esemény. & \makecell{$P(X=k) =$\\ $p(1-p)^{k-1}$} \newline $k=1,2...$ & $\ddfrac{1}{p}$ & $\ddfrac{1-p}{p^2}$\\
|
||||
\hline \multicolumn{5}{l}{\makecell{Ha a kísérletünk a kockadobás az első 6-os dobásig és az\\ X valószínűségi változó a dobások száma, akkor 6 geometriai eloszlású.}} \\
|
||||
\hline hipergeometriai \newline $Hipgeo(N,M,n)$ & Visszatevés nélküli mintavétel. & $P(X=k) = \ddfrac{{M \choose k}{N-M \choose n-k}}{{N \choose n}}$ \newline $k=0,1,...,n$ & $n \ddfrac{M}{N}$ & $n \ddfrac{M}{N}(1 - \ddfrac{M}{N})(1 - \ddfrac{n-1}{N-1})$ \\
|
||||
\hline \multicolumn{5}{l}{\makecell{Ha N és M a végtelenbe tart úgy, hogy M / N egy 0 és 1 közötti p konstanshoz tart, akkor\\ a hipergeometrikus eloszlások sorozata a binomiális eloszláshoz tart.}}\\
|
||||
\hline binomiális \newline $Bin(n,p)$ & Visszatevéses mintavétel. & $P(X=k) = {n \choose k}p^{k}(1-p)^{n-k}$ \newline $k=0,1,...,n$ & $np$ & $np(1-p)$ \\
|
||||
\hline negatív binomiális \newline $Negbin(n,p)$ & Hányadikra következik be $n.$ alkalommal egy $p$ valószínűségű esemény. & $P(X=k) = {k-1 \choose n-1}p^{n}(1-p)^{k-n}$ \newline $k=n,n+1,...$ & $\ddfrac{n}{p}$ & $\ddfrac{n(1-p)}{p^{2}}$ \\
|
||||
\hline Poisson \newline $Poi(\lambda)$ & Ritka esemény. & $P(X=k) = \ddfrac{\lambda^k}{k!}e^{-\lambda}$ & $\lambda$ & $\lambda$ \\
|
||||
\hline
|
||||
\end{tabular}\\ \\
|
||||
|
||||
\noindent \emph{Példa}:\\
|
||||
|
||||
\noindent \textbf{\emph{Hipergeometrikus}}:\\
|
||||
|
||||
\noindent \emph{Egy úton 30 nap alatt 12 napon történt baleset. Ebből a 30 napból kiválasztunk egy hetet, mi a valószínűsége, hogy ezen a héten 2 balesetes nap van?}\\
|
||||
|
||||
\noindent Hipergeometriainál ismert, hogy mennyi az összes elem és az összes selejt N, K, és a minta n.\\
|
||||
\noindent Az összes elem $N = 30$ nap, ebből (selejtes) a balesetes nap, $M = 12$. A minta egy hét, vagyis $n = 7$, és itt $X = 2$ balesetes napot szeretnénk.\\
|
||||
|
||||
\begin{center}
|
||||
$P(X=k) = \ddfrac{{M \choose k}{N-M \choose n-k}}{{N \choose n}} = \ddfrac{{12 \choose 2}{30-12 \choose 7-2}}{{30 \choose 7}} = \ddfrac{{12 \choose 2}{18 \choose 5}}{{30 \choose 7}} = \ddfrac{565488}{2035800} = 0.27777188$\\
|
||||
$EX = n * \ddfrac{M}{N} = 7 * \ddfrac{12}{30} = 0.23^{.}$
|
||||
\end{center}
|
||||
|
||||
\noindent A másik két feladatban csak valamilyen százalékos érték, a várható, az átlag, az arány vagy valószínűség. Ez esetben nem tudjuk, hogy mennyi baleset történik a 30 nap alatt, csak azt tudjuk, hogy várhatóan mennyi.\\
|
||||
|
||||
\noindent \textbf{\emph{Binomiális:}}\\
|
||||
Egy úton 30 nap alatt átlag 12 balesetes nap van. Mi a valószínűsége, hogy egy adott héten 2 balesetes nap van?\\
|
||||
|
||||
\noindent A binomiálisnál vett példában nem lehet több a balesetes napok száma, mint 7, így X korlátos.\\
|
||||
$X$ = balesetes napok száma.\\
|
||||
$n = 7$, $p = \ddfrac{M}{N} = \ddfrac{12}{30} = 0.4$.\\
|
||||
|
||||
\begin{center}
|
||||
$P(X = k = 2) = {n \choose k}p^{k}(1-p)^{n-k} = {7 \choose 2}*0.4^{2}*(1 - 0.4)^{7-2} = 21*0.16*0.07776 = 0.2612736$
|
||||
$EX = n * p = 7 * 0.4 = 2.8$
|
||||
\end{center}
|
||||
|
||||
\noindent \textbf{\emph{Poisson:}}\\
|
||||
Egy úton 30 nap alatt átlag 12 baleset történik. Mi a valószínűsége, hogy egy adott héten 2 baleset van?\\
|
||||
Az első két esetben X a balesetes napok száma, a harmadikban pedig a balesetek száma.\\
|
||||
|
||||
\noindent A harmadik feladatnál a Poisson eloszlás esetében baleset tetszőleges számú lehet, átlagban 12 30 naponta, de lehet akár 1000 is, tehát itt X nem korlátos.\\
|
||||
$X$ = balesetek száma.\\
|
||||
$\lambda =$ várhatóan hány baleset van egy héten 30 naponta 12 baleset szokott lenni, tehát naponta $\ddfrac{12}{30} = 0.4$ és így hetente hétszer annyi $7 * 0.4 = 2.8$.\\
|
||||
\begin{center}
|
||||
$P(X = k = 2) = \ddfrac{\lambda^k}{k!}e^{-\lambda} = \ddfrac{2.8^2}{2!}e^{-2.8} = \ddfrac{7.84}{2} * 0.0608101 = 0,238375592$\\
|
||||
$E(X) = \lambda = 2.8$\\
|
||||
\end{center}
|
||||
|
||||
\noindent \begin{tabular}{|p{3cm}|c|c|c|c|}
|
||||
\hline \textbf{Név} & \textbf{Eloszlásfüggvény} & \textbf{Sűrűségfüggvény} & \textbf{$EX$} & \textbf{$D^{2}X$} \\
|
||||
\hline egyenletes \newline $E(a,b)$
|
||||
& $\left\{\begin{array} {lr}
|
||||
0 & x \leq a \\
|
||||
\ddfrac{x-a}{b-a} & a < x \leq b \\
|
||||
1 & b < x
|
||||
\end{array}\right.$
|
||||
& $\left\{\begin{array} {lr}
|
||||
\ddfrac{1}{b-a} & a < x \leq b \\
|
||||
0 & \text{különben}
|
||||
\end{array}\right.$
|
||||
& $\ddfrac{a+b}{2}$
|
||||
& $\ddfrac{(b-a)^2}{12}$ \\
|
||||
\hline exponenciális \newline $Exp(\lambda)$
|
||||
& $\left\{\begin{array} {lr}
|
||||
1 - e^{-\lambda x} & x \geq 0 \\
|
||||
0 & \text{különben}
|
||||
\end{array}\right.$
|
||||
& $\left\{\begin{array} {lr}
|
||||
\lambda \cdot e^{-\lambda x} & x \geq 0 \\
|
||||
0 & \text{különben}
|
||||
\end{array}\right.$
|
||||
& $\ddfrac{1}{\lambda}$
|
||||
& $\ddfrac{1}{\lambda^{2}}$ \\
|
||||
\hline normális \newline $N(m,\sigma^2)$ & $...$ & $\ddfrac{1}{\sqrt{2 \pi}\sigma}e^{-\ddfrac{(x-m)^2}{2\sigma^2}}$ $x \in \mathbb{R}$ & $m$ & $\sigma^2$ \\
|
||||
\hline standard normális \newline $N(0,1^2)$ & $\Phi(x)=...$ & $\ddfrac{1}{\sqrt{2 \pi}}e^{-\ddfrac{x^2}{2}}$ $x \in \mathbb{R}$ & $0$ & $1$ \\
|
||||
\hline gamma \newline $\Gamma(\alpha,\lambda)$
|
||||
& $...$
|
||||
& $\left\{\begin{array} {lr}
|
||||
\ddfrac{1}{\Gamma(\alpha)}\lambda^{\alpha}x^{\alpha-1}e^{-\lambda x} & x \geq 0 \\
|
||||
0 & \text{különben}
|
||||
\end{array}\right.$
|
||||
& $\ddfrac{\alpha}{\lambda}$
|
||||
& $\ddfrac{\alpha}{\lambda^2}$ \\
|
||||
\hline
|
||||
\end{tabular}\\
|
||||
|
||||
\subsection*{Fogalmak}
|
||||
|
||||
\begin{itemize}
|
||||
\item \textit{Konvolúció}: $X,Y$ független valószínűségi változók, konvolúciójuk az $X+Y$ v. v.
|
||||
\item \textit{Függetlenség}: $P(X_1<x_1, ..., X_n<x_n) = \prod\limits_{i=1}^{n}{P(X_i<x_i)}$ vagy diszkrét esetben:
|
||||
\[
|
||||
P(X_1)x_1, \ldots, X_n=x_n) = \prod_{i=1}^{n}{P(X_i=x_i)}
|
||||
\]
|
||||
\item \textit{Várható érték}: $(\Omega, \mathcal{R}, P)$ valószínűségi mező, $X:\Omega \to \mathbb{R}$ valószínűségi változó, $EX = \int_{\Omega}{XdP}$, ha ez létezik. Diszkrét esetben $EX = \sum_{k}{x_k \cdot p_k}$, ha abszolút konvergens. Abszolút folytonos esetben $EX = \int_{-\infty}^{\infty}{x \cdot f(x)dx}$, ha abszolút folytonos.
|
||||
\item \textit{Szórásnégyzet}: $D^{2}X = E\big((X-EX)^2\big) = EX^2-E^{2}X$
|
||||
\item \textit{$l.$ momentum}: $EX^l = \int\limits_{\Omega}{x^{l}dP}$, ha létezik.
|
||||
\item \textit{Szórás}: $DX = \sqrt{D^{2}X}$
|
||||
\item \textit{Kovariancia}: $cov(X,Y) = E((X-EX)(Y-EY) = E(XY) - EX \cdot EY$. Ha $cov(X,Y) = 0$, akkor $X$ és $Y$ korrelálatlan. (Megjegyzés: ha két v.v. független, akkor $cov(X,Y) = 0$, vagyis korrelálatlanok; illetve $cov(X,X) = D^{2}X$.)
|
||||
\item \textit{Korreláció}: $R(X,Y) = \ddfrac{cov(X,Y)}{DX \cdot DY}$, két v.v. lineáris kapcsolatát méri.
|
||||
\begin{itemize}
|
||||
\item $R > 0 \to$ pozitív
|
||||
\item $R < 0 \to$ negatív
|
||||
\item $R^2 \sim 0 \to$ gyenge
|
||||
\item $R^2 \sim 0.5 \to$ közepes
|
||||
\item $R^2 \sim 1 \to$ erős
|
||||
\end{itemize}
|
||||
\end{itemize}
|
||||
|
||||
\section*{Nagy számok törvénye}
|
||||
|
||||
\subsection*{Gyenge törvény}
|
||||
|
||||
$X_1, X_2, ...$ függetlenek, azonos eloszlásúak, $EX_i = m < \infty$, $D^{2}X_i = \sigma^2 < \infty$. \\
|
||||
\[
|
||||
P\left(\ddfrac{X_1 + ... + X_n}{n} - m \geq \varepsilon\right) \rightarrow 0 \quad (n \to \infty)
|
||||
\]
|
||||
$\forall \varepsilon > 0$\text{-ra (sztochasztikus konvergencia)}.
|
||||
|
||||
\subsection*{Erős törvény}
|
||||
|
||||
$X_1, X_2, ...$ függetlenek, azonos eloszlásúak, $EX_1 = m < \infty$, $D^{2}X_1 = \sigma^2 < \infty$. \\
|
||||
\[
|
||||
\ddfrac{X_1 + ... + X_n}{n} \rightarrow m \quad (n \to \infty)
|
||||
\]
|
||||
1 valószínűséggel. \\
|
||||
Megjegyzés: Csebisev-egyenlőtlenséggel bizonyítjuk. $\Big(\ddfrac{\sigma^2}{n \varepsilon^2} \to 0$ $(n \to \infty)\Big)$
|
||||
|
||||
\subsubsection*{Csebisev-egyenlőtlenség}
|
||||
|
||||
$EX$ véges. \\
|
||||
Ekkor $P(|X-EX| \geq \lambda) \leq \ddfrac{D^{2}X}{\lambda^2}$ \\
|
||||
Megjegyzés: Bizonyítás Markov-egyenlőtlenséggel.
|
||||
|
||||
\subsubsection*{Markov-egyenlőtlenség}
|
||||
|
||||
$X \geq 0, c > 0$. \\
|
||||
Ekkor $P(X \geq c) \leq \ddfrac{EX}{c}$
|
||||
|
||||
\subsection*{Konvergenciafajták}
|
||||
|
||||
$X_n \to X$, vagyis $X$ konvergens.
|
||||
\begin{itemize}
|
||||
\item \textit{sztochasztikusan}: ha $\forall \varepsilon > 0$-ra $P(|X_n - X| \geq \varepsilon) \rightarrow 0$ $(n \to \infty)$.
|
||||
\item \textit{1 valószínűséggel (majdnem mindenütt)}: ha $P(\omega : X_n(\omega) \to X(\omega)) = 1$.
|
||||
\item \textit{$L^p$-ben}: ha $E(|X_n - X|^p) \rightarrow 0$ $(n \to \infty)$ ($p>0$ rögzített).
|
||||
\item \textit{eloszlásban}: ha $F_{X_n}(x) \rightarrow F_{X}(x)$ $(n \to \infty)$ az utóbbi minden folytonossági pontjában.
|
||||
\end{itemize}
|
||||
\textit{Kapcsolataik}: 1 valószínűségű és $L^p$-beli a legerősebb, ezekből következik a sztochasztikus, ebből pedig az eloszlásbeli.
|
||||
|
||||
\section*{Centrális határeloszlás tétel}
|
||||
|
||||
$X_1, X_2, ...$ függetlenek, azonos eloszlásúak, $EX_1 = m < \infty$, $D^{2}X_1 = \sigma^2 < \infty$. \\
|
||||
Ekkor $\ddfrac{X_1 + ... + X_n - nm}{\sqrt{n}\sigma} \rightarrow N(0,1)$ $(n \to \infty)$ eloszlásban, azaz
|
||||
\[
|
||||
P\left(\ddfrac{X_1 + ... + X_n - nm}{\sqrt{n}\sigma} < x\right) \rightarrow \Phi(x)\quad (n \to \infty)
|
||||
\]
|
||||
|
||||
\section*{Statisztikai mező}
|
||||
|
||||
$(\Omega, \mathcal{R}, \mathcal{P})$ hármas, ha $\mathcal{P} = \{P_{\vartheta}\}_{\vartheta \in \Theta}$ és $(\Omega, \mathcal{R}, P_{\vartheta})$\\
|
||||
Kolmogorov-féle valószínűségi mező $\forall \vartheta \in \Theta$-ra.
|
||||
|
||||
\subsection*{Fogalmak}
|
||||
|
||||
\begin{itemize}
|
||||
\item \textit{Minta}: $\underline{X} = (X_1,...,X_n): \Omega \to X \in \mathbb{R}^n$. ($X_i$ valószínűségi változó)
|
||||
\item \textit{Mintatér}: $X$, minta lehetséges értékeinek halmaza, gyakran $\mathbb{R}^n, \mathbb{Z}^n$.
|
||||
\item \textit{Minta [realizációja]}: $\underline{x} = (x_1,...,x_n)$, konkrét megfigyelés.
|
||||
\item \textit{Statisztika}: $T: X \to \mathbb{R}^k$.
|
||||
\item \textit{Statisztika alaptétele}: (Glivenko--Cantelli-tétel) $X_1, X_2, ...$ független, azonos eloszlású $F$ eloszlásfüggvénnyel. Ekkor az $F_n$ tapasztalati eloszlásfüggvényre teljesül, hogy
|
||||
\[
|
||||
\sup_{-\infty<x<\infty}{|F_n(x) - F(x)|} \to 0 \quad (n \to \infty)
|
||||
\]
|
||||
1 valószínűséggel.
|
||||
\end{itemize}
|
||||
|
||||
\section*{Statisztikai becslések}
|
||||
|
||||
$(\Omega, \mathcal{R}, \mathcal{P})$ statisztikai mező, $\vartheta \in \Theta$, $P_{\vartheta}(X_1<x_1,...,X_n<x_n) = F_{\vartheta}(\underline{x})$ \\
|
||||
$T(\underline{X})$ a $\vartheta$ \textit{becslése}, ha $T: \mathbb{R}^n \to \Theta$. \\
|
||||
$T(\underline{X})$ a $h(\vartheta)$ \textit{becslése}, ha $T: \mathbb{R}^n \to h(\Theta)$. \\
|
||||
\textit{Torzítatlanság}: $T(\underline{X})$ torzítatlan becslése $h(\vartheta)$-nak, ha $E_{\vartheta}T(\underline{X}) = h(\vartheta)$ $\forall \vartheta \in \Theta$. \\
|
||||
\textit{Aszimptotikusan torzítatlan}: $T(\underline{X})$ aszimptotikusan torzítatlan a $h(\vartheta)$-ra, ha $E_{\vartheta}T(\underline{X}) \to h(\vartheta)$ $(n \to \infty)$ $\forall \vartheta \in \Theta$. \\
|
||||
A $T_1$ torzítatlan becslés \textit{hatásosabb} $T_2$ torzítatlan becslésnél, ha $D_{\vartheta}^{2}T_1 \leq D_{\vartheta}^{2}T_2$ $\forall \vartheta \in \Theta$. \\
|
||||
Hatásos, ha minden más torzítatlan becslésnél hatásosabb. Ha van hatásos becslés, akkor az egyértelmű.
|
||||
|
||||
\begin{itemize}
|
||||
\item \textit{Maximum-likelihood becslés}: Likelihood függvény: $L(\vartheta, \underline{x}) = \left\{\begin{array} {lr}
|
||||
P_{\vartheta}(\underline{X} = \underline{x}) & diszkr. \\
|
||||
f_{\vartheta, \underline{X}}(\underline{x}) & absz. folyt.
|
||||
\end{array}\right.$ \\
|
||||
Független esetben: $L(\vartheta, \underline{x}) = \left\{\begin{array} {lr}
|
||||
\prod_{i=1}^{n}{P_{\vartheta}(X_i = x_i)} & diszkr. \\
|
||||
\prod_{i=1}^{n}{f_{\vartheta, X_i}(x_i)} & absz. folyt.
|
||||
\end{array}\right.$\\
|
||||
$\hat{\vartheta}$ a $\vartheta$ ismeretlen paraméter maximum-likelihood becslése, ha $L(\hat{\vartheta},\underline{X}) = \max_{\vartheta \in \Theta}{L(\vartheta,\underline{X})}$.
|
||||
\item \textit{Momentum-módszer becslés}: $\vartheta = (\vartheta_1, ..., \vartheta_k)$, $X_1, ..., X_n$, $l.$ momentum: $M_l(\underline{\vartheta}) = E_{\underline{\vartheta}}X_{i}^{l}$, tapasztalati $l.$ momentum: $\hat{M}_l = \ddfrac{\sum_{i=1}^{n}{X_i^l}}{n}$. \\ $\hat{\underline{\vartheta}}$ a $\underline{\vartheta}$ momentum módszer szerinti becslése, ha megoldása az $M_l(\underline{\vartheta}) = \hat{M}_l$, $l=1..k$ egyenletrendszernek.
|
||||
\end{itemize}
|
||||
|
||||
\section*{Hipotézisvizsgálat}
|
||||
|
||||
Felteszünk egy hipotézist, és vizsgáljuk, hogy igaz-e. Elfogadjuk vagy elutasítjuk. Lehet paraméteres vagy nem paraméteres, vizsgálhatjuk várható értékek, szórások egyezőségét, értékét, teljes eseményrendszerek függetlenségét. Illeszkedésvizsgálattal megállapíthatjuk, hogy a valószínűségi változók adott eloszlásfüggvényűek-e, homogenitásvizsgálattal pedig azt, hogy ugyanolyan eloszlású-e két minta. \\
|
||||
$H_0$: nullhipotézis, $\vartheta \in \Theta_0$; $H_1$: ellenhipotézis, $\vartheta \in \Theta_1$; $\Theta = \Theta_0 \bigcup \Theta_1$. \\
|
||||
\textit{Egy- és kétoldali vizsgálat}: Kétoldali ellenhipotézisnél a nem egyezőséget tesszük fel, egyoldalinál valamilyen relációt. Kétoldalinál a próba értékének abszolút értékét vizsgáljuk, hogy az elfogadási tartományon belül van-e, ekkor például az u-próbánál az adott hibaszázalékot meg kell felezni a számításhoz, hiszen a $\Phi$ függvény szimmetrikus az $y$ tengelyre.
|
||||
\begin{itemize}
|
||||
\item \textit{Statisztikai próba}: $X = X_e \bigcup X_k$ (diszjunkt halmazok) elfogadási és kritikus tartomány. Ez a felbontás a statisztikai próba. Ha a megfigyelés eleme a kritikus tartománynak, akkor elutasítjuk a nullhipotézist, ha nem eleme, akkor elfogadjuk. $T(\underline{x}) = \left\{\begin{array} {lr} 1 & x \in X_k \\ 0 & otherwise \end{array}\right.$
|
||||
\item \textit{Elsőfajú hiba}: $H_0$ igaz, de elutasítjuk. Valószínűsége: $P_{\vartheta}(\underline{X} \in X_k)$, $\vartheta \in \Theta_0$.
|
||||
\item \textit{Másodfajú hiba}: $H_0$ hamis, de elfogadjuk. Valószínűsége: $P_{\vartheta}(\underline{X} \notin X_k)$, $\vartheta \in \Theta_1$. \\
|
||||
Az a cél, hogy ezek a hibák minél kisebbek legyenek. Egymás kárára javítható a két valószínűség, ha a megfigyelések száma rögzített.
|
||||
\item \textit{Próba terjedelme}: $\alpha$ a próba terjedelme, ha $P_{\vartheta}(\underline{X} \in X_k) \leq \alpha$, $\vartheta \in \Theta_0$. \\
|
||||
$\alpha$ a próba pontos terjedelme, ha $\sup_{\vartheta \in \Theta_0}{P_{\vartheta}(\underline{X} \in X_k) = \alpha}$.
|
||||
\end{itemize}
|
||||
|
||||
\section*{Klasszikus statisztikai próbák}
|
||||
|
||||
\subsection*{Alapfogalmak\\}
|
||||
|
||||
\noindent \textbf{\emph{Alaphipotézis}}nek vagy \textbf{\emph{nullhipotézis}}nek $(H_0)$ nevezzük az alapfelvetésünket, amit igazolni szeretnénk. Ezzel szemben áll az ellenhipotézis, ami akkor teljesül, ha a nullhipotézis nem igaz.\\
|
||||
|
||||
\noindent \emph{\textbf{Elfogadási tartomány}}nak nevezünk egy olyan halmazt, amelyben a nullhipotézis teljesülése esetén a vizsgált statisztika értéke nagy valószínűséggel $(1-p)$ elhelyezkedik. Ezzel szemben a \textbf{\emph{kritikus tartomány}}ba várhatóan akkor esik a $h$ statisztika értéke, ha az ellenhipotézis teljesül.
|
||||
|
||||
\begin{center}
|
||||
\noindent \textbf{Hibák} \qquad
|
||||
\begin{tabular}{c|cc}
|
||||
& $H_0$ igaz & $H_0$ hamis \\ \hline
|
||||
$H_0$ elfogadása & helyes döntés & másodfajú hiba \\
|
||||
$H_0$ elvetése & elsőfajú hiba & helyes döntés \\
|
||||
\end{tabular}
|
||||
\end{center}
|
||||
|
||||
\noindent Egy \textbf{\emph{próba terjedelme}} az elsőfajú hiba valószínűségének felső határa.\\
|
||||
|
||||
\noindent Ha $\beta$ a másodfajú hiba valószínűsége, akkor a \textbf{\emph{próba erőfüggvénye}}: $1 - \beta$.\\
|
||||
|
||||
\noindent Azonos terjedelmű próbák közül \textbf{\emph{erősebb}}nek nevezzük azt, amelyiknek az erőfüggvénye minden ponton nem kisebb a másikénál.\\
|
||||
|
||||
\noindent Továbbiakban:
|
||||
\begin{itemize}
|
||||
\item X normális eloszlású, ismert szórású változó $n$ elemű mintája:
|
||||
\[X_i \sim N(m, \sigma^2)),\quad i=1,\ldots,n\]
|
||||
\item X, Y egymástól független normális eloszlású, ismert szórású változó $n, m$ elemű mintája:
|
||||
\begin{center}
|
||||
$X_i \sim N(m, \sigma^2)),\quad i=1,\ldots,n$, \\
|
||||
$\eta_j \sim N(m_2, \sigma_2^2),\quad j=1,\ldots, m$
|
||||
\end{center}
|
||||
\item $\overline{X}$ a vizsgált valószínűségi változó átlaga a mintában,
|
||||
\item $m_{i}$ az előre megadott érték, amihez az átlagot viszonyítjuk,
|
||||
\item $\sigma$ a vizsgált valószínűségi változó ismert szórása.
|
||||
\end{itemize}
|
||||
|
||||
\subsection*{u-próbák}
|
||||
|
||||
\subsubsection*{Egymintás eset}
|
||||
|
||||
\noindent A próba azt ellenőrzi, hogy egy adott statisztikai ismérv esetén a mintabeli átlag szignifikánsan eltér-e a populációs átlagtól. Más szavakkal, hogy egy valószínűségi változó átlaga szignifikánsan különbözik-e egy adott $m$ értéktől.\\
|
||||
|
||||
\noindent Adott egy X normális eloszlású, ismert szórású változó $n$ elemű mintája. Nullhipotézisünk az, hogy a várható érték megegyezik-e egy konkrét értékkel ($H_0 : m = m_0$), másképpen fogalmazva azt vizsgáljuk, hogy a mintabeli átlag nem tér-e el szignifikánsan $m_0$-tól.\\
|
||||
|
||||
\noindent Legyen a próbastatisztika:
|
||||
\[
|
||||
u = \sqrt{n}\ddfrac{\overline{X}- m_0}{\sigma}
|
||||
\]
|
||||
|
||||
\noindent Ekkor a $p$ valószínűség mellett elfogadjuk a nullhipotézist, ha $\big|u\big| \leq u_{\frac{p}{2}}$, ahol $u_{\frac{p}{2}}$ a standard normális eloszlás $1-\frac{p}{2}$ kvantilise. Ha igaz a nullhipotézis, akkor ez közel standard normális eloszlású.\\
|
||||
|
||||
\noindent Ha az ellenhipotézis egyoldalú, akkor az elfogadási tartomány $u \leq u_p$-re, illetve $u \geq -u_p$-re módosul.\\
|
||||
|
||||
\subsubsection*{Kétmintás eset}
|
||||
|
||||
\noindent A próba azt vizsgálja, hogy egy valószínűségi változó átlaga két külön mintában szignifikánsan különböző-e.\\
|
||||
|
||||
\noindent Két független (a fenti feltételeket teljesítő) mintára $(X, Y)$ vonatkozó nullhipotézisünk, hogy várható értékük egyenlő ($H_0 : m_1 = m_2$). Erre a próbastatisztika:
|
||||
\[
|
||||
u = \ddfrac{\overline{X} - \overline{Y}}{\sqrt{\ddfrac{\sigma_{x}^{2}}{n_x} + \ddfrac{\sigma_{y}^{2}}{{n_y}}}}
|
||||
\]
|
||||
|
||||
\noindent \textbf{Tétel.} Az $u$-próbák konzisztens, torzítatlan és legerősebb próbák.\\
|
||||
|
||||
\begin{itemize}
|
||||
\item \textit{u-próba}: Feltételezzük, hogy a minta normális eloszlású ($X_i \sim N(m, \sigma^2)$), $i=1..n$, és hogy a szórás ismert.
|
||||
\begin{itemize}
|
||||
\item \textit{Egymintás}: A nullhipotézis az, hogy a várható érték megegyezik-e egy konkrét értékkel ($m_0$), másképpen fogalmazva azt vizsgáljuk, hogy a mintabeli átlag nem tér-e el szignifikánsan $m_0$-tól. Tehát $H_0: m = m_0$, és kétoldali esetben $H_1: m \neq m_0$, egyoldaliban pedig például $H_1: m \geq m_0$ vagy $H_1: m < m_0$. \\
|
||||
Az u-próba értéke: $u = \sqrt{n}\ddfrac{\overline{X} - m_0}{\sigma}$. Ha igaz a nullhipotézis, akkor ez közel standard normális eloszlású. \\
|
||||
$\varepsilon$ hibavalószínűséggel vizsgáljuk a hipotézist, ehhez szükségünk van a $\Phi(u_{1-\varepsilon}) = 1 - \varepsilon$ értékre. \\
|
||||
Kétoldali esetben $H_0$-t elutasítjuk, ha $|u| > u_{1-\ddfrac{\varepsilon}{2}}$, és elfogadjuk, ha $|u| \leq u_{1-\ddfrac{\varepsilon}{2}}$. \\
|
||||
Egyoldali esetben $u > u_{1-\varepsilon}$ (jobb) és $u < u_{1-\varepsilon}$ (bal) esetét vizsgáljuk, ezen esetekben utasítjuk el $H_0$-t.
|
||||
\item \textit{Kétmintás}: Itt a feltételek a következők: $X_i \sim N(m_1, \sigma_1^2)$, $i=1..n$ és $\eta_j \sim N(m_2, \sigma_2^2)$, $j=1..m$. A szórások szintén ismertek. $H_0: m_1 = m_2$, és $u = \ddfrac{\overline{X} - \overline{\eta}}{\sqrt{\ddfrac{\sigma_1^2}{n} + \ddfrac{\sigma_2^2}{m}}}$. $H_1 : m_1 > m_2$, ez a felső (jobb?) oldali, $H_1 : m_1 < m_2$ pedig az alsó (bal?) ellenhipotézis.
|
||||
\end{itemize}
|
||||
\item \textit{t-próba}: Ennél a próbánál nem ismert a szórás, viszont ugyanúgy normális eloszlást feltételezünk, mint az u-próbánál. $X_i \sim N(m, \sigma^2)$, $i=1..n$.
|
||||
\begin{itemize}
|
||||
\item \textit{Egymintás}: $H_0: m = m_0$. Ellenhipotézis az u-próbához hasonlóan. $t = \sqrt{n}\ddfrac{\overline{X} - m_0}{\sqrt{\sigma_{*}^2}}$, ahol $\sigma_{*}^2$ a korrigált tapasztalati szórásnégyzet, amit a mintából számíthatunk ki. (Megjegyzés: $n$ helyett $n-1$-gyel osztunk a képletben.) Ez az érték $t$-eloszlású $H_0$ esetén, ami $n-1$ szabadságfokú. Más néven szokás ezt a próbát Student-próbának is nevezni.
|
||||
\item \textit{Kétmintás}: $X_i \sim N(m_1, \sigma_1^2)$, $i=1..n$ és $\eta_j \sim N(m_2, \sigma_2^2)$, $j=1..m$. Ez esetben sem ismert a szórás, viszont feltételezzük, hogy a két minta szórása megegyezik. Ekkor $t_{n+m-2} = \sqrt{\ddfrac{nm(n+m-2)}{n+m}}\ddfrac{\overline{X} - \overline{\eta}}{\sqrt{\sum{(X_i - \overline{X})^2} + \sum{(\eta_j - \overline{\eta})^2}}}$. $n+m-2$ a próba szabadságfoka.
|
||||
\end{itemize}
|
||||
\item \textit{f-próba}: Két minta esetén használható. Ez a próba szórások egyezőségének vizsgálatára alkalmas, tehát itt $H_0 : \sigma_1 = \sigma_2$. Ha a két minta szórásnégyzete megegyezik, akkor a hányadosuk $1$-hez tart. $f_{n-1,m-1} = max(\ddfrac{\sigma_1^2}{\sigma_2^2}, \ddfrac{\sigma_2^2}{\sigma_1^2})$. A két szabadsági fok közül az első az $f$ számlálójához tartozó minta elemszáma $- 1$, a második a nevezőjéhez.
|
||||
\item \textit{Welch-próba}: Más néven d-próba. Hasonló, mint a kétmintás t-próba, de itt a szórások egyezőségét nem kell feltenni. Szabadsági foka bonyolult képlettel számítható.
|
||||
\item \textit{szekvenciális próbák}: $V_n = \ddfrac{\prod{f_1(x_i)}}{\prod{f_0(x_i)}} = \ddfrac{L_1(\underline{x})}{L_0(\underline{x})}$. $f_0$ a nullhipotézis szerinti sűrűségfüggvény, $f_1$ az ellenhipotézis szerinti. Adott egy $A$ és egy $B$ érték, $A<B$. Ha $V_n \geq B$, akkor elutasítjuk $H_0$-t, ha $V_n \leq A$, akkor elfogadjuk, és ha $A < V_n < B$, akkor új mintaelemet veszünk. \\
|
||||
\textit{Stein tétele} szerint $N$ 1 valószínűséggel véges. $N = min\{n: V_n \leq A \vee V_n \geq B \}$.
|
||||
\item \textit{Minőség-ellenőrzés}: $n_1$ elemet nézünk, $c_1 < c_2$ és $c_3$ határértékek. Ha $X_1 \leq c_1$, akkor elfogadjuk $H_0$-t, ha $X_1 \geq c_2$, akkor elutasítjuk. Ha $c_1 < X_1 < c_2$, akkor megnézünk $n_2$ elemet, és ha $X_1 + X_2 \leq c_3$, akkor szintén elfogadjuk $H_0$-t. A várható mintaelemszám méri a hatékonyságát.
|
||||
\item \textit{$\chi^2$-próba}: $H_0: A_1,...,A_n$ teljes eseményrendszer. $P(A_i) = p_i, i=1..n$, $\nu_i$ a gyakoriság. Ha teljesül a nullhipotézis, akkor $\ddfrac{\nu_i}{n} \sim p_i$. \\
|
||||
$\chi^2 = \sum{\ddfrac{(\nu_i - np_i)^2}{np_i}}$. Ez $\chi^2$ eloszlású, aminek $r-1$ szabadságfoka van. $r$ az összeadott csoportok száma. (Megjegyzés: ha túl kicsi lenne 1-1 csoportban a gyakoriság, akkor azokat összevonjuk.) \\
|
||||
$\chi^2$-próbát használhatunk illeszkedés-, homogenitás- és függetlenségvizsgálatra is. (Megjegyzés: más képlet van mindhez.)
|
||||
\item \textit{Egyéb próbák}:
|
||||
\begin{itemize}
|
||||
\item \textit{Kolmogorov--Szmirnov-próba}: 2 tapasztalati eloszlásfüggvény megegyezik-e (homogenitásvizsgálat), vagy 1 minta esetén megegyezik-e valamilyen eloszlásfüggvénnyel. $D_{m,n} = \max_{x}{|F_n(x) - G_m(x)|}$. $X_i$ $F$ eloszlásfüggvénnyel, $Y_j$ $G$-vel. $H_0 : F \equiv G$.
|
||||
\item \textit{Előjel-próba}: Hányszor teljesül, hogy valami pozitív.
|
||||
\item \textit{Wilcoxon-próba}: (rangstatisztika), $P(X > Y) = \ddfrac{1}{2}$ tesztelésére összeszámoljuk, hogy hány párra teljesül, hogy $X_i > Y_j$.
|
||||
\end{itemize}
|
||||
\end{itemize}
|
||||
|
||||
\end{document}
|
After Width: | Height: | Size: 29 KiB |
After Width: | Height: | Size: 11 KiB |
After Width: | Height: | Size: 10 KiB |
After Width: | Height: | Size: 9.7 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 15 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 17 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 34 KiB |
After Width: | Height: | Size: 60 KiB |
After Width: | Height: | Size: 39 KiB |
After Width: | Height: | Size: 32 KiB |
After Width: | Height: | Size: 63 KiB |
After Width: | Height: | Size: 29 KiB |
After Width: | Height: | Size: 30 KiB |
After Width: | Height: | Size: 29 KiB |
After Width: | Height: | Size: 29 KiB |
After Width: | Height: | Size: 45 KiB |
After Width: | Height: | Size: 49 KiB |
After Width: | Height: | Size: 2.6 KiB |
After Width: | Height: | Size: 22 KiB |
After Width: | Height: | Size: 44 KiB |
@@ -0,0 +1,823 @@
|
||||
\documentclass[12pt,margin=0px]{article}
|
||||
|
||||
\usepackage[a4paper, margin=1in]{geometry}
|
||||
\usepackage[export]{adjustbox}
|
||||
\usepackage[hungarian]{babel}
|
||||
\usepackage[normalem]{ulem}
|
||||
\usepackage[table,xcdraw]{xcolor}
|
||||
\usepackage[thinlines]{easytable}
|
||||
\usepackage[utf8]{inputenc}
|
||||
\usepackage{amsmath}
|
||||
\usepackage{amssymb}
|
||||
\usepackage{amsthm}
|
||||
\usepackage{enumitem}
|
||||
\usepackage{fancyhdr}
|
||||
\usepackage{float}
|
||||
\usepackage{fontawesome}
|
||||
\usepackage{geometry}
|
||||
\usepackage{graphicx}
|
||||
\usepackage{hhline}
|
||||
\usepackage{ifthen}
|
||||
\usepackage{listings}
|
||||
\usepackage{makecell}
|
||||
\usepackage{multirow}
|
||||
\usepackage{newunicodechar}
|
||||
\usepackage{pgf,tikz}
|
||||
\usepackage{subcaption}
|
||||
\usepackage{tipa}
|
||||
\usepackage{wasysym}
|
||||
\usepackage{xcolor}
|
||||
\usetikzlibrary{positioning,calc,shapes.multipart,arrows,arrows.meta,matrix,automata}
|
||||
|
||||
\geometry{
|
||||
a4paper,
|
||||
total={170mm,297mm},
|
||||
left=20mm,
|
||||
right=20mm,
|
||||
top=20mm,
|
||||
bottom=20mm
|
||||
}
|
||||
|
||||
\renewcommand{\figurename}{ábra}
|
||||
\newenvironment{tetel}[1]{\paragraph{#1 \\}}{}
|
||||
\renewcommand{\baselinestretch}{1.15}
|
||||
|
||||
\newcommand{\N}{\mathbb{N}}
|
||||
\newcommand{\Z}{\mathbb{Z}}
|
||||
\newcommand{\R}{\mathbb{R}}
|
||||
\newcommand{\Q}{\mathbb{Q}}
|
||||
\newcommand{\C}{\mathbb{C}}
|
||||
|
||||
\definecolor{mygray}{rgb}{0.0, 0.0, 0.0}
|
||||
\definecolor{blue(pigment)}{rgb}{0.2, 0.2, 0.6}
|
||||
\definecolor{brickred}{rgb}{0.8, 0.25, 0.33}
|
||||
\definecolor{coolblack}{rgb}{0.0, 0.18, 0.39}
|
||||
|
||||
\setlist[itemize,1]{label=$\bullet$}
|
||||
\setlist[itemize,2]{label=$\circ$}
|
||||
\setlist[itemize,3]{label=$\centerdot$}
|
||||
\setlist[itemize,4]{label=$\bullet$}
|
||||
|
||||
% A dokument itt kezdődik
|
||||
|
||||
\date{}
|
||||
\useunder{\uline}{\ul}{}
|
||||
\fancyhf{} % sets both header and footer to nothing
|
||||
\lfoot{ELTE-IK}
|
||||
\cfoot{\thepage}
|
||||
\rfoot{6. tétel }
|
||||
|
||||
\pagestyle{fancy}
|
||||
|
||||
\renewcommand{\headrulewidth}{0pt}
|
||||
\renewcommand{\footrulewidth}{0.4pt}
|
||||
|
||||
\begin{document}
|
||||
\hyphenation{oddword}
|
||||
\uchyph=0
|
||||
\begin{center}
|
||||
{\Large\bfseries\noindent 6. Mesterséges intelligencia} \\
|
||||
\end{center}
|
||||
|
||||
\section*{Bevezetés}
|
||||
|
||||
\noindent Az MI az intelligens gondolkodás számítógépes reprodukálása szempontjából hasznos elveket, módszereket, technikákat kutatja, fejleszti, rendszerezi.\\\\
|
||||
Megoldandó feladatai
|
||||
\begin{itemize}
|
||||
\item nehezek, mert ezek problématere hatalmas,
|
||||
\item a megoldás megkeresése kellő intuíció hiányában kombinatorikus robbanáshoz vezethet.
|
||||
\begin{itemize}
|
||||
\small \color{mygray}
|
||||
\item Például az utazó ügynök probléma $n$ város esetén $(n-1)!$ a lehetséges utak (élek) száma. Ebben az esetben az alaphalmaz elemeinek kis mértékű változása is már exponenciális mértékben nőveli a problématér elemeinek számát.
|
||||
\begin{itemize}
|
||||
\item $n = 5$ esetén, $4! = 24$
|
||||
\item $n = 50$ esetén, $49! \sim 6 * 10^{62}$
|
||||
\end{itemize}
|
||||
\end{itemize}
|
||||
\end{itemize}
|
||||
A szoftver intelligensen viselkedik, és sajátos eszközöket használ. A reprezentáció átgondolt a feladat modellezéséhez, és az algoritmusok hatékonyak, heurisztikával megerősítve.
|
||||
|
||||
\section*{Útkeresési problémák}
|
||||
|
||||
\noindent Útkeresési problémaként sok MI feladat fogalmazható meg úgy, hogy a feladat modellje alapján megadunk egy olyan élsúlyozott irányított gráfot, amelyben adott csúcsból adott csúcsba vezető utak jelképezik a feladat egy-egy megoldását. Ezt a feladat \textbf{\textit{gráfreprezentációjának}} is szokás nevezni, amely magába foglal egy úgynevezett \textbf{\textit{$\delta$-gráfot} (delta gráf)} (olyan élsúlyozott irányított gráf, ahol egy csúcsból kivezető élek száma véges, és az élek költségére megadható egy $\delta$ pozitív alsó korlát), az abban kijelölt startcsúcsot és egy vagy több célcsúcsot. Ebben a reprezentációs gráfban keresünk egy startcsúcsból kiinduló célcsúcsba futó utat, esetenként egy legolcsóbb ilyet.\\
|
||||
|
||||
{\footnotesize \noindent {\color{blue} \faLightbulbO\ $\triangleright$ } }
|
||||
|
||||
{\footnotesize
|
||||
\noindent Legyen az $(N,A,c)$ egy él-súlyozott irányított gráf, amely csúcsainak halmaza az $N$, éleinek halmaza az $A\subseteq N \times N$, az $(n,m) \in A$ egy $n$ csúcsból $m$ csúcsba irányuló élt jelöl (az él kiinduló csúcsát szülőnek, végcsúcsát gyereknek szokták hívni), a $c: A \rightarrow R$ pedig az élekhez súlyt (a továbbiakban költséget) rendelő függvény.
|
||||
}\\
|
||||
|
||||
{\footnotesize
|
||||
\noindent A szokásoktól némileg eltérően itt feltételezzük, hogy az irányított gráfokban akár \textbf{végtelen sok csúcs} is lehet. Ez abból adódik, hogy a vizsgált feladatok problématerének mérete nagyon nagy, sőt esetenként valóban végtelen. Az informatikai megoldások szempontjából viszont nincs különbség a végtelen és a nagyon nagy méret között: az olyan algoritmusok úgysem használhatók, amelyek arra rendezkednek be, hogy megvizsgálják a teljes problémateret.
|
||||
}\\
|
||||
|
||||
{\footnotesize
|
||||
\noindent A fentiek természetes következménye, hogy gráfjainkban végtelen sok irányított él fordulhat elő. Kikötjük azonban azt, hogy egy csúcsból kivezető élek száma legyen véges, azaz mindegyik csúcsnak csak \textbf{véges sok gyereke} van. (Egy csúcshoz azonban tartozhat végtelen sok szülőcsúcs.) Ez a megszorítás nem jelent valódi korlátozást, mert a kivezető éleket általában a megoldandó feladathoz definiált műveleteket generálják. Egy adott pillanatban alkalmazható műveletek száma pedig egy valós feladat esetében mindig véges. Ráadásul a műveletek pozitív végrehajtási költséggel rendelkeznek – már ha egyáltalán számít a végrehajtási költségük –, és megfigyelhető, hogy a műveletek költségeinek infinuma is egy pozitív szám. Így azt is kiköthetjük, hogy az él-súlyozott irányított gráfjaink élsúlyai (élköltségei) egy, a teljes gráfra érvényes pozitív valós számnál nem kisebbek. Ezt a súlykorlátot gyakran szokták a görög $\delta$ betűvel jelölni, az általa leírt tulajdonságot pedig \textbf{$\delta$-tulajdonságnak} hívni. (Az élek súlyait egységesen egységnyinek tekintjük akkor, amikor a megoldandó feladatban semmilyen utalás sincs a költségekre.)
|
||||
}\\
|
||||
|
||||
{\footnotesize
|
||||
\noindent Egy végtelen sok csúcsból álló, de egy csúcshoz csak véges sok kivezető élt rendelő, $\delta$-tulajdonságú $(N,A,c)$ él-súlyozott irányított gráfot röviden \textbf{$\delta$-gráfnak} szoktunk nevezni. Egy útkeresési feladat egy $\delta$-gráfbeli bizonyos tulajdonságú irányított út megkeresését jelenti.
|
||||
}\\
|
||||
|
||||
{\footnotesize
|
||||
\noindent Egy $n \in N$ csúcsból $m \in N$ csúcsba vezető irányított úton egy $<(n,n_1), (n_1,n_2), \cdots , (n_{k-1},m)>$ él-sorozatot értünk.
|
||||
}\\
|
||||
|
||||
{\footnotesize
|
||||
\noindent Egy irányított út hosszán az utat alkotó élek számát értjük, és egy $\alpha$ út esetében az $\alpha$ szimbólummal jelöljük. Az $\alpha = <(n_0,n_1), (n_1,n_2), ... , (n_{k-1},n_k)>$ út költségét a $c\alpha(n_0,n_k)$, vagy röviden a $c(\alpha)$ szimbólum jelöli majd, amelyet – a hosszúság fogalmához illeszkedően – az utat alkotó élek költségeinek összegeként definiáljuk:
|
||||
}
|
||||
\[
|
||||
c(\alpha) = \sum_{i=1}^{k}c(n_{i-1},n_{i})
|
||||
\]
|
||||
|
||||
{\footnotesize
|
||||
\noindent A $\delta$-gráfokban, amennyiben vezet egy csúcsból ($n$) egy csúcshalmazba ($M$) út, akkor létezik ezek között legrövidebb út is, sőt legolcsóbb költségű, azaz optimális út is.
|
||||
}\\
|
||||
|
||||
{\footnotesize
|
||||
\noindent Bevezetjük a $c^{*}:N \times N \rightarrow R$ függvényt, amely egy $\delta$-gráfban megadja azt az optimális (legolcsóbb) költséget, amely árán egy csúcsból egy másikba el lehet jutni. Ezt mindegyik n és m csúcsra értelmezzük: ha létezik { $n \rightarrow m$ }-beli út, akkor ezek költségeinek minimumaként; ha nem létezik, akkor végtelen nagynak tekintjük. Formálisan:
|
||||
}
|
||||
\[
|
||||
c^{*}(n, m) = \left\{ \begin{array}{cc}
|
||||
min_{\alpha \in {n \rightarrow m}}c(\alpha) & ha\ \exists n \rightarrow m \\
|
||||
\infty & ha\ \not\exists n \rightarrow m
|
||||
\end{array}
|
||||
\right.
|
||||
\]
|
||||
{\footnotesize
|
||||
\noindent Egy útkeresési feladat modellezésekor az a célunk, hogy a feladat problématerét egy $\delta$-gráfbeli, adott csúcsból (startcsúcsból) induló irányított utak halmazaként fogalmazzuk meg, amelyek között olyan utat keresünk, amely adott csúcsok (célcsúcsok) egyikébe vezet. Gyakran az optimális út megtalálása a célunk. Ennek megfelelően egy útkeresési feladat \textbf{gráfreprezentációján} azt értjük, ha megadunk egy $(N,A,c)$ $\delta$-gráfot, az úgynevezett \textbf{reprezentációs gráfot}, kijelöljük annak $s \in N$ startcsúcsát és $T \subseteq N$ célcsúcsait. A feladat általánosan az, hogy egy $s \rightarrow T$-beli úgynevezett \textbf{megoldási utat} (vagy röviden megoldást) kell megtalálnunk, esetenként egy $s \rightarrow^{*}T$-beli \textbf{optimális megoldási utat} (az optimális megoldást).}\\
|
||||
\noindent {\footnotesize $\triangleleft$ \faLightbulbO }
|
||||
|
||||
\section*{Állapottér-reprezentáció}
|
||||
|
||||
\noindent Az állapottér reprezentáció egy általános probléma-modellezési módszer, amellyel részletesen specifikálhatjuk a megoldandó feladatot úgy, hogy azt útkeresési feladattá fogalmazzuk át. Ez által lehetővé válik, hogy a problémára úgy tekinthessünk, mint egy $\delta$-gráfbeli út keresésére.\\
|
||||
{\small \color{mygray}Mivel ennek során arról is döntünk, hogy a feladatból kinyert ismereteket milyen formában rögzítsük a számítógépen, ezért az állapottér specifikáció helyett az \emph{állapottér reprezentáció} szóhasználat terjedt el.}\\
|
||||
|
||||
\noindent Az állapottér reprezentációnak négy fő eleme van:
|
||||
\begin{itemize}
|
||||
\item \textit{Állapottér}: A probléma leírásához szükséges adatok által felvett érték-együttesek (állapotok) halmaza. Az állapot többnyire összetett szerkezetű érték (osztály vagy stuktúra). Gyakran egy bővebb alaphalmazzal és egy azon értelmezett invariáns állítással definiáljuk.
|
||||
\item \textit{Műveletek}: A műveletek az állapottéren definiált, azaz állapothoz állapotot rendelő operátorok, amelyek értelmezési tartománya jelöli ki azt, hogy mely állapotokra hajthatók végre. Megadásukhoz szükséges az előfeltétel és hatás leírása, valamint az invariáns tartó leképezés.
|
||||
\item \textit{Kezdőállapot(ok)} A feladat lehetséges kezdő állapotai megadhatóak közvetlenül, vagy közvetve egy logikai állítás (a kezdő feltétel) segítségével. A feladat egy konkrét kitűzéséhez mindig egy konkrét kezdő állapotot kell meghatároznunk.
|
||||
\item \textit{Célállapot(ok)}. Egy adott kezdő állapothoz tartozó célállapot (vagy célállapotok) megadható közvetlenül, vagy közvetve egy logikai állítás segítségével.
|
||||
\end{itemize}
|
||||
|
||||
{\footnotesize \noindent {\color{blue} \faLightbulbO\ $\triangleright$ }
|
||||
|
||||
\noindent Az objektum elvű programozási paradigma értelmében a definíció első két pontja egy adattípust (egy osztályt) definiál. A műveletek (metódusok) az osztály egy objektumára hajthatóak végre, amelynek állapota ennek hatására megváltozik. A számítógépes megvalósításoknál az objektum kezdő állapotát a konstruktor, vagy egy speciális inicializáló metódus állítja be, a célfeltételt pedig egy logikai értéket visszaadó metódus ellenőrzi.}\\
|
||||
|
||||
{\footnotesize
|
||||
\noindent Az állapottér reprezentáció lehetőséget teremt arra, hogy a megoldandó problémának elkészítsük a gráfreprezentációját, amelyben a probléma már nyilvánvalóan útkeresési feladattá válik. Minden állapottér reprezentációnak megfeleltethető egy irányított élsúlyozott gráf, amelyben kijelölhetünk egy startcsúcsot és egy vagy több célcsúcsot. Egy állapottér reprezentáció \textbf{állapot gráfjának} nevezzük azt a $\delta$-gráfot, amelyben a csúcsok az állapotokat, az élek a műveletek végrehajtásait, azaz az állapot-átmeneteket szimbolizálják, az élek súlyai a megfelelő műveletek költségei lesznek, ezek hiányában egységesen egységnyi az értékük. Az állapottér reprezentációval leírt feladat egy konkrét kitűzésében szereplő kezdőállapotot megjelenítő csúcsot hívjuk startcsúcsnak ($s$), kezdőállapothoz tartozó célállapot(ok)nak megfeleltetett csúcso(ka)t célcsúcs(ok)nak ($T$). (Vegyük észre, hogy a gráfreprezentáció önmagában nem egy külön feladat modellező módszer, hanem csak az eredménye egy probléma modellezésnek.)
|
||||
}\\
|
||||
\newpage
|
||||
{\footnotesize\noindent Példa: n-királynő probléma állapottér reprezentációja}\\
|
||||
|
||||
{\footnotesize
|
||||
\noindent State = rec(board: Board, count : $\mathbb{N}$)\\\\
|
||||
Board=$\Big\{$
|
||||
\begin{itemize}
|
||||
\item[] $a \in \{\includegraphics[width=0.0225\linewidth]{img/queen.png}, \boxtimes , \square\}^{n \times n}$,
|
||||
\item[] $a.count \in [0 \ldots n]\ \wedge$
|
||||
\item[] $\forall i \in [1\ \ldots\ a.count]: Count(a,\ i)=1\ \wedge$
|
||||
\item[] $\forall i \in [a.count + 1\ \ldots\ n]: Count(a,\ i)=0$
|
||||
\end{itemize} $\Big\}$\\\\
|
||||
Move(column): $State \ \rightarrow\ State\qquad (column \in [1 \ldots n],\ act \in State)$\\
|
||||
IF $(act.count < n) \wedge (act.board[act.count + 1,\ column] \neq \boxtimes)$\\
|
||||
THEN\\
|
||||
$act.count := act.count+1\ :\ act.board[act.count,\ column] := \includegraphics[width=0.0225\linewidth]{img/queen.png}$\\
|
||||
$\forall i,\ j: $\\
|
||||
IF ($act.board[i,\ j].threatenBy(\includegraphics[width=0.0225\linewidth]{img/queen.png})\ \wedge\ (act.board[i,\ j]\ == \square)$\\
|
||||
THEN\\
|
||||
$act.board[i,\ j] := \boxtimes$
|
||||
}
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\includegraphics[width=0.48\linewidth]{img/four_queen_problem_sample.png}
|
||||
\caption{A 4-királynő probléma állapot gráfja.}
|
||||
\label{fig:fourqueen_sample}
|
||||
\end{figure}
|
||||
|
||||
\color{mygray} \subsubsection*{Állapottér modell - Állapot-gráf}
|
||||
\renewcommand{\arraystretch}{2}
|
||||
{\noindent \footnotesize \color{mygray}
|
||||
\begin{tabular}{lcl}
|
||||
\hline
|
||||
\textbf{Állapottér modell} & & \textbf{Állapot-gráf}
|
||||
\\
|
||||
\textit{ - állapot} & $\sim$ & \textit{csúcs}
|
||||
\\
|
||||
\textit{ - művelet hatása egy állapotra} & $\sim$ & \textit{irányított él}
|
||||
\\
|
||||
\textit{ - művelet költsége} & $\sim$ & \textit{él költsége}
|
||||
\\
|
||||
\textit{ - kezdő állapot} & $\sim$ & \textit{startcsúcs}
|
||||
\\
|
||||
\textit{ - célállapot} & $\sim$ & \textit{célcsúcs}
|
||||
\\
|
||||
\textbf{Gráf-reprezentáció} & & \textit{állapotgráf, startcsúcs, célcsúcsok}
|
||||
\\
|
||||
\textit{ - egy műveletsorozat hatása} & $\sim$ & \textit{irányított út}
|
||||
\\
|
||||
\textit{ - megoldás} & $\sim$ & \textit{irányított út a startcsúcsból egy célcsúcsba}
|
||||
\\ \hline
|
||||
\end{tabular}
|
||||
\renewcommand{\arraystretch}{1}}\\\\\\
|
||||
\noindent Egy feladat állapottér modellje és problématere között szoros kapcsolat áll fenn, de az állapottér nem azonos a problématérrel. A problématér elemeit (lehetséges megoldásokat) a gráf reprezentációbeli startcsúcsból induló különböző hosszúságú irányított utak szimbolizálják.\\
|
||||
{\footnotesize $\triangleleft$ \faLightbulbO}
|
||||
|
||||
\section*{Kereső-rendszerek}
|
||||
|
||||
Azok a kereső algoritmusok, amelyek egy reprezentációs gráfban ($\delta$-gráfban) keresnek $s \rightarrow T$-beli utat az alapvető különbségeik ellenére egy közös ősből származtathatóak. Ezt hívjuk \emph{kereső rendszernek}.
|
||||
|
||||
\subsubsection*{\textit{Általános keresőrendszer} részei}
|
||||
|
||||
\begin{itemize}
|
||||
\item \textit{{Globális munkaterület}} (a keresés memóriája)
|
||||
\item \textit{{Keresési szabályok}} (a memória tartalmát változtatják meg)
|
||||
\item \textit{{Vezérlési stratégia}} (adott pillanatban alkalmas szabályt választ)
|
||||
\begin{itemize}
|
||||
\item \emph{Általános}: független a feladattól és annak modelljétől.
|
||||
\begin{itemize}
|
||||
{\small
|
||||
\color{mygray}
|
||||
\item nem módosítható
|
||||
\item módosítható}
|
||||
\end{itemize}
|
||||
\item \emph{Modellfüggő}: nem függ a feladat ismereteitől, de épít a feladat modelljének általános elemeire.
|
||||
\item \emph{Heurisztikus}: a feladattól származó, annak modelljében nem rögzített, a megoldást segítő ismeret, amelyet közvetlenül a vezérlési stratégiába építünk be az eredményesség és a hatékonyság javítása céljából.
|
||||
\end{itemize}
|
||||
\end{itemize}
|
||||
|
||||
{\footnotesize
|
||||
\noindent {\color{blue} \faLightbulbO\ $\triangleright$ }
|
||||
\begin{itemize}
|
||||
\item \textit{{Globális munkaterület}} A globális munkaterület annak az információnak a tárolására szolgál, amelyet a rendszer a keresés során megszerez, és megőrzésre fontosnak ítél. Egy $\delta$-gráfban történő keresésnél ez a gráfnak az a startcsúcsból elérhető része, amelyet a keresés felfedezett és megjegyzett. Ez lehet csak egyetlen csúcs, esetleg annak környezete, lehet egy út, amelyik a startcsúcsból az aktuálisan vizsgált csúcsba vezet, de lehet egy ennél tágabb részgráf is. A globális munkaterület minden keresés esetén rendelkezik valamilyen kezdeti értékkel, amely általában a startcsúcs. Akkor terminál, ha a globális munkaterület kielégíti a terminálási feltételt, amely egy célcsúcsnak a globális munkaterületen való megjelenésével kapcsolatos.
|
||||
\item \textit{{Keresési szabályok}}: A kereső rendszer minden lépésben egy kereső szabály által változtatja meg a globális munkaterületet. A kereső szabály tehát a munkaterület operátora. Minden szabály rendelkezik egy előfeltétellel (ez határozza meg a szabály értelmezési tartományát) és egy hatással (amelyet a végrehajtásakor kifejt). Egy $\delta$-gráfban folyó keresésnél ez például új csúcsra cserélheti a globális munkaterületen tárolt csúcsot, vagy új élt fűzhet hozzá a munkaterületen levő úthoz.
|
||||
\item \textit{{Vezérlési stratégia}} Egy adott pillanatban több végrehajtható kereső szabály is lehet. A vezérlési vagy keresési stratégia feladata ezek közül egyet kiválasztani. Amíg a globális munkaterületen és a kereső szabályokban a megoldandó feladat reprezentációjában rögzített ismeretei jelennek meg, addig a vezérlési stratégia a reprezentációtól független összetevője a kereső rendszernek. A stratégia megválasztását természetesen befolyásolja a megoldandó feladat, és a feladat reprezentálásához választott módszer, de a konkrét feladat reprezentációja nincsen rá hatással. Ugyanakkor a vezérlési stratégia megválasztása kihat a kereső rendszer többi komponensére is.\\
|
||||
\end{itemize}
|
||||
A vezérlési stratégia három szintre tagolható:
|
||||
\begin{itemize}
|
||||
\item Az \textbf{\emph{elsődleges vezérlési stratégia}} (általános) teljesen független a megoldandó feladattól. Ezen a szinten nem módosítható és módosítható stratégiákat különböztethetünk meg. Az előbbiek azok, amelyek alkalmazásakor egy kiválasztott kereső szabály végrehajtása végleges, vissza nem vonható; az utóbbi alkalmazása során ellenben lehetőségünk van korrigálásra.
|
||||
\item A \textbf{\emph{másodlagos vezérlési stratégia}} (modelfüggő) a megoldandó feladattól független ugyan, de függ a feladat reprezentálásához választott modelltől. Mivel ebben a jegyzetben csak egyféle modell szerepel (az állapottér reprezentáció), amelyhez viszont nem kapcsolódik jellegzetes másodlagos vezérlési stratégia, ezért erre itt nem tudunk példát mutatni.
|
||||
\item A MI feladatainál a problématér olyan nagy, hogy nem szerencsés, ha a feladatokat csupán "vak" kereséssel, minden lehetséges utat szisztematikusan végig próbálva kíséreljük meg megoldani. Az ilyen módszer általában kombinatorikus robbanáshoz, azaz kezelhetetlenül nagy adattömeghez vezet. Egy keresés csak akkor lehet sikeres, ha a vezérlési stratégiájába olyan – a feladatból származó többlet – ismeretet épít be, amely korlátozni képes keresést úgy, hogy a lehetséges folytatások közül csak ígéretesekkel foglalkozzon. Ez a speciális vezérlési ismeret, az úgynevezett \emph{\textbf{heurisztika}}, a vezérlési stratégiák harmadik szintje. E nélkül a feladat megoldása még a mai számítógépek működési sebessége és memória kapacitása mellett is reménytelen.\\
|
||||
|
||||
Megkülönböztetjük tehát a feladattal kapcsolatos ismereteket aszerint, hogy azokat a reprezentációban deklaratív módon (azaz a globális munkaterületen) illetve procedurális módon (a kereső szabályokban) használjuk-e fel, vagy vezérlési ismeretként a stratégiát javítjuk-e általa. A heurisztikára úgy tekintünk, mint a feladattal kapcsolatos olyan információra, amit nem a reprezentációban rögzítünk, hanem közvetlenül az algoritmusba építünk be. A heurisztika feladata, hogy pontosítsa azt alkalmazható kereső szabályok közötti sorrendet, amelyet elsődlegesen, a feladattól függetlenül a vezérlés jelöl ki. A heurisztika a vezérlési stratégia finomítását, a mindenkori feladatra történő ráhangolását végzi.\\
|
||||
|
||||
A heurisztika alkalmazásától azt várjuk, hogy javítsa a keresés eredményességét, azaz találjon megoldást, esetleg jó minőségű megoldást, továbbá javítsa a keresés hatékonyságát. A heurisztikát alkalmazó keresések tulajdonságait az alábbiak szerint fogalmazhatjuk meg:
|
||||
\begin{itemize}
|
||||
\item a legtöbb esetben "elég jó" megoldást találnak, bár nem garantálnak optimális megoldást, sőt valójában semmiféle megoldást nem garantálnak.
|
||||
\item jelentős mértékben javítják a problémamegoldó program hatékonyságát, főként a keresés próbálkozásai számának csökkentésével.
|
||||
\end{itemize}
|
||||
\end{itemize}
|
||||
$\triangleleft$ \faLightbulbO}
|
||||
|
||||
\subsection*{Lokális keresés}
|
||||
|
||||
\begin{itemize}
|
||||
\item A lokális keresések egyetlen aktuális csúcsot és annak szűk környezetét tárolják a globális munkaterületen.
|
||||
\begin{itemize}
|
||||
{\small
|
||||
\color{mygray}
|
||||
\item Kezdetben az aktuális csúcs a startcsúcs, és a keresés akkor áll le, ha az aktuális csúcs a célcsúcs lesz, vagy ha nem tud továbblépni.}
|
||||
\end{itemize}
|
||||
\item Keresési szabályai az aktuális csúcsot minden lépésben a szomszédjai közül vett lehetőleg ,,jobb” gyerekcsúccsal cserélik le.
|
||||
\item A vezérlési stratégiájuk a ,,jobbság” eldöntéséhez egy \textit{rátermettségi függvényt} használ, amely annál jobb értéket ad egy csúcsra, minél közelebb esik az a célhoz.
|
||||
\begin{itemize}
|
||||
\item Ez egy \textit{nem-módosítható vezérlési stratégia}, mivel a keresés ,,elfelejti”, hogy honnan jött, így a döntések nem vonhatók vissza.
|
||||
\end{itemize}
|
||||
\end{itemize}
|
||||
\emph{Lokális kereséssel megoldható feladatok} azok, ahol egy lokálisan hozott rossz döntés nem zárja ki a cél megtalálását. Ehhez vagy egy erősen összefüggő reprezentációs-gráf, vagy jó heurisztikára épített
|
||||
célfüggvény kell. Jellemző alkalmazás: Adott tulajdonságú elem keresése, vagy például függvény optimumának keresése.\\
|
||||
|
||||
{\footnotesize
|
||||
\noindent {\color{blue} \faLightbulbO\ $\triangleright$ }
|
||||
|
||||
{\footnotesize
|
||||
\noindent A lokális keresések úgy próbálnak megoldási utat találni egy reprezentációs gráfban, hogy a keresés során a gráfnak csak egy csúcsát (az úgynevezett aktuális csúcsot) és annak környezetét (például a gyerekeit, szülőjét, esetleg visszamenőleg néhány ősét) ismerik. Ezen korlátozott ismeretek alapján döntenek arról, hogy az aktuális csúcsot annak melyik gyerekére cseréljék le. Ennek kiválasztásához nélkülözhetetlen egy heurisztikus függvény, az úgynevezett célfüggvény. Ez az aktuális csúcs gyerekeihez rendel olyan értékeket, amelyek alapján eldönthetjük, hogy melyik a legígéretesebbnek látszó gyerekcsúcs.
|
||||
}\\
|
||||
|
||||
{\footnotesize
|
||||
\noindent A lokális keresések nem-módosítható vezérlési stratégiát használó kereső rendszerek. Globális munkaterületükön az aktuális csúcsot (kezdetben a startcsúcsot) és annak környezetében levő csúcsokat tárolják. Kereső szabályaik az aktuális csúcsot cserélik annak környezetéből vett másik csúcsra (többnyire valamelyik gyerekére) és ezzel egyidejűleg módosítják az aktuális csúcs környezetéről nyilvántartott ismereteket. Több lehetőség esetén az adott pillanatban lehető legjobbnak látszó csúcsot választják új aktuális csúcsnak, azaz egyfajta mohó stratégiát követnek. A továbblépésnél hozott döntéseik visszavonhatatlanok (nem módosíthatóak), nem áll módjukban a döntéseiket meg nem történtté tenni, és új döntést hozni. Sikeres terminálás (azaz célcsúcs elérése) esetén nem képesek a megoldási utat visszaadni, csak ha működésük közben folyamatosan naplózzák (rögzítik) azt, hogy mely csúcsokat érintették a keresés során.
|
||||
}\\
|
||||
|
||||
{\footnotesize
|
||||
\noindent A lokális keresések csak speciális esetekben alkalmazhatók sikerrel az MI feladatok megoldására. Vagy a döntéseknél felhasznált célfüggvénynek, a heurisztikának kell elég erősnek lennie ahhoz, hogy csalhatatlanul a megfelelő irányba vezesse a keresést, vagy a reprezentációs gráfnak kell olyan alakúnak lenni, hogy egy-egy rossz döntés ne veszélyeztesse a célcsúcs elérését. Heurisztika ez utóbbi esetben is szükséges ahhoz, hogy a keresés eredményes és gyors legyen.
|
||||
}\\
|
||||
|
||||
{\footnotesize
|
||||
\noindent A lokális keresés alkalmazása kifejezetten előnytelen akkor, ha a reprezentációs gráf egy irányított fa (lásd n-királynő probléma vagy utazó ügynök probléma), mert kizárólag tökéletes heurisztikájú célfüggvény esetén lehet sikeres.
|
||||
}\\
|
||||
$\triangleleft$ \faLightbulbO}
|
||||
|
||||
\subsubsection*{Lokális keresést megvalósító algoritmusok}
|
||||
|
||||
\begin{itemize}
|
||||
\item \textit{\textbf{Hegymászó algoritmus}}: A legyegyszerűbb lokális keresési algoritmus.
|
||||
\begin{itemize}
|
||||
\item A \emph{globális munkaterületén} nyilvántartja:
|
||||
\begin{itemize}
|
||||
\item az aktuális csúcsot ($akt$), és
|
||||
\item az $akt$ csúcs szülőjét $\pi(akt)$
|
||||
\end{itemize}
|
||||
\item A keresési szabálya:
|
||||
\begin{itemize}
|
||||
\item előállítja az $akt$ csúcs gyermek csúcsait,
|
||||
\item a cél elérése szempontjából leígéretesebb csúcsra lép, kizárva a szülő való visszalépést.\\
|
||||
(Az algoritmusban feltételezzük azt, hogy egy csúcs annál ígéretesebb, minél kisebb annak célfüggvény ($f$) értéke.)
|
||||
\end{itemize}
|
||||
\item \emph{Hátrányai}:
|
||||
\begin{itemize}
|
||||
{\small
|
||||
\item Csak erős heurisztika esetén lesz sikeres, ennek hiányában gyakorta rossz, nem a cél irányába mutató döntést fog hozni, amely következtében akár véglegesen tévútra kerülhet. Általában egy reprezentációs gráf tartalmazhat olyan részeket, ahonnan már nem vezet út célcsúcsba. Ha a heurisztika ilyen helyre navigálja a keresést, akkor az már nem lehet eredményes. A hegymászó módszer tehát nem garantálja a megoldás megtalálását.
|
||||
\item A módszer lokális optimum hely környezetében és ekvidisztans felületen (azonos célfüggvény értékű szomszédos csúcsok körzetében) eltévedhet. A keresést ugyanis ilyenkor nem irányítja a célfüggvény, véletlenszerűen kell új aktuális csúcsot választani, és mivel a keresés nem végezhet körfigyelést (nem tárolja a korábban bejárt csúcsokat) könnyen végtelen ciklusba eshet.
|
||||
\item A keresés zsákutcába (olyan csúcs, amelynek nincsenek gyerekei) jutva beragad.
|
||||
}\\
|
||||
\end{itemize}
|
||||
\end{itemize}
|
||||
\newpage
|
||||
\item \textit{\textbf{Tabu keresés}}: Algoritmus a hegymászó algoritmus kis memóriájából származó hátrányok kiküszöbölésére.
|
||||
\begin{itemize}
|
||||
\item A \emph{globális munkaterületén} nyilvántartja:
|
||||
\begin{itemize}
|
||||
\item az aktuális csúcsot ($akt$), és
|
||||
\item az eddig legjobbnak bizonyult csúcsot ($opt$), és
|
||||
\item az utolsó néhány érintett csúcsot; ez a (sor tulajdonságú) tabu halmaz.
|
||||
\end{itemize}
|
||||
\item A keresési szabálya:
|
||||
\begin{itemize}
|
||||
\item minden lépésben az aktuális csúcs legjobb gyermekére lép, ami nincs a tabu halmazban, majd
|
||||
\item frissíti a tabu halmazt, és ha $akt$ jobb, mint az $opt$, akkor $opt$-ot lecseréli $akt$-re.
|
||||
\end{itemize}
|
||||
\item \emph{Hátrányai}:
|
||||
\begin{itemize}
|
||||
\item A keresés zsákutcába (egy olyan csúcshoz, amelynek nincsenek gyerekei) jutva beragadhat.
|
||||
\item A tabu halmaz segítéségével felismeri a tabu halmaz méreténél nem nagyobb köröket. Azonban a tabu halmaz méreténél nagyobb körök mentén végtelen ciklusba kerülhet.\\
|
||||
\end{itemize}
|
||||
\end{itemize}
|
||||
\item \textit{\textbf{Szimulált hűtés} algoritmusa}: Algoritmus a hegymászó-algoritmus móhoságának csillapítására.
|
||||
\begin{itemize}
|
||||
\item A keresési szabály a következő csúcsot véletlenszerűen választja ki az aktuális \emph{akt} csúcs gyermekei közül.
|
||||
\item Ha az így kiválasztott új csúcs kiértékelő függvény-értéke nem rosszabb, mint az \emph{akt} csúcsé (itt $f(\text{új}) \leq f(\text{akt})$), akkor elfogadjuk aktuális csúcsnak.
|
||||
\item Ha az új csúcs függvényértéke rosszabb (itt $f(\text{új}) > f(\text{akt})$), akkor egy olyan véletlenített módszert alkalmazunk, ahol az újcsúcs elfogadásának valószínűsége fordítottan arányos az $\mid f(\text{akt}) - f(\text{új}) \mid$ különbséggel:
|
||||
\begin{center}
|
||||
$e^{\frac{f(\text{akt}) - f(\text{új})}{T}} > random[0,1]$
|
||||
\end{center}
|
||||
\item Ha a $T$ értékét a keresés során csökkentjük, akkor ugyanazon különbség esetén eltérő lehet egy új csúcs elfogadásának valószínűsége. A $T$ értékeinek változásához egy ütemtervet szoktak készíteni, amely egyrészt a $T$ által felvett $T_1, T_2, \ldots\ $értékek szigorúan monoton csökkenő sorozatát tartalmazza, másrészt azt az $L1,\ L2, \ldots $ egész számsorozatot, amely azt szabályozza, hogy a $T_k$ együtthatót $L_k$ lépésen $(k=1,\ 2, \ldots)$ keresztül kell majd használni. Ha $T_1,T_2, ...$ szigorúan monoton csökken, akkor egy ugyanannyival rosszabb függvényértékű új csúcsot kezdetben nagyobb valószínűséggel fogad el a keresés, mint később.
|
||||
\begin{center}
|
||||
$e^{\frac{f(\text{akt}) - f(\text{új})}{T_k}} > random[0,1]$
|
||||
\end{center}
|
||||
\end{itemize}
|
||||
\end{itemize}
|
||||
|
||||
\subsection*{Visszalépéses keresések}
|
||||
|
||||
A visszalépéses keresés egy olyan keresőrendszer, amelynek
|
||||
\begin{itemize}
|
||||
\item A \emph{globális munkaterületén} nyilvántartja:
|
||||
\begin{itemize}
|
||||
\item Az utat a startcsúcsból az aktuális csúcsba (az útról leágazó még ki nem próbált élekkel együtt).
|
||||
\begin{itemize}
|
||||
\small
|
||||
\color{mygray}
|
||||
\item Kezdetben a startcsúcsot tartalmazó nulla hosszúságú út.
|
||||
\item \emph{Terminálás feltétel}: célcsúcs elérése vagy a startcsúcsból való visszalépés.
|
||||
\end{itemize}
|
||||
\end{itemize}
|
||||
\item A keresési szabálya:
|
||||
\begin{itemize}
|
||||
\item a nyilvántartott út végéhez egy új (ki nem próbált) élt fűznek, vagy
|
||||
\item a törlik a legutolsó élt (visszalépés szabálya).
|
||||
\end{itemize}
|
||||
\item A vezérlési stratégiája a visszalépés szabályát csak a legvégső esetben alkalmazza, amikor már nem lehet továbblépni.
|
||||
\begin{itemize}
|
||||
\item A visszalépéses keresés módszeresen végigvizsgálja a reprezentációs gráf startcsúcsból kivezető útjait. Ha egy útról kiderül, hogy nem vezet célba, akkor onnan visszalép. Egy-egy utat tehát olyan mélyen tár fel a keresés, amennyire csak lehet, azaz a mélységi bejárás stratégiáját követi.
|
||||
\item \emph{A visszalépés feltételei}:
|
||||
\begin{itemize}
|
||||
\item Az aktuális csúcsból egyáltalán nem vezet ki él, azaz a keresés \textbf{\emph{zsákutcába}} jutott.
|
||||
\item Az aktuális csúcsból kivezető összes útról kiderült, hogy nem vezet célba, tehát nincs a csúcsból kivezető még ki nem próbált él, akkor egy \textbf{\emph{zsákutca torkolatban}} állunk.
|
||||
\item \textbf{\emph{Körre}} futunk, azaz az aktuális út egy olyan csúcsba vezet, amely korábban már szerepel az aktuális úton.
|
||||
\item Az aktuális út hossza egy előre olyan megadott \textbf{\emph{mélységi korláton}} nőne túl, amelyet abból a célból vezetünk be, hogy a nagyon hosszú utakat ne vizsgálja meg a keresés, mert vagy nincs elég időnk vagy nincs elég memóriánk erre.
|
||||
\end{itemize}
|
||||
\end{itemize}
|
||||
\end{itemize}
|
||||
|
||||
\subsubsection*{Alacsonyabb rendű vezérlési stratégiák}
|
||||
|
||||
\noindent A visszalépéses keresés több pontján alkalmazhatunk heurisztikát. A mélységi korlát is egyfajta heurisztika, hiszen megfelelő meghatározásához a konkrét feladat ismerete szükséges. A mélységi korlát figyelésével \emph{\textbf{vágásokat}} végzünk a probléma térben, mert használata bizonyos csúcsokból kivezető éleket kitöröl, ennél fogva kitöröl a problématérből több startcsúcsból kiinduló utat. Ehhez hasonló vágásokhoz összetettebb feltételeket is meg fogalmazhatunk. Sőt egy ilyen feltételt leíró \emph{\textbf{vágó heurisztika}} egyenként is megjelölheti azt, hogy egy csúcsból kivezető élek közül melyiket hagyja figyelmen kívül a keresés, melyiket nem.\\
|
||||
|
||||
\noindent A vágások megadásán kívül azzal is javíthatjuk a keresés hatékonyságát, ha egy úgynevezett \emph{\textbf{sorrendi heurisztikával}} jelöljük ki egy adott csúcsból kivezető élek kipróbálási sorrendjét.
|
||||
|
||||
\subsubsection*{Viszzalépéses keresést megvalósító algoritmusok}
|
||||
|
||||
\noindent Amikor a visszalépés feltételei közül csak az első kettőt építjük be a kereső rendszerbe, akkor a visszalépéses keresés első változatáról (\textbf{VL1}) beszélünk.\\
|
||||
|
||||
\noindent \textbf{Tétel.} A visszalépéses keresés első változata véges körmentes gráfokon mindig terminál, és ha létezik megoldás, akkor megtalálja azt.\\
|
||||
|
||||
\noindent A tétel azokat a körülményeket rögzíti, amelyek fennállása esetén a \emph{VL1} eredményes. Jó eredménynek számít, hogy a keresés biztosan terminál, és megoldást talál, ha van megoldás. Megjegyezzük, hogy ez az egyetlen olyan tételünk, amelyhez nincs szükség arra, hogy a gráf, amelyben keresünk, $\delta$-gráf legyen. A \emph{VL1} memória igénye kicsi, mindössze egy út tárolására van szüksége. Futási idejét sorrendi illetve vágó heurisztikával lehet gyorsítani.\\
|
||||
|
||||
\noindent A \emph{VL1} algoritmust sikerrel alkalmazhatjuk azokra a feladatokra, amelyek reprezentációs gráfja egy véges irányított fa. Az utazó ügynök probléma megoldására viszont nem alkalmazható a \emph{VL1} annak ellenére, hogy a reprezentációs gráfja egy fa, hiszen ott egy megoldást adni egyszerű, de nekünk optimális megoldást kellene találni.\\
|
||||
|
||||
{\footnotesize
|
||||
\noindent {\color{blue} \faLightbulbO\ $\triangleright$ }
|
||||
|
||||
\noindent Kört is tartalmazó vagy végtelen nagy gráfokban a keresés könnyen ráfuthat egy célcsúcsot nem tartalmazó végtelen hosszú útra. Ezt egy mélységi korlát bevezetésével zárhatjuk ki. Ha a nyilvántartott út hossza eléri a mélységi korlátot, akkor visszalépünk. Ennek következtében a megadott korlátnál hosszabb utakat nem vizsgálja tovább az algoritmus, csak a legfeljebb ilyen hosszú utak között keresi a megoldást. Ha nincs a megadott mélységi korláton belül megoldási út, akkor az algoritmus bár terminál, de nem talál megoldást. A mélységi korlát megállapítása tehát nagy körültekintést igényel, célszerű a megoldandó feladat ismereteit felhasználni hozzá.}\\
|
||||
|
||||
{\footnotesize
|
||||
\noindent A mélységi korlát körök esetén is biztosítja a terminálást. Ha azonban a megadott mélységi korlátnál jóval rövidebb körök is előfordulnak a gráfban, érdemes külön körfigyelést is beépíteni a keresésbe. Ez annyit jelent, hogy visszalépünk akkor is, ha olyan csúcsba jutottunk el, amely már szerepel az adatbázisban nyilvántartott úton. Megjegyezzük, hogy a mélységi korlát ellenőrzése jóval olcsóbb, mint a körfigyelés.\\
|
||||
$\triangleleft$ \faLightbulbO
|
||||
}\\
|
||||
|
||||
\noindent Amikor a visszalépés feltételei közül az összest megvalósítjuk, akkor beszélünk a visszalépéses keresés második változatáról (\textbf{VL2}).\\
|
||||
|
||||
\noindent \textbf{Tétel.} A visszalépéses keresés második változata $\delta$-gráfokon mindig terminál, és ha létezik a mélységi korlátnál nem hosszabb megoldás, akkor talál egyet.\\
|
||||
|
||||
\noindent A 8-as kirakó játék reprezentációs gráfja köröket is tartalmaz, ezért ezt a feladatot a visszalépéses keresésnek csak a második változatával oldhatjuk meg.
|
||||
|
||||
\subsubsection*{Visszalépéses keresés értékelése}
|
||||
|
||||
\noindent Könnyen implementálható, kicsi memória igényű, mindig terminál, és ha van (a mélységi korlát alatt), akkor talál megoldást. De nem garantál optimális megoldást, egy kezdetben hozott rossz döntést csak nagyon sok lépés után képes korrigálni és egy zsákutca-szakaszt többször is bejárhat, ha abba többféle úton is el lehet jutni.\\
|
||||
|
||||
{\footnotesize
|
||||
\noindent {\color{blue} \faLightbulbO\ $\triangleright$ }
|
||||
\noindent A visszalépéses keresés szerepe jelentős az MI rendszerekben. Ilyen keresést tartalmaznak többek között a szabályalapú szakértő rendszerek következtető gépei, erre épülnek a Prolog interpreterek vagy a kétszemélyes játékok programjaiban használt alfa-béta algoritmus.\\
|
||||
|
||||
\noindent Ennek az oka a visszalépéses keresés előnyös tulajdonságaiban keresendők. A visszalépéses keresés egy könnyen implementálható, kicsi memória igényű algoritmus, amely garantált eredményt ad. A könnyen implementálhatóság az algoritmus viszonylagos egyszerűségéből fakad. A működéséhez igényelt memória a még oly nagy problématerekben való kereséseknél is mindössze egy út méretével arányos, amelynek a maximális hosszát a mélységi korláttal szabályozhatjuk. Eredménye pedig azért garantált, mert egyrészt biztosan terminál, másrészt, ha van megoldás (mélységi korlát alkalmazása esetén ennél nem hosszabb megoldás), akkor talál megoldást.\\
|
||||
|
||||
\noindent Természetesen, mint minden keresésnek, ennek is vannak hátrányos tulajdonságai. Például nem garantálja az optimális megoldás előállítását. Lehet ugyan egy egyre növekvő mélységi korlát mellett iterációba szervezni visszalépéses algoritmust, amely már képes az optimális megoldás megtalálására a futási idő növekedése árán. A visszalépéses keresés másik hátránya az, hogy egy korai lépésnél elkövetett hibás döntést csak igen sok próbálkozás árán, sok visszalépés után képes korrigálni. Ennek ellensúlyozására lehet ugyan alkalmazni az úgynevezett visszaugrásos keresést, de ez csak speciális feladatok esetében működik. A visszaugráshoz ugyanis fel kell tudnunk ismerni, hogy a reprezentációs gráf olyan részében jár a keresés, ahol nincs remény a cél megtalálására, és meg kell tudnunk mondani, hogy az aktuális út melyik csúcsához érdemes visszaugrani, hogy onnan másik irányba haladva folytassuk a keresést.\\
|
||||
|
||||
\noindent A visszalépéses keresés hátránya az is, hogy mivel csak az aktuális utat tartja nyilván, azokat a csúcsokat, ahol a keresés már járt, de ahonnan visszalépett, \emph{elfelejti}. Ha a keresés egy ilyen elfelejtett csúcshoz később egy más irányból újra eljut, akkor újra be fogja járni az abból továbbvezető utakat, annak ellenére, hogy ezekről már korábban kiderült, hogy nem vezetnek célcsúcshoz. A két utóbbi hátrány az oka annak, hogy a visszalépéses keresés futási ideje nagy, legrosszabb esetben a problématérrel összemérhető, és ez csak megfelelő heurisztikák alkalmazása mellett javítható.\\
|
||||
$\triangleleft$ \faLightbulbO}
|
||||
|
||||
\section*{Gráfkeresések}
|
||||
|
||||
\noindent A gráfkeresés olyan keresőrendszer, amelynek
|
||||
\begin{itemize}
|
||||
\item \emph{globális munkaterülete}: \emph{startcsúcsból kiinduló már feltárt útjai} a reprezentációs gráfnak (\textbf{\emph{keresőgráf}}), külön megjelölve az utak azon csúcsait, amelyeknek még nem (vagy nem eléggé jól) ismerjük a rákövetkezőit. Ezek a \textit{nyílt csúcsok}.
|
||||
\begin{itemize}
|
||||
\item \emph{kiinduló értéke}: a startcsúcs,
|
||||
\item \emph{terminálási feltétel}: célcsúcsot terjeszt ki vagy már nincs több nyílt csúcs.
|
||||
\end{itemize}
|
||||
\item \emph{keresési szabálya}: egy nyílt csúcs kiterjesztése
|
||||
\item \emph{vezérlési stratégiája}: a legkedvezőbb csúcs kiterjesztésére törekszik, és ehhez egy ($f$) kiértékelő függvényt használ. Mivel egy nyílt csúcs, amely egy adott pillanatban nem kerül kiválasztásra, később még kiválasztódhat, ezért itt egy módosítható vezérlési stratégia valósul meg.
|
||||
\end{itemize}
|
||||
|
||||
\noindent A keresés minden csúcshoz nyilvántart
|
||||
\begin{itemize}
|
||||
\item egy odavezető utat {\small (\textbf{$\pi$} visszamutató pointerek segítségével)}, valamint
|
||||
\item az út költségét ($g$).
|
||||
\end{itemize}
|
||||
\noindent Ezeket az értékeket működés közben alakítja ki, amikor \emph{a csúcsot először felfedezi} vagy később egy \emph{olcsóbb utat talál} hozzá. Mindkét esetben (amikor módosultak a csúcs ezen értékei) \emph{a csúcs nyílttá válik}. Amikor egy már korábban kiterjesztett csúcs újra nyílt lesz, akkor a már korábban felfedezett leszármazottainál a visszafelé mutató pointerekkel kijelölt út költsége nem feltétlenül egyezik majd meg a nyilvántartott $g$ értékkel, és az sem biztos, hogy ezek az értékek az eddig talált legolcsóbb útra vonatkoznak, vagyis előfordulhat, hogy elromlik a keresőgráf korrektsége.
|
||||
|
||||
{\footnotesize
|
||||
\noindent Példa:\\
|
||||
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\includegraphics[width=0.8\linewidth]{img/incorrect_g1}
|
||||
\caption{Gráf korrektségének elromlása 1.}
|
||||
\label{fig:incorrect_gone}
|
||||
\end{figure}
|
||||
|
||||
\noindent Elindulunk az $s$ startcsúcsból. Tekintve, hogy a gráfkeresés nem terjeszt ki rosszabb csúcsot, így az $s \rightarrow m \rightarrow k$ úton a $k$ csúcsot már nem terjeszti ki, mert $\pi(m)=s$ esetén $g(v) = 6 > 5 \ \textit{(eddig talált legrövidebb út)}$.\\
|
||||
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\includegraphics[width=0.8\linewidth]{img/incorrect_g2}
|
||||
\caption{Gráf korrektségének elromlása 2.}
|
||||
\label{fig:incorrect_gtwo}
|
||||
\end{figure}
|
||||
|
||||
\noindent A $\pi(m) = n$ esetén a $g(m)=2$ azonban a gráf korrektsége nem megfelelő, mivel a korábban eltárolt $g(v)=5$ és $g(k)=5$ értékek már nem helyesek.
|
||||
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\includegraphics[width=0.8\linewidth]{img/incorrect_g3}
|
||||
\caption{Gráf korrektségének elromlása 3.}
|
||||
\label{fig:incorrect_gthree}
|
||||
\end{figure}
|
||||
|
||||
\newpage
|
||||
\section*{Nevezetes gráfkereső algoritmusok}
|
||||
|
||||
\newcolumntype{L}{>{\arraybackslash}m{7cm}}
|
||||
|
||||
\subsection*{Nem informált gráfkereső algoritmusok}
|
||||
|
||||
\noindent Azokat a keresőket, melyek az aktuális állapotról csak annyit tudnak, hogy célállapot-e, nem informált keresési algoritmusoknak nevezzük.\\
|
||||
{\small
|
||||
\renewcommand{\arraystretch}{2}
|
||||
\begin{tabular}{ l|c|L }
|
||||
\makecell{\\{\footnotesize \textit{\textbf{Mélységi gráfkeresés}}}\\\\\adjincludegraphics[valign=M,width=0.4\textwidth]{img/melysegi_graf_ker}\\ {\footnotesize {\color{white}$\triangle$}}} & \makecell{$f = -g$ \\ $\forall (n,m)$ élre\\$c(n,m)=1$} &
|
||||
\begin{tabular}[c]{L}
|
||||
- végtelen gráfokban csak mélységi korláttal garantál megoldást\\
|
||||
- {\scriptsize {\color{blue} \faLightbulbO\ $\triangleright$} a vizsgált reprezentációs gráf minden élének súlyát egységnyinek tekinti, és a kiértékelő függvénye az egyes csúcsokba vezető útköltségnek, az algoritmus által számolt g függvény értékének mínusz egyszerese, azaz f = –g. Egységnyi élsúlyok esetén a g költségfüggvény egy csúcsban a startcsúcsból odavezető már megtalált út hosszúságát mutatja, így a –g kiértékelés mindig a startcsúcstól legtávolabb eső, a legmélyebben fekvő nyílt csúcs kiterjesztését részesíti előnyben. (Azonos mélységű csúcsok esetén véletlenszerűen, vagy valamilyen másodlagos szempont alapján dönt.) Ezt a keresést gyakran egy mélységi korláttal is ellátják, így ha létezik a mélységi korlátnál nem hosszabb megoldási út, akkor a keresés megoldás megtalálásával terminál.$\triangleleft$ \faLightbulbO}
|
||||
\end{tabular}
|
||||
\\ \hline
|
||||
\makecell{\\{\footnotesize \textit{\textbf{Szélességi gráfkeresés}}}\\\\\adjincludegraphics[valign=M,width=0.4\textwidth]{img/szelessegi_graf_ker}\\ {\footnotesize {\color{white}$\triangle$}}} & \makecell{$f = g$\\$c(n,m)=1$} &
|
||||
\begin{tabular}[c]{L}
|
||||
- optimális megoldást ad, ha van (még végtelen $\delta$ gráfban is)\\
|
||||
- egy csúcs kiterjesztésekor ismeri az odavezető legrövidebb utat (legfeljebb egyszer terjeszt ki)
|
||||
\end{tabular} \\ \hline
|
||||
\makecell{\\{\footnotesize \textit{\textbf{Egyenletes gráfkeresés}}}\\} & $f = g$ &
|
||||
\begin{tabular}[c]{@{}L@{}}
|
||||
- optimális (legolcsóbb) megoldást ad, ha van (még végtelen $\delta$ gráfban is)\\
|
||||
- egy csúcs kiterjesztésekor ismeri az odavezető legolcsóbb utat (legfeljebb egyszer terjeszt ki)\\
|
||||
\end{tabular}\\
|
||||
\end{tabular}
|
||||
\renewcommand{\arraystretch}{1}}
|
||||
|
||||
\subsection*{Heurisztikus gráfkereső algoritmusok}
|
||||
|
||||
\noindent Az MI problémák szempontjából azok a kiértékelő függvények az érdekesek, amellyek egy nyílt csúcs ígéretességének megítélésekor heurisztikus ismeretekre is támaszkodnak. A heurisztika a gráfkereső algoritmusoknál olyan függvény formájában fogalmazható meg, amelyik minden csúcsra megbecsüli annak a legolcsóbb útnak a költségét, amelyen az adott csúcsból célcsúcsba lehet eljutni. \emph{\textbf{Heurisztikus függvény}}nek nevezzük azt a $h:N \rightarrow \R$ függvényt, amelyik egy csúcsnál megbecsüli a csúcsból a célba vezető (,,hátralévő”) optimális út költségét.
|
||||
\begin{center}
|
||||
$h(n) \approx h^{*}(n)$, ahol $h^{*}:N \rightarrow \R$
|
||||
\end{center}
|
||||
A $h^{*}$ egy \emph{elméleti} költségfüggvény a hátralévő optimális költség $n$-ből a célcsúcsok valamelyikébe.\\\\
|
||||
\noindent \emph{Nevezetes tulajdonságai}:\\\\
|
||||
\renewcommand{\arraystretch}{2}
|
||||
\begin{tabular}{l|l|l}
|
||||
\textit{{Nem-negatív}} & $h(n) \geqq 0$ & $\forall n \in N$
|
||||
\\ \hline
|
||||
\textit{{Megengedhető}} & $h(n) \leqq h^{*}(n)$ & $\forall n \in N$ {\small \text{(nem becsüli túl az optimális költséget ($h^{*}$))}}
|
||||
\\ \hline
|
||||
\textit{{Monoton megszorítás}} & $h(n)-h(m) \leqq c(n,m)$ & $\forall (n,m) \in A$
|
||||
\end{tabular}
|
||||
\renewcommand{\arraystretch}{1}\\\\
|
||||
|
||||
\noindent \textbf{Definíció.} Egy gráfkereső algoritmus kiértékelő függvényét \emph{csökkenőnek} nevezzük akkor, ha egy nyílt csúcs kiértékelő függvényértéke csak akkor változik meg és akkor is csak csökken, ha az eddiginél olcsóbb utat találunk hozzá.\\
|
||||
|
||||
\noindent \textbf{Tétel}. Egy csökkenő kiértékelő függvényt használó GK soha nem terjeszt inkorrekt csúcsot.\\
|
||||
\newpage
|
||||
\noindent \textbf{Heurisztikus keresést használó algoritmusok}\\
|
||||
\renewcommand{\arraystretch}{2}
|
||||
\begin{tabular}{ l|c|L }
|
||||
\textit{Előre tekintő gráfkeresés} & $f = h$ &
|
||||
\begin{tabular}[c]{@{}L@{}}
|
||||
- sikeres terminálást nem garantál\\
|
||||
- eredményessége és hatékonysága erősen függ a heurisztikus függvénytől
|
||||
\end{tabular}
|
||||
\\ \hline
|
||||
\textit{\textbf{A} algoritmus} & \makecell{$f = g+h$\\ $h \geq 0$} & - megoldást ad, ha van
|
||||
\\ \hline
|
||||
\textit{\textbf{A}* algoritmus} & \makecell{$f = g+h$\\ $h^* \geqq h \geq 0$} & - optimális megoldást ad, ha van
|
||||
\\ \hline
|
||||
\textit{\textbf{A}$^C$ algoritmus} & \makecell{$f = g+h$\\ $h^* \geq h \geq 0$\\\\ $\forall (n,m)$ élre\\ $h(n)-h(m) \leq c(n,m)$} &
|
||||
\begin{tabular}[c]{@{}L@{}}
|
||||
- optimális megoldást ad, ha van\\
|
||||
- {\scriptsize {\color{blue} \faLightbulbO\ $\triangleright$} A monoton tulajdonság a heurisztikus függvény által adott becslés következetességére utal. Ilyenkor ugyanis nem fordulhat elő az, hogy a heurisztika rossznak látná a cél elérésének esélyét egy olyan csúcsból, amelynek kis költségű lépéssel elért utódcsúcsából már hirtelen igen ígéretesnek tartana $\triangleleft$ \faLightbulbO}\\
|
||||
- egy csúcs kiterjesztésekor ismeri az odavezető legolcsóbb utat\\
|
||||
- legfeljebb egyszer terjeszt ki
|
||||
\end{tabular}
|
||||
\\ \hline
|
||||
\textit{\textbf{B} algoritmus} & \makecell{$f = g+h$\\ $h \geq 0$ \\ + belső kiértékelő függvény $g$} & - a $g$-t használjuk a kiterjesztendő csúcs kiválasztására azon nyílt csúcsok közül, amelyek $f$ értéke kisebb, mint az eddig kiterjesztett csúcsok $f$ értékeinek maximuma.\\
|
||||
\end{tabular}
|
||||
\renewcommand{\arraystretch}{1}\\\\
|
||||
|
||||
\noindent Véges $\delta$-gráfokon minden gráfkeresés terminál, és ha van megoldás, talál egyet. A nevezetes gráfkeresések többsége végtelen nagy gráfokon is találnak megoldást, ha van megoldás. (Kivétel az előre-tekintő keresés és a mélységi korlátot nem használó mélységi gráfkeresés.)\\
|
||||
|
||||
\noindent Egy gráfkeresés memória igényét a kiterjesztett csúcsok számával, futási idejét ezek kiterjesztéseinek számával mérjük. (Egy csúcs általában többször is kiterjesztődhet, de $\delta$-gráfokban csak véges sokszor.)\\
|
||||
|
||||
\noindent $A$* algoritmusnál a futási idő legrosszabb esetben exponenciálisan függ a kiterjesztett csúcsok számától, de ha olyan heurisztikát választunk, amelyre már $A^C$ algoritmust kapunk, akkor a futási idő lineáris lesz. Persze ezzel a másik heurisztikával változik a kiterjesztett csúcsok száma is, így nem biztos, hogy egy $A^C$ algoritmus ugyanazon a gráfon összességében kevesebb kiterjesztést végez, mint egy csúcsot többször is kiterjesztő A* algoritmus.\\
|
||||
|
||||
\noindent A $B$ algoritmust tehát mindig érdemes az $A^*$ algoritmus helyett alkalmazni, ha a heurisztikánk nem monoton, mert a megvalósítása alig tér el az $A^*$ algoritmustól, eredményessége és memória igénye azonos vele, de a futási ideje jóval gyorsabb is lehet, lassabb viszont soha.
|
||||
\newpage
|
||||
\section*{Kétszemélyes (teljes információjú, zéró összegű, véges) játékok}
|
||||
|
||||
\noindent Egy játék leírásához a következőket kell megadni:
|
||||
\begin{itemize}
|
||||
\item A játék lehetséges állásait (helyzeteit).
|
||||
\item A játékosok számát.
|
||||
\item Hogyan következnek/lépnek az egyes játékosok (pl. egy időben vagy felváltva egymás után).
|
||||
\item Egy-egy állásban a játékosoknak milyen lehetséges lépései (lehetőségei) vannak.
|
||||
\item A játékosok milyen -- a játékkal kapcsolatos -- információval rendelkeznek a játék folyamán.
|
||||
\item Van-e a véletlennek szerepe a játékban és hol.
|
||||
\item Milyen állásban kezdődik és mikor ér véget a játék.
|
||||
\item Az egyes játékosok mikor, mennyit nyernek, illetve veszítenek.
|
||||
\end{itemize}
|
||||
|
||||
\subsubsection*{Osztályozás}
|
||||
|
||||
\begin{itemize}
|
||||
\item A játékosok száma szerint: pl. egy-, két-, \emph{\textbf{n-személyes}} játékok.
|
||||
\item Ha a játszma állásból állásba vivő lépések sorozata \emph{\textbf{diszkrét}} a játék.
|
||||
\item Ha az állásokban véges sok lehetséges lépése van minden játékosnak és a játszmák véges sok lépés után véget érnek \emph{\textbf{véges}} a játék.
|
||||
\item Ha a játékosok a játékkal kapcsolatos összes információval rendelkeznek a játék folyamán,\\
|
||||
\emph{\textbf{teljes információjú}} a játék.
|
||||
\item Ha nincs a véletlennek szerepe a játékban, \emph{\textbf{determinisztikus}} a játék.
|
||||
\item A játékosok nyereségeinek és veszteségeinek összege 0, akkor \emph{\textbf{zérusösszegű}} a játék.\\
|
||||
\end{itemize}
|
||||
|
||||
\noindent A továbbiakban játék alatt kétszemélyes, diszkrét, véges, teljes információjú, determinisztikus, zérusösszegű játékot értünk.
|
||||
|
||||
\subsubsection*{Játékfa}
|
||||
|
||||
\noindent A játékokat állapottér-reprezentációval szokás leírni, és az állapot-gráfot faként ábrázolják.\\\\
|
||||
{\small
|
||||
\renewcommand{\arraystretch}{2}
|
||||
\begin{tabular}{ l|L }
|
||||
\textit{\textbf{csúcs}} & állás (egy állás több csúcs is lehet)
|
||||
\\ \hline
|
||||
\textit{\textbf{szint}} & játékos (felválltva A és B szintjei)
|
||||
\\ \hline
|
||||
\textit{\textbf{él}} & lépés (szintről-szintre)
|
||||
\\ \hline
|
||||
\textit{\textbf{gyökér}} & kezdő állás (kezdő játékos)
|
||||
\\ \hline
|
||||
\textit{\textbf{levél}} & végállások
|
||||
\\ \hline
|
||||
\textit{\textbf{ág}} & játszma
|
||||
\\
|
||||
\end{tabular}
|
||||
\renewcommand{\arraystretch}{1}}\\
|
||||
|
||||
\subsection*{Nyerő stratégia}
|
||||
\begin{itemize}
|
||||
\item A \textit{győztes (vagy nem-vesztes) stratégia} egy olyan elv, amelyet betartva egy játékos az ellenfél minden lépésére tud olyan választ adni, hogy megnyerje (ne veszítse el) a játékot. Valamelyik játékosnak biztosan van győztes (nem-vesztes) stratégiája.
|
||||
\item Győztes (nem-vesztes) stratégia keresése a \textit{játékfában} kombinatorikus robbanást okozhat, ezért e helyett részfa kiértékelést szoktak alkalmazni a soron következő jó lépés meghatározásához.
|
||||
\item A két esélyes (győzelem vagy vereség) teljes információjú véges determinisztikus kétszemélyes játékokban az egyik játékos számára biztosan létezik nyerő stratégia.
|
||||
\item A három esélyes játékokban (van döntetlen is) a nem vesztő stratégiát lehet biztosan garantálni.
|
||||
\end{itemize}
|
||||
|
||||
\noindent \textbf{ÉS/VAGY gráf}
|
||||
\begin{itemize}
|
||||
\item A játék az egyik játékos szempontjából egy ÉS/VAGY fával ábrázolható.
|
||||
\begin{itemize}
|
||||
\item saját szinten egy csúcs utódai között VAGY kapcsolat van
|
||||
\item ellenfél szintjén egy csúcs utódai között ÉS kapcsolat van
|
||||
\end{itemize}
|
||||
\item A nyerő (nem-vesztő) stratégiát az ÉS/VAGY játékfa azon hiper-útja mutatja, amely a gyökércsúcsból csupa nyerő (nem-vesztő) levélcsúcsba vezet.
|
||||
\item A nyerő stratégia keresése tehát egy ÉS/VAGY fa beli hiper-út keresési probléma.
|
||||
\end{itemize}
|
||||
|
||||
\subsection*{Algoritmusok}
|
||||
|
||||
\noindent A nyerő vagy nem-vesztő stratégia megkeresése egy nagyobb játékfa esetében reménytelen. Az optimális lépés helyett a soronkövetkező jó lépést keressük (\emph{részleges játékfa-kiértékelés}). \\
|
||||
|
||||
\noindent Ehhez az aktuális állapotból indulva kell a játékfa
|
||||
\begin{enumerate}
|
||||
\item néhány szintjét felépíteni,
|
||||
\item ezen a részfa leveleinek a hasznosságát megbecsülni,
|
||||
\item majd a soron következő lépést meghatározni.
|
||||
\end{enumerate}
|
||||
Minden esetben szükségünk van egy olyan heurisztikára, amely a mi szempontunkból becsüli meg egy állás hasznosságát.\\
|
||||
|
||||
\subsubsection*{Minimax \emph{algoritmus}}
|
||||
|
||||
\begin{enumerate}
|
||||
\item A játékfának az adott állás csúcsából leágazó részfáját felépítjük néhány szintig.
|
||||
\item A részfa leveleit kiértékeljük a kiértékelő függvény segítségével.
|
||||
\item Az értékeket felfuttatjuk a fában:
|
||||
\begin{itemize}
|
||||
\item A saját ($MAX$) szintek csúcsaihoz azok gyermekeinek maximumát:
|
||||
\begin{center}
|
||||
szülő := max\Big($gyerek_1,\ \ldots \,\ gyerek_k$\Big)
|
||||
\end{center}
|
||||
\item Az ellenfél (MIN) csúcsaihoz azok gyermekeinek minimumát:
|
||||
\begin{center}
|
||||
szülő := min\Big($gyerek_1,\ \ldots\ ,\ gyerek_k$\Big)
|
||||
\end{center}
|
||||
\item Soron következő lépésünk ahhoz az álláshoz vezet, ahonnan a gyökérhez felkerült a legnagyobb érték
|
||||
\end{itemize}
|
||||
\end{enumerate}
|
||||
|
||||
\newpage
|
||||
{\color{mygray}
|
||||
\noindent Az algoritmust minden alkalommal megismételjük valahányszor mi következünk. Lehetséges, hogy az ellenfél nem feltétlenül az általunk várt legerősebb lépésekkel válaszol, mert:
|
||||
\begin{itemize}
|
||||
\item eltérő mélységű részfával dolgozik,
|
||||
\item más kiértékelő függvényt használ,
|
||||
\item nem minimaxeljárást alkalmaz,
|
||||
\item hibázik.\\
|
||||
\end{itemize}
|
||||
}
|
||||
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\includegraphics[width=0.8\linewidth]{img/minmax_sample.png}
|
||||
\caption{Minimax algoritmus példa.}
|
||||
\label{fig:minmax_sample}
|
||||
\end{figure}
|
||||
|
||||
\noindent A $\ref{fig:minmax_sample}$. ábrán csak azt jelöljük, hogy melyik részfán indul el a játékos, mivel csak azt tudjuk, hogy merre kedvezőbb elindulnia. Az előző felsorolás alapján nem garantált, hogy végig is tudja játszani az adott pillanatban számára optimális játékot.
|
||||
|
||||
\subsubsection*{Alfa-Béta \emph{algoritmus}}
|
||||
\begin{itemize}
|
||||
\item Visszalépéses algoritmus segítségével járjuk be a részfát (olyan mélységi bejárás, amely mindig csak egy utat tárol).\\
|
||||
Az aktuális úton fekvő csúcsok ideiglenes értékei:
|
||||
\begin{itemize}
|
||||
\item A $MAX$ szintjein $\alpha$ érték: ennél rosszabb értékű állásba innen már nem juthatunk
|
||||
\item A $MIN$ szintjein $\beta$ érték: ennél jobb értékű állásba onnan már nem juthatunk
|
||||
\end{itemize}
|
||||
\item Lefelé haladva a fában $\alpha:= -\infty$, és $\beta:= +\infty$.
|
||||
\item Visszalépéskor az éppen elhagyott (gyermek) csúcs értéke (\emph{felhozott érték}) módosíthatja a szülő csúcs értékét:
|
||||
\begin{itemize}
|
||||
\item A $MAX$ szintjein: $\alpha:= max\Big(\textit{felhozott érték},\ \alpha\Big)$
|
||||
\item A $MIN$ szintjein: $\beta:= min\Big(\textit{felhozott érték},\ \beta\Big)$
|
||||
\end{itemize}
|
||||
\item Vágás történik, ha az úton van olyan $\alpha$ és $\beta$, hogy $\alpha\ \geq\ \beta$.\\
|
||||
\end{itemize}
|
||||
\newpage
|
||||
Példa:\\
|
||||
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\includegraphics[width=0.72\linewidth]{img/alphabeta_01.png}
|
||||
\caption{Alfa-Béta algoritmus példa.}
|
||||
\label{fig:alphabetaone}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\includegraphics[width=0.32\linewidth]{img/alphabeta_02.png}
|
||||
\includegraphics[width=0.32\linewidth]{img/alphabeta_03.png}
|
||||
\includegraphics[width=0.32\linewidth]{img/alphabeta_04.png}
|
||||
\caption{Alfa-Béta algoritmus példa.}
|
||||
\label{fig:alphabetatwo}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\includegraphics[width=0.32\linewidth]{img/alphabeta_05.png}
|
||||
\includegraphics[width=0.32\linewidth]{img/alphabeta_06.png}
|
||||
\includegraphics[width=0.32\linewidth]{img/alphabeta_07.png}
|
||||
\caption{Alfa-Béta algoritmus példa.}
|
||||
\label{fig:alphabetathree}
|
||||
\end{figure}
|
||||
|
||||
\noindent A vágás a $\ref{fig:alphabetafour}$. ábra első képen a MIN ($\beta$) ágon történik. Mivel az ellenfél szempontjából a $-2$ jobb érték, mint a bal oldali részfán már megtalált $2$-es érték, ezért a MAX algoritmus használó játékos nem választaná ezt az ágat. Ennek oka, hogy az ellenfél szempontjából kedvezőbb ,,lépést" tartalmaz. Ezért nem számít, hogy a részfa maradék (még meg nem vizsgált) levelei között lenne nagyobb érték a $2$-nél.
|
||||
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\includegraphics[width=0.32\linewidth]{img/alphabeta_08.png}
|
||||
\includegraphics[width=0.32\linewidth]{img/alphabeta_09.png}
|
||||
\includegraphics[width=0.32\linewidth]{img/alphabeta_10.png}
|
||||
\caption{Alfa-Béta algoritmus példa.}
|
||||
\label{fig:alphabetafour}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\includegraphics[width=0.72\linewidth]{img/alphabeta_end.png}
|
||||
\caption{Alfa-Béta algoritmus példa.}
|
||||
\label{fig:alphabetaend}
|
||||
\end{figure}
|
||||
|
||||
\noindent Az algoritmus hatékonyságát az adja, hogy nagy problématér esetén rengeteg számítástól kíméli meg az algoritmust használó programot, így csökkentve a válaszidőt. Például egy sakk program esetén ki kell értékelni az egyes állásokat. Ez általában úgy történik, hogy konstans értéket rendel a program az egyes , ami már használható az algoritmusban. Ehhez például a sakkban konstans értékeket rendelhetünk az egyes figurákhoz. Majd egyes állásokat a megmaradt figurák összértéke alapján értékelhetünk.
|
||||
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\includegraphics[width=0.65\linewidth]{img/chess_minmax.jpeg}
|
||||
\caption{Sakk példa: lépés keresés (Minimax).}
|
||||
\label{fig:minmaxchess}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\includegraphics[width=0.65\linewidth]{img/chess_alphabeta.jpeg}
|
||||
\caption{Sakk példa: lépés keresés (Alfa-Béta).}
|
||||
\label{fig:alphabetachess}
|
||||
\end{figure}
|
||||
|
||||
\noindent A $\ref{fig:alphabetachess}$. ábrán látható, hogy az Alpha-Beta algoritmussal megspórolunk rengeteg időt azzal, hogy az egyes állásokhoz tartozó konstans értéket nem szükséges kiszámítanunk.\\
|
||||
|
||||
\subsubsection*{A \emph{Minimax} algoritmus további módosításai}
|
||||
|
||||
\begin{itemize}
|
||||
\item \textbf{\emph{Átlagoló}}: Kisimítja a kiértékelő függvény esetleges tévedéseit.
|
||||
\begin{itemize}
|
||||
\item MAX szintre az $m$ darab legnagyobb értékű gyerek átlaga,
|
||||
\item MIN szintre az $n$ darab legkisebb értékű gyerek átlaga kerül.
|
||||
\end{itemize}
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\includegraphics[width=0.8\linewidth]{img/avgminmax_sample.png}
|
||||
\caption{Átlagoló kiértékelésű Minimax.}
|
||||
\label{fig:avgminmax}
|
||||
\end{figure}
|
||||
\item \textbf{\emph{Váltakozó mélységű kiértékelésű}}: A kiértékelő függvény minden ágon reális értéket mutat.\\
|
||||
Egy adott szintig (minimális mélység) mindenképpen felépítjük a részfát, majd ettől a szinttől kezdve egy másik adott szintig (maximális mélység) csak azon csúcsok gyerekeit állítjuk elő, amelyek még nincsenek nyugalomban, amelyre nemteljesül a nyugalmi teszt:
|
||||
\begin{center}
|
||||
$\Big|\ f(\textit{szülő})\ ‒\ f(\textit{csúcs})\ \Big|\ <\ K$\\
|
||||
\end{center}
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\includegraphics[width=0.8\linewidth]{img/variable_depth_minmax.png}
|
||||
\caption{Vátozó mélységű kiértékelésű Minimax.}
|
||||
\label{fig:avgminmax}
|
||||
\end{figure}
|
||||
\item \textbf{\emph{Negamax}}: A Negamax eljárást könnyebb implementálni.
|
||||
\begin{itemize}
|
||||
\item Kezdetben (‒1)-gyel szorozzuk azon levélcsúcsok értékeit, amelyek az ellenfél (MIN) szintjein vannak, majd
|
||||
\item Az értékek felfuttatásánál minden szinten az alábbi módon számoljuk a belső csúcsok értékeit:
|
||||
\begin{center}
|
||||
$\textit{szülő := max}\Big(\ ‒gyerek_1,\ \ldots\ ,\ ‒gyerek_k\ \Big)$
|
||||
\end{center}
|
||||
\end{itemize}
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\includegraphics[width=0.8\linewidth]{img/negamax_sample.png}
|
||||
\caption{Negamax algoritmus példa.}
|
||||
\label{fig:negamax}
|
||||
\end{figure}
|
||||
\end{itemize}
|
||||
|
||||
\end{document}
|
@@ -0,0 +1,22 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<root xmlns:nsd="https://structorizer.fisch.lu" version="3.30-06" preRepeat="until " postFor="to" preReturn="return" postForIn="in" preWhile="while " output="OUTPUT" input="INPUT" preFor="for" preExit="exit" preLeave="leave" ignoreCase="true" preThrow="throw" preForIn="foreach" stepFor="by" author="laszlo_prahar" created="2020-02-29" changedby="laszlo_prahar" changed="2020-02-29" origin="Structorizer 3.30-06" text=""5-ös tanulók száma"" comment="""" color="ffffff" type="program" style="abbr">
|
||||
<children>
|
||||
<instruction text=""Be: N, ÁT"" comment="" color="ffffff" rotated="0" disabled="0"></instruction>
|
||||
<instruction text=""B := 0"" comment="" color="ffffff" rotated="0" disabled="0"></instruction>
|
||||
<instruction text=""I := 1"" comment="" color="ffffff" rotated="0" disabled="0"></instruction>
|
||||
<while text=""I <= N"" comment="" color="ffffff" disabled="0">
|
||||
<qWhile>
|
||||
<alternative text=""ÁT(I) > 4.5"" comment="""" color="ffffff" disabled="0">
|
||||
<qTrue>
|
||||
<instruction text=""DB := DB + 1"" comment="" color="ffffff" rotated="0" disabled="0"></instruction>
|
||||
</qTrue>
|
||||
<qFalse>
|
||||
<instruction text=""SKIP"" comment="" color="ffffff" rotated="0" disabled="0"></instruction>
|
||||
</qFalse>
|
||||
</alternative>
|
||||
<instruction text=""I := I + 1"" comment="" color="ffffff" rotated="0" disabled="0"></instruction>
|
||||
</qWhile>
|
||||
</while>
|
||||
<instruction text=""Ki: DB"" comment="""" color="ffffff" rotated="0" disabled="0"></instruction>
|
||||
</children>
|
||||
</root>
|
After Width: | Height: | Size: 63 KiB |
After Width: | Height: | Size: 81 KiB |
@@ -0,0 +1 @@
|
||||
<mxfile host="Electron" modified="2020-02-29T11:13:10.422Z" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/12.1.7 Chrome/78.0.3905.1 Electron/7.0.0 Safari/537.36" etag="UTGa7yD8-9HmrjFoaNuZ" version="12.1.7" type="device" pages="2"><diagram id="CF81Xvz4hD-8HvkrrRPS" name="Stuctogram1">7Vlbc+IgGP01eXQn5NLoo7Xdy8x2pjPOdNtHmtCEEYOLRGN//UKAxEic2tb0svVFwwE+4JwDfkTHn8zLHwwusiuaIOJ4blI6/oXjeaMhEJ8S2CggjAIFpAwnCgINMMWPSIOuRgucoGWrIaeUcLxogzHNcxTzFgYZo+t2swdK2qMuYIosYBpDYqN/cMIzhQ5Dt8F/IpxmZmTg6po5NI01sMxgQtdbkH/p+BNGKVdP83KCiOTO8KL6fd9TW0+MoZwf0uGKBDfpbRT/Ar/d1ShIo1l8MwBnKswKkkKv+AER7kx8ZzziUspq6nxj+GC0yBMkQ7qOf77OMEfTBYxl7VoYQGAZnxNRAuLxgeZcSwoCU9axZP2SMzqreRWMnK8Q41iwPyY4zQXGqQyp5yjqULl39aDmVHgR0TnibCOa6A6B0cX4MFTFdSMqCDSWbQk60t2g9lFaR26oFg+a7ecwbxFfcDGIJP5C8Q+WjncmtBA8FfctFc7+FtI1FZ+DZUXwWDQAwaKs2DL14imV38AEEjOtYin4rcU9gozgZSoa7Ogqes9RcQHzV8l4LDt4++zQoNVU/xeX1Gfyu9nEt2wyfUSzFcpjDC1+xbp5m0RF0oQSygSS0xxJJjEhOxDUp2YseEKs4zid4ySRw3Sq1tZ1W7jIEq4HjQ6TyOvrPA5P5/FLVBwesNUM9iZbzU5oTify+/vE+3A+iSyfXBJljxQ+1j75mkezJZalldelVW9n88jS6l0vKT1Q3JHIdlLc23YAdiZr0YryZCyv1I2r99AoTSmIYJtbURq431wXGOROiiIA3wAXpZZJlTamVGJ+W7X1Ql280yPJ56aXLGy2Q1wjhgUncpNV4D79UGLd/HfUE4unBYvR087kkKWIP9XOdsOW3GGH2gZjiECOV+3pdllAj3BNsVhIbbbBKGyZzdqoapm61/YrhN1AQTsQiHYCKR6sQJUj62W/wqR2Hn0kk7b8WTnWO9ig0cmgJ4NqgwaWQfEnSSJ6+FEb2nlD8JZpA7DvdPnXUcMPPpgadsbddTP7dKlc4Ld5HnXcbEDHm4ywt1RuaBE9wTNSfNXrzO6r/x5fNYli84eO+lFp/hXzL/8B</diagram><diagram name="Stuctogram2" id="VjISOPw4ivkPMwLL8GdV">7VrfU6M6FP5reLRD+KH2UauuD3tn945z5+4+ZiGl0UC6abDUv/4mkAAhVKpLW2/HjjMlhySQ833fyTmxjj9Liy8MLhd/0RgRx3PjwvFvHM8Dgec58s+NN5Xl0leGhOFYdWoMD/gFKaOrrDmO0croyCklHC9NY0SzDEXcsEHG6NrsNqfEfOoSJsgyPESQ2NZ/ccwXahWh29jvEU4W+snAVXdSqDsrw2oBY7pumfxbx58xSnl1lRYzRKTztF8iL7l7efzxz1d6+YhIkX77e1mcVZPdvWVIvQSGMj7u1ArLZ0hy5a85ItyZ+c7VlEsmlAvnG+1NRvMsRnJG1/Gv1wvM0cMSRvLuWvBH2BY8JaIFxOWcZlwRAgS6reaS91ec0acaFeHP62fEOBbYXRGcZML2i3JOU3FDvaa4jYoOrgNOATVSguKIpoizjRinZgk02ordYVg11w1VQKBsixZNpmoYVOxM6pkbBMSFAuEtgFxYPkexILRqUsYXNKEZJLeN9dpEpenzldKl8vUj4nyjwIA5pyZSqMD8hxw+CVXrZ+vOTaFmLhsb3cjEeluDZPNn+14zrGzpcTbqbZ5c1GDLZb8DauE6mrMIvdLPV2EIsgS9Nl/QTx2GCOT42Xy50YngW8rMuXiIVOZNJVCwcrxzIVbh0vyXQZnz37kMSqVjz1alZ69EBxAsi9K9+r64SuQ30BOJNy3nqsyvqB/spv47mGIigb9H5BlJaW8JCzNKKCsf4rvlR9ihCgKRQB2xmjl9XXs4hQlp9ZyXHysG7SmqADOoBOeTHcOKto3OpuAtbFrC7I/oNBYtvW20bKzlqw6ydS971YHIA9zpkbkTWty5JY8VZ5iiTozmOKvYFGH5fe1bcAg3cdPnpp4zmqGOcJXJCgTdNCHFcVxuhH0gmzTo7jXHiAe6OYSot68k49yOBu/R7Aj7yP9LmZddHG0gdV1xEGVeWjg+0CesRJltSiFKtEQiX5oS+FLH+k91bofVQtVze2DdmzynFqxaV9IfO8kz7JPn3BD5gGRra/XM01ZyT9l3UCFryhmQd8vALL6S5yGN8ra49qJdnJ25E9cFRn0mDP5AjfbuevA7Yli4RMaBLcWes+fiTolnsLib9hNkgAHatnMNqJ7wneJSuYp/Z9PQ4J8VS6plqlHtQ53uRIE5EbjoTFT5wZqoZGm97D8g7m6FxWlEjcAfPiwCPXlcuLewYafm95XPeU44Wr3II7xZ6EwlBm6En0j+ufO3APWHd34wPeTOD+yMbpzMfGspfRrK9PwPlpmDQ+Zww+ckp5jDdTE/dg7nfeZwY+VwYNckDhw3iwtGyuKOm8PphbeIO5lMTiZMfLRDGx0WeraGnU/ee7eGErSTPhrvYnn0kN9T/YySrmWnna75Hy1d8+xCan/p2lZwTzpd62J+dO3a/wT5TNfel65p9Qyma1XHY6Vr4UjZGnD3la+JZvNzsqp786M8//Y/</diagram></mxfile>
|
After Width: | Height: | Size: 4.6 KiB |
After Width: | Height: | Size: 57 KiB |
After Width: | Height: | Size: 52 KiB |
After Width: | Height: | Size: 72 KiB |
After Width: | Height: | Size: 70 KiB |
After Width: | Height: | Size: 46 KiB |
After Width: | Height: | Size: 63 KiB |
After Width: | Height: | Size: 62 KiB |
@@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<root xmlns:nsd="https://structorizer.fisch.lu" version="3.30-06" preRepeat="until " postFor="to" preReturn="return" postForIn="in" preWhile="while " output="OUTPUT" input="INPUT" preFor="for" preExit="exit" preLeave="leave" ignoreCase="true" preThrow="throw" preForIn="foreach" stepFor="by" author="laszlo_prahar" created="2020-02-29" changedby="laszlo_prahar" changed="2020-02-29" origin="Structorizer 3.30-06" text=""Felsorolás"" comment="""" color="ffffff" type="program" style="nice">
|
||||
<children>
|
||||
<instruction text=""First()"" comment="""" color="ffffff" rotated="0" disabled="0"></instruction>
|
||||
<while text=""¬ End()"" comment="""" color="ffffff" disabled="0">
|
||||
<qWhile>
|
||||
<instruction text=""Feldolgoz(Current())"" comment="""" color="ffffff" rotated="0" disabled="0"></instruction>
|
||||
<instruction text=""Next()"" comment="""" color="ffffff" rotated="0" disabled="0"></instruction>
|
||||
</qWhile>
|
||||
</while>
|
||||
</children>
|
||||
</root>
|
After Width: | Height: | Size: 11 KiB |
After Width: | Height: | Size: 13 KiB |
After Width: | Height: | Size: 8.0 KiB |
@@ -0,0 +1,633 @@
|
||||
\documentclass[12pt,margin=0px]{article}
|
||||
|
||||
\usepackage[a4paper, margin=1in]{geometry}
|
||||
\usepackage[normalem]{ulem}
|
||||
\usepackage[table,xcdraw]{xcolor}
|
||||
\usepackage[thinlines]{easytable}
|
||||
\usepackage[utf8]{inputenc}
|
||||
\usepackage[hungarian]{babel}
|
||||
\usepackage{amsmath}
|
||||
\usepackage{amssymb}
|
||||
\usepackage{amsthm}
|
||||
\usepackage{enumitem}
|
||||
\usepackage{fancyhdr}
|
||||
\usepackage{float}
|
||||
\usepackage{graphicx}
|
||||
\usepackage{hhline}
|
||||
\usepackage{listings}
|
||||
\usepackage{makecell}
|
||||
\usepackage{multirow}
|
||||
\usepackage{pdfpages}
|
||||
\usepackage{subcaption}
|
||||
\usepackage{xcolor}
|
||||
\usepackage{verbatim}
|
||||
\usepackage{dashrule}
|
||||
|
||||
\definecolor{mygray}{rgb}{0.15, 0.15, 0.15}
|
||||
|
||||
\setlist[itemize,1]{label=$\bullet$}
|
||||
\setlist[itemize,2]{label=$\circ$}
|
||||
\setlist[itemize,3]{label=$\centerdot$}
|
||||
\setlist[itemize,4]{label=$\cdot$}
|
||||
|
||||
\pagestyle{fancy}
|
||||
|
||||
\newcommand\blfootnote[1]{%
|
||||
\begingroup
|
||||
\renewcommand\thefootnote{}\footnote{#1}%
|
||||
\addtocounter{footnote}{-1}%
|
||||
\endgroup
|
||||
}
|
||||
|
||||
\renewcommand{\figurename}{ábra}
|
||||
\newenvironment{tetel}[1]{\paragraph{#1 \\}}{}
|
||||
\renewcommand{\baselinestretch}{1.15}
|
||||
|
||||
\newcommand{\N}{\mathbb{N}}
|
||||
\newcommand{\Z}{\mathbb{Z}}
|
||||
\newcommand{\R}{\mathbb{R}}
|
||||
\newcommand{\Q}{\mathbb{Q}}
|
||||
\newcommand{\C}{\mathbb{C}}
|
||||
|
||||
\makeatletter
|
||||
\renewcommand\paragraph{%
|
||||
\@startsection{paragraph}{4}{0mm}%
|
||||
{-\baselineskip}%
|
||||
{.5\baselineskip}%
|
||||
{\normalfont\normalsize\bfseries}}
|
||||
\makeatother
|
||||
|
||||
% A dokument itt kezdődik
|
||||
|
||||
\useunder{\uline}{\ul}{}
|
||||
\fancyhead{}
|
||||
\cfoot{7. tétel | \thepage. oldal}
|
||||
|
||||
\renewcommand{\headrulewidth}{0pt}
|
||||
\renewcommand{\footrulewidth}{0.4pt}
|
||||
|
||||
\begin{document}
|
||||
\thispagestyle{fancy}
|
||||
\hyphenation{oddword}
|
||||
\uchyph=0
|
||||
|
||||
{\Large\bfseries\noindent 7. Programozás} \\
|
||||
|
||||
\section*{Egyszerű programozási feladat megoldásának lépései}
|
||||
\subsection*{Bevezetés}
|
||||
Egy programozási feladat megoldása nem csupán a kódolásból áll. Tartalmaz még jó néhány egyéb tevékenységet.\\
|
||||
|
||||
\noindent Az első teendő a feladat pontos meghatározása, a \emph{specifikáció}, ami tartalmazza:
|
||||
\begin{itemize}
|
||||
\item[-] A feladat szöveges és formalizált, matematikai leírását (a specifikáció ún. szűkebb értelmezésén)
|
||||
\item[-] A megoldással szemben támasztott követelményeket, környezeti igényeket (ami a specifikáció ún. tágabb értelmezése).
|
||||
\end{itemize}
|
||||
|
||||
\noindent A specifikáció alapján meg lehet tervezni a programot, ahol elkészülhet
|
||||
\begin{itemize}
|
||||
\item[-] a \emph{megoldás algoritmusa}, és az
|
||||
\item[-] algoritmus által használt \emph{adatok leírása}.
|
||||
\end{itemize}
|
||||
|
||||
\noindent Az algoritmus és az adatszerkezet finomítása egymással párhuzamosan halad, egészen addig a szintig, amelyet a programozó ismeretei alapján már könnyen, hibamentesen képes kódolni. Gyakran előfordul, hogy a tervezés során derül fény a specifikáció hiányosságaira, így itt visszalépésekre számíthatunk.\\
|
||||
|
||||
\noindent Az algoritmusírás után következhet a \emph{kódolás}. Ha a feladat kitűzője nem rögzítette, akkor ez előtt választhatunk a megoldáshoz programozási nyelvet. A kódolás eredménye a programozási nyelven leírt program.\\
|
||||
|
||||
\noindent A program első változatban általában sohasem hibátlan, a helyességéről csak akkor beszélhetünk, ha meggyőződtünk róla. A helyesség vizsgálatának egyik lehetséges módszere a \emph{tesztelés}. Ennek során próbaadatokkal próbáljuk ki a programot, s az ezekre adott eredményből következtetünk a helyességre.\\
|
||||
\emph{Megyjegyzés: (Ne legyenek illúzióink afelől, hogy teszteléssel eldönthető egy program helyessége. Hisz hogy valójában helyes-e a program – sajnos – nem következik abból, hogy nem találtunk hibát.)}\\
|
||||
|
||||
\noindent Ha a tesztelés során hibajelenséggel találkozunk, akkor következhet a \emph{hibakeresés}, a hibajelenséget okozó utasítás megtalálása, majd pedig a \emph{hibajavítás}.\\
|
||||
|
||||
\noindent A hiba kijavítása több fázisba is visszanyúlhat. Elképzelhető, hogy kódolási hibát kell javítanunk, de az is lehet, hogy a hibát már a tervezésnél követtük el.\\
|
||||
|
||||
\noindent Javítás után újra tesztelni kell, hiszen – legyünk őszinték magunkhoz!– nem kizárt, hogy hibásan javítunk, illetőleg – enyhe optimizmussal állítjuk:– a javítás újabb hibákat fed fel.\\
|
||||
|
||||
\noindent E folyamat végeredménye a helyes program. Ezzel azonban még korántsem fejeződik be a programkészítés. Most következnek a minőségi követelmények. Vizsgálnunk kell
|
||||
\begin{itemize}
|
||||
\item[-] a hatékonyságot (végrehajtási idő, helyfoglalás), másrészt
|
||||
\item[-] a kényelmes felhasználhatóságot (felhasználó barát működés).
|
||||
\end{itemize}
|
||||
|
||||
\noindent Itt újra visszaléphetünk a kódolási, illetve a tervezési fázisba is. Ezzel elérkeztünk a jó programhoz.
|
||||
|
||||
\subsection*{Specifikáció}
|
||||
|
||||
A programkészítés menetének első lépése a feladat meghatározása, precíz "újrafogalmazása". Milyen is legyen, mit várjunk el tőle? Néhány – jónak tűnő – követelmény egyelőre címszavakban. (A továbbiakban a specifikáció szűkebb értelmezéséről lesz szó.)\\\\
|
||||
A specifikáció legyen:
|
||||
|
||||
\begin{itemize}
|
||||
\item[-] helyes, egyértelmű, pontos, teljes
|
||||
\item[-] rövid, tömör
|
||||
\subitem (ez legegyszerűbben úgy érhető el, hogy ismert formalizmusokra építjük)
|
||||
\item[-] szemléletes, érthető
|
||||
\subitem (amit időnként nehezít a formalizáltság)
|
||||
\end{itemize}
|
||||
|
||||
\noindent A specifikáció első közelítésben lehetne a feladatok szövege. Ez azonban több problémát vethet fel:
|
||||
|
||||
\begin{itemize}
|
||||
\item[-] Mi alapján adjuk meg a megoldást?
|
||||
\item[-] Mit is kell pontosan megadni?
|
||||
\end{itemize}
|
||||
|
||||
\noindent Például az a feladat, hogy adjuk meg $N$ ember közül a legmagasabbat. A legmagasabb ember megadása mit jelent? Adjuk meg a sorszámát, vagy a nevét, vagy a személyi számát, vagy a magasságát, esetleg ezek közül mindegyiket? Tanulságként megállapítható, hogy a specifikációnak \emph{tartalmaznia kell a bemenő és a kimenő adatok leírását}.
|
||||
|
||||
\begin{verbatim}
|
||||
Bemenet:
|
||||
N : az emberek száma,
|
||||
A : a magasságukat tartalmazó sorozat.
|
||||
|
||||
Kimenet:
|
||||
MAX : a legmagasabb ember sorszáma.
|
||||
\end{verbatim}
|
||||
|
||||
\noindent Tudjuk-e, hogy a bemenő, illetve a kimenő változók milyen értéket vehetnek fel?
|
||||
\begin{itemize}
|
||||
\item[-] Például az emberek magasságát milyen mértékegységben kell megadni?
|
||||
\item[-] Az eredményül kapott sorszám milyen érték lehet: 1-től sorszámozunk, vagy 0-tól?
|
||||
\end{itemize}
|
||||
|
||||
\noindent Megállapíthatjuk tehát, hogy a specifikációnak \emph{tartalmaznia kell a bemeneti és a kimeneti változók értékhalmazát}.
|
||||
|
||||
\begin{verbatim}
|
||||
Bemenet:
|
||||
N : az emberek száma, természetes szám;
|
||||
A : a magasságukat tartalmazó sorozat, egész számok, amelyek a magasságot
|
||||
centiméterben fejezik ki (a sorozatot 1-tol N-ig indexeljük).
|
||||
Kimenet:
|
||||
MAX : a legmagasabb ember sorszáma, 1 és N közötti természetes szám.
|
||||
\end{verbatim}
|
||||
|
||||
\noindent Most már a bemenő és a kimenő változók értékhalmazát pontosan meghatároztuk, csupán az a probléma, hogy a feladatban használt fogalmakat és az eredmények kiszámítási szabályát nem definiáltuk.\\
|
||||
|
||||
\noindent A specifikációnak tehát \emph{tartalmaznia kell a feladatban használt fogalmak definícióját}, valamint az \emph{eredmény kiszámítási szabályát}.\\
|
||||
|
||||
\noindent Itt lehetne megadni a bemenő adatokra vonatkozó összefüggéseket is. A \emph{bemenő}, illetve a \emph{kimenő} adatokra kirótt feltételeket nevezzük \emph{előfeltétel}nek, illetve \emph{utófeltétel}nek. Az előfeltétel nagyon sokszor egy azonosan igaz állítás, azaz a bemenő adatok értékhalmazát semmilyen "külön” feltétellel nem szorítjuk meg.
|
||||
|
||||
\begin{verbatim}
|
||||
Bemenet:
|
||||
N : az emberek száma, természetes szám,
|
||||
A : a magasságukat tartalmazó sorozat, egész számok,
|
||||
amelyek a magasságot centiméterben tartalmazzák
|
||||
|
||||
(a sorozatot 1-tol N-ig indexeljük).
|
||||
Kimenet:
|
||||
MAX : a legmagasabb ember sorszáma, 1 és N közötti természetes szám.
|
||||
|
||||
Elofeltétel:
|
||||
A[i]-k pozitívak.
|
||||
|
||||
Utófeltétel:
|
||||
MAX olyan 1 és N közötti szám, amelyre A[MAX] nagyobb vagy egyenlo,
|
||||
mint a sorozat bármely eleme (az 1. és az N. között).
|
||||
\end{verbatim}
|
||||
|
||||
\noindent Újabb probléma merülhet fel bármelyik feladattal kapcsolatban: az eddigiek alapján a "várttól” lényegesen különböző – nyugodtan állíthatjuk: "banális” –, az elő- és utófeltételnek megfelelő megoldást is tudunk készíteni.\\
|
||||
|
||||
\noindent Itt persze arról a hallgatólagos (tehát még meg nem fogalmazott, ki nem mondott) feltételezésről van szó, hogy a bemeneti változók értéke nem változik meg. Ez sajnos nem feltétlenül igaz.\\
|
||||
|
||||
\noindent A probléma megoldására kétféle utat követhetünk:
|
||||
\begin{itemize}
|
||||
\item az utófeltételbe automatikusan beleértjük, hogy "a bemeneti változók értéke nem változik meg”, s külön kiemeljük, ha mégsem így van;
|
||||
\item az elő- és az utófeltételt a program paramétereire fogalmazzuk meg, amelyeket formailag megkülönböztetünk a program változóitól, és emiatt nem a paraméterek fognak változni, hanem a programbeli változók (ebben az esetben természetesen az elő- és az utófeltételben meg kell fogalmazni a paraméterek és a megfelelő programbeli változók értékének azonosságát).
|
||||
\end{itemize}
|
||||
|
||||
\noindent A második megoldásból az következik, hogy meg kell különböztetnünk egymástól a feladat és a program elő–, illetve utófeltételét! Ez hosszadalmasabbá – bár precízebbé – teszi a feladat megfogalmazását, emiatt ritkábban fogjuk alkalmazni.\\
|
||||
|
||||
\noindent Előfordulhat, hogy a feladat megfogalmazása alapján nem lehet egyértelműen meghatározni az eredményt, ugyanis az utófeltételnek megfelelő több megoldás is létezik. Ez a jelenség a \emph{feladat ún. nemdeterminisztikussága}. \\
|
||||
|
||||
\noindent Ehhez a nemdeterminisztikus feladathoz tehát determinisztikus programot kell írnunk, aminek az utófeltétele már nem engedheti meg a nem egyértelműséget, a nemdeterminisztikusságot. E probléma miatt tehát mindenképpen meg kell különböztetnünk egymástól a feladat és a program elő–, illetve utófeltételét.
|
||||
\newpage
|
||||
\begin{verbatim}
|
||||
Bemenet:
|
||||
N : az emberek száma, természetes szám,
|
||||
A : a magasságukat tartalmazó sorozat, egész számok,
|
||||
amelyek a magasságot centiméterben tartalmazzák
|
||||
(a sorozatot 1-tol N-ig indexeljük).
|
||||
Kimenet:
|
||||
MAX : a legmagasabb ember sorszáma, 1 és N közötti természetes szám.
|
||||
|
||||
Elofeltétel:
|
||||
A[i]-k pozitívak.
|
||||
|
||||
Utófeltétel:
|
||||
MAX olyan 1 és N közötti szám, amelyre A[MAX] nagyobb vagy egyenlo,
|
||||
mint a sorozat bármely eleme (az 1. és az N. között).
|
||||
|
||||
Program utófeltétel:
|
||||
MAX olyan 1 és N közötti szám, amelyre A[MAX] nagyobb vagy egyenlo,
|
||||
mint a sorozat bármely eleme (az 1. és az N. között) és elotte
|
||||
nincs vele egyenlo.
|
||||
\end{verbatim}
|
||||
|
||||
\noindent Megállapíthatjuk ebből, hogy \emph{a program utófeltétele lehet szigorúbb, mint a feladaté}, emellett \emph{az előfeltétele pedig lehet gyengébb}.\\
|
||||
|
||||
\noindent Visszatekintve a specifikáció eddig "bejárt pályájára” egy szemléletes modellje körvonalazódik a feladatmegoldásnak. Nevezetesen: nyugodtan mondhatjuk azt, hogy a feladatot megoldó program egy olyan automatát határoz meg, amelynek pillanatnyi állapota a feladat paraméterei (a program változói) által "kifeszített” halmaz egy eleme. (E halmaz annyi dimenziós, ahány paraméterváltozója van a programnak; minden dimenzió egyik változó értékhalmaza. Tehát egy konkrét időpillanatban e "gép” állapota: a változóinak abban a pillanatban érvényes értékeinek együttese.) Ezt a halmazt nevezzük a program állapotterének. Amikor megfogalmazzuk az előfeltételt, akkor tulajdonképpen kihasítjuk ebből az állapottérből azt a részt (azt az altért), amelyből indítva elvárhatjuk az automatánktól (amit a megoldó program vezérel), hogy a helyes eredményt előállítja egy végállapotában. A végállapotot jelöltük ki az utófeltétellel.\\
|
||||
|
||||
\noindent Ezt a modellt elfogadva adódik még egy további megoldásra váró kérdés. Akkor ugyanis, amikor a programot írjuk, lépten-nyomon a részeredmények tárolására újabb és újabb változókat vezetünk be. Fölvetődik a kérdés: hogyan egyeztethető össze az imént elképzelt modellel? A válasz egyszerű: minden egyes újabb változó egy újabb dimenziót illeszt az eddig létrejött állapottérhez. Tehát a programozás folyamata – leegyszerűsítve a dolgot – nem áll másból, mint annak pontosításából, hogy hogyan is nézzen ki a megoldó automata állapottere (és persze: hogyan kell az egyik állapotból a másik állapotba jutnia). A feladatban szereplő paraméterek meghatározta "embrionális” állapotteret hívhatjuk paramétertérnek, ami csak altere a program valódi állapotterének. Ez is azt sugallja, hogy a feladat előfeltétele gyengébb (azaz az általa kijelölt állapothalmaz) lehet, mint a program előfeltétele.\\
|
||||
|
||||
\noindent Foglaljuk most össze, hogy melyek a specifikáció részei! Ezek az eddigiek, valamint a programra vonatkozó további megkötések lesznek.
|
||||
|
||||
\begin{enumerate}
|
||||
\item A feladat specifikálása
|
||||
\begin{itemize}
|
||||
\item a feladat szövege,
|
||||
\item a bemenő és a kimenő adatok elnevezése, értékhalmazának leírása,
|
||||
\item a feladat szövegében használt fogalmak definíciói (a fogalmak fölhasználásával),
|
||||
\item a bemenő adatokra felírt előfeltétel (a fogalmak fölhasználásával),
|
||||
\item a kimenő adatokra felírt utófeltétel.
|
||||
\end{itemize}
|
||||
\item A program specifikálása
|
||||
\begin{itemize}
|
||||
\item a bemenő és a kimenő adatok elnevezése, értékhalmazának leírása,
|
||||
\item (a feladat elő-, illetve utófeltételétől esetleg különböző) program elő- és utófeltétel,
|
||||
\item a feladat megfogalmazásában használt fogalmak definíciói.
|
||||
\end{itemize}
|
||||
\end{enumerate}
|
||||
|
||||
\noindent Ezek az absztrakt specifikáció elemei. Az alábbiak másodlagos, mondhatjuk: technikai specifikáció részei:
|
||||
|
||||
\begin{itemize}
|
||||
\item a program környezetének leírása (számítógép, memória- és perifériaigény, programozási nyelv, szükséges fájlok stb.),
|
||||
\item a programmal szembeni egyéb követelmények (minőség, hatékonyság, hordozhatóság stb.).
|
||||
\end{itemize}
|
||||
|
||||
\noindent A technikai specifikáció nélküli leírást a program szűkebb specifikációjának nevezik.\\
|
||||
|
||||
\noindent Az elöbbi feladat progos specifikációja:\\\\
|
||||
$A=(N : \mathbb{N},\ A: \mathbb{N}^{1..N})$\\
|
||||
$Ef=(\forall i \in {1..N}\ :\ A_{i} > 0)$\\
|
||||
$Uf=(Ef\ \land\ \forall i \in {1..N}\ :\ A_{MAX} \geq A_{i}\ \land\ \forall j \in \{1, ... ,MAX-1\}\ :\ A_{j} < A_{MAX})$
|
||||
|
||||
\subsection*{Tervezés}
|
||||
|
||||
A tervezés során algoritmusleíró eszközöket használunk, amelynek célja a feladatok megoldásának leírása programozási nyelvtől független nyelven. A programozási nyelvek ugyanis szigorú szintaxisúak, a tervezés szempontjából lényegtelen sallangokat tartalmaznak. A programozási nyelven történő tervezés esetén nehézzé válhat a program átírása más nyelvre, más gépre. Többféle algoritmusleíró eszköz is létezik, mi tanulmányaink során a struktogramot alkalmaztuk.\\
|
||||
|
||||
\noindent A \textbf{struktogram} a programgráfot élek nélkül ábrázolja. Így egyetlen egy alapelem marad, a \emph{téglalap}. Ezzel az alapelemmel építhetjük fel a szokásos strukturált alapszerkezeteket (és csak azokat).
|
||||
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\includegraphics[width=0.7\linewidth]{img/stuki_alapszerk1}
|
||||
\caption{A struktogram összetett alapszerkezetei.}
|
||||
\label{fig:stuki_alapszerk1}
|
||||
\end{figure}
|
||||
|
||||
\noindent \emph{Szekvenciánál} a téglalapok egymás alatti sorrendje dönti el a végrehajtás sorrendjét.\\
|
||||
|
||||
\noindent Az \emph{elágazásfeltétel} igaz értéke esetén az i betűvel jelölt bal oldali téglalap utasítását kell végrehajtani, hamis értéke esetén pedig az n betűvel jelölt jobb oldali téglalapét.\\ Ha az elágazás valamelyik ága üres, akkor a neki megfelelő téglalap is üres marad. \\
|
||||
|
||||
\noindent A \emph{ciklus} elöltesztelős, azaz a benne levő utasítást mindaddig végre kell hajtani, amíg a feltétel igaz.\\
|
||||
|
||||
\noindent Az utasítások helyén lehet egyetlen elemi utasítás, lehet a három algoritmikus szerkezet valamelyike, és lehet egy eljáráshívás.\\
|
||||
|
||||
\noindent Ezt a leíróeszközt még többféle elemmel szokták bővíteni:
|
||||
\begin{itemize}
|
||||
\item Eljárásdefinícióval
|
||||
\item Sokirányú elágazással
|
||||
\item Hátultesztelős ciklussal
|
||||
\end{itemize}
|
||||
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\includegraphics[width=0.7\linewidth]{img/stuki_alapszerk2}
|
||||
\caption{A struktogram további összetett alapszerkezetei.}
|
||||
\label{fig:stuki_alapszerk2}
|
||||
\end{figure}
|
||||
|
||||
\noindent Sokirányú elágazásnál azt az ágat kell végrehajtani, amelynek igaz értékű a feltétele (közülük minden esetben pontosan egy teljesülhet).\\
|
||||
|
||||
\noindent A lokális adatokat az eljárások téglalapjai mellett, az eljárásnév után sorolhatjuk fel.\\
|
||||
|
||||
\noindent Nézzük meg ezzel az eszközzel leírva a következő példát!\\
|
||||
|
||||
\noindent Feladat: N tanuló év végi átlagának ismeretében adjuk meg a jeles átlagú tanulók számát!
|
||||
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\includegraphics[width=0.3\linewidth]{img/stuki_pelda}
|
||||
\caption{A példafeladat megoldása struktogrammal.}
|
||||
\label{fig:stuki_pelda}
|
||||
\end{figure}
|
||||
|
||||
\subsection*{Megvalósítás}
|
||||
|
||||
A program elkészítése a kiválasztott programozási nyelve(ke)n, azaz a kódolás.
|
||||
\newpage
|
||||
|
||||
\subsection*{Tesztelés}
|
||||
|
||||
A tesztelés célja, hogy minél több hibát megtaláljunk a programban. Ahhoz, hogy az összes hibát fölfedezzük, kézenfekvőnek tűnik a programot kipróbálni az összes lehetséges bemenő adattal. Ez azonban általában sajnos nem lehetséges.\\
|
||||
|
||||
\noindent Példaként tekintsük a következő - pszeudokóddal megadott - egyszerű programot:
|
||||
|
||||
\begin{verbatim}
|
||||
Program:
|
||||
Változó A,B:Egész
|
||||
Be: A,B
|
||||
Ki: A/B
|
||||
Program vége.
|
||||
\end{verbatim}
|
||||
|
||||
\noindent Mivel $2^{16}$ különböző értékű egész számot tudunk tárolni, ezért az összes lehetőség $2^{32}$, aminek a leírásához már 9 számjegyre van szükség. Ez rengeteg időt venne igénybe, így nem is járható út.\\
|
||||
|
||||
\noindent Ha ezt a programot olyan bemenő adatokkal próbáljuk ki, amelyben A=0 vagy B=1, akkor a program helyesen működik, a hibát nem tudjuk felfedezni. Ezután azt gondolhatnánk, hogy reménytelen helyzetbe kerültünk: hiszen minden lehetséges adattal nem tudjuk kipróbálni a programot; ha pedig kevesebbel próbáljuk ki, akkor lehet, hogy nem vesszük észre a hibákat. A helyzet azért nem ennyire rossz: célunk csak az lehet, hogy a tesztelést olyan módszerrel hajtsuk végre, amellyel a próbák száma erősen lecsökkenthető.\\
|
||||
|
||||
\noindent Tesztesetnek a be- és kimeneti adatok és feltételek együttes megadását nevezzük. Akkor tudunk a tesztelés eredményeiről bármit is mondani, ha van elképzelésünk arról, hogy adott bemenő adatra milyen eredményt várunk.\\
|
||||
|
||||
\noindent Fogalmazzuk meg a tesztelés alapelveit:
|
||||
\begin{itemize}
|
||||
\item A jó teszteset az, ami nagy valószínűséggel egy még felfedetlen hibát mutat ki a programban.\\
|
||||
Például két szám legnagyobb közös osztóját számoló programot az [5,5] adatpár után a [6,6]-tal teljesen felesleges kipróbálni (ugyanis igencsak rafinált, valószínűtlen elírás esetén viselkedhet a program [6,6]-ra másként, mint [5,5]-re).
|
||||
\item A teszteset nemcsak bemenő adatokból, hanem a hozzájuk tartozó eredményekből is áll. Egyébként nem tudnánk a kapott eredmény helyes vagy hibás voltáról beszélni.\\
|
||||
A későbbi felhasználás miatt célszerű a teszteseteket is leírni a fejlesztői dokumentációban vagy egy önálló tesztelési jegyzőkönyvben.
|
||||
\item A meg nem ismételhető tesztesetek kerülendők, feleslegesen megnövelik a program-tesztelés költségeit, idejét. Nem is beszélve arról a bosszúságról, amikor a programunk egy hibás futását nem tudjuk megismételni, és így a hiba is felfedetlen marad.
|
||||
\item Teszteseteket mind az érvénytelen, mind az érvényes adatokra kell készíteni.
|
||||
\item Minden tesztesetből a lehető legtöbb információt "ki kell bányászni”, azaz minden teszteset eredményét alaposan végig kell vizsgálni. Ezzel jelentősen csökkenthető a szükséges próbák száma.
|
||||
\item Egy próba eredményeinek vizsgálata során egyaránt fontos megállapítani, hogy miért nem valósít meg a program valamilyen funkciót, amit elvárunk tőle, illetve hogy miért végez olyan tevékenységeket is, amelyeket nem feltételeztünk róla.
|
||||
\item A program tesztelését csak a program írójától különböző személy képes hatékonyan elvégezni. Ennek oka, hogy a tesztelés nem "jóindulatú” tevékenység, saját munkájának vizsgálatához mindenki úgy áll hozzá, hogy önkéntelenül jónak feltételezi.
|
||||
\end{itemize}
|
||||
|
||||
\noindent A programtesztelés módszereit két csoportba oszthatjuk aszerint, hogy a tesztelés során végrehajtjuk-e a programot, vagy nem. Ha csak a program kódját vizsgáljuk, akkor \emph{statikus} (erről nem esik több szó), ha a programot végre is hajtjuk a tesztelés során, akkor \emph{dinamikus} tesztelésről beszélünk.
|
||||
|
||||
\paragraph{Dinamikus tesztelési módszerek}
|
||||
|
||||
A dinamikus tesztelési módszerek alapelve az, hogy a programot működés közben vizsgáljuk. Teszteseteket kétféle módon tudunk választani. \\
|
||||
|
||||
\noindent Egy lehetőség az ún. \textbf{feketedoboz-módszer}, más néven adatvezérelt tesztelés.\\
|
||||
A módszer alkalmazásakor a tesztelő nem veszi figyelembe a program belső szerkezetét, pontosabban nem azt tekinti elsődleges szempontnak, hanem a teszteseteket a feladat meghatározás alapján választja meg.\\
|
||||
|
||||
\noindent A cél természetesen a lehető leghatékonyabb tesztelés elvégzése, azaz az összes hiba megtalálása a programban. Ez ugyan elvileg lehetséges, kimerítő bemenet tesztelést kell végrehajtani, a programot ki kell próbálni az összes lehetséges bemenő adatra. Ezzel a módszerrel azonban, mint korábban láttuk, mennyiségi akadályba ütközhetünk.\\
|
||||
|
||||
\noindent Egy másik lehetőség a \textbf{fehérdoboz-módszer} (logika vezérelt tesztelés). Ebben a módszerben a tesztesetek megválasztásánál lehetőség van a program belső szerkezetének figyelembevételére is.\\
|
||||
|
||||
\noindent A cél a program minél alaposabb tesztelése, erre jó módszer a kimerítő út tesztelés. Ez azt jelenti, hogy a programban az összes lehetséges utat végigjárjuk, azaz annyi tesztesetet hozunk létre, hogy ezt elérhessük vele. Az a probléma, hogy még viszonylag kis programok esetén is igen nagy lehet a tesztelési utak száma. Gondoljunk a ciklusokra! Sőt ezzel a módszerrel a hiányzó utakat nem lehet felderíteni.\\
|
||||
|
||||
\noindent Mivel sem a fehérdoboz-módszerrel, sem a feketedoboz-módszerrel nem lehetséges a kimerítő tesztelés, el kell fogadnunk, hogy nem tudjuk egyetlen program hibamentességét sem szavatolni. A további cél ezek után az összes lehetséges teszteset halmazából a lehető leghatékonyabb teszteset-csoport kiválasztása lehet.\\
|
||||
|
||||
\noindent A tesztelés hatékonyságát kétféle jellemző határozza meg: a tesztelés költsége és a felfedett hibák aránya. A leghatékonyabb teszteset-csoport tehát minimális költséggel maximális számú hibát fed fel.\\
|
||||
|
||||
\noindent A feketedoboz- és fehérdoboz-teszteken kívül még érdemes megemlíteni olyan speciális teszteket, amikor nem a helyesség belátása a cél. Ilyen pl. a stresszteszt (nagy adatmennyiséget hogyan bír kezelni a program, jól skálázódik-e) vagy a hatékonysági teszt (végrehajtási idő tesztelése).
|
||||
|
||||
\section*{Az adattípus fogalma}
|
||||
|
||||
\subsection*{Alapfogalmak, jelölések}
|
||||
|
||||
\begin{itemize}
|
||||
|
||||
\item Legyen\\
|
||||
$\begin{array}{r|l}
|
||||
A^{*} & A\text{-beli \emph{véges} sorozatok halmaza} \\
|
||||
A^{\infty} & A\text{-beli \emph{végtelen} sorozatok halmaza} \\
|
||||
A^{*} \cup A^{\infty} = A^{**} & A\text{-beli \emph{véges vagy végtelen} sorozatok halmaza} \\
|
||||
\end{array}$
|
||||
|
||||
\item Legyen $R \subseteq A \times \mathbb{L}$ egy logikai reláció.\\
|
||||
Ekkor az $R$ \emph{\textbf{igazsághalmaza}}
|
||||
$\lceil R \rceil ::= R^{-1}(\left\{{igaz}\right\}) $
|
||||
|
||||
\item Legyen $I$ egy véges halmaz és legyenek $A_{i},\ i \in I$ tetszőleges véges vagy megszámolható, nem üres halmazok.\\
|
||||
Ekkor az
|
||||
\begin{itemize}
|
||||
\item $A = \underset{i \in I}{\times} A_{i}$ halmazt \emph{\textbf{állapottér}}nek, az
|
||||
\item $A_{i}$ halmazokat pedig \emph{\textbf{típus-érték halmaz}}oknak nevezzük.
|
||||
\end{itemize}
|
||||
\item Az $F \subseteq A \times A$ relációt \emph{\textbf{feladat}}nak nevezünk.\\
|
||||
{\footnotesize A feladat fenti definíciója természetes módon adódik abból, hogy a feladatot egy leképezésnek tekintjük az állapottéren, és az állapottér minden pontjára megmondjuk, hova kell belőle eljutni, ha egyáltalán el kell jutni belőle valahova.}
|
||||
|
||||
\item Az $S \subseteq A \times A^{**}$ relációt \emph{\textbf{program}}nak nevezzük, ha
|
||||
\begin{enumerate}
|
||||
\item $\mathcal{D}_{S}=A$\\
|
||||
{\footnotesize (az állapottér minden pontjához rendel valamit = a program minden pontban csinál valamit)}
|
||||
\item $\forall \alpha \in \mathcal{R}_{S} : \alpha = red(\alpha)$\\
|
||||
red: Egy $A^{**}$-beli sorozat redukáltja. Azonos elemek helyettesítése egy elemmel (distinct).
|
||||
{\footnotesize(az állapot megváltozik, vagy ha mégsem, az az abnormális működés jele)}
|
||||
\item $\forall a \in A : \forall \alpha \in S(A) : |\alpha| \not = 0$ és $\alpha_{1}=a$\\
|
||||
\end{enumerate}
|
||||
\end{itemize}
|
||||
|
||||
\noindent A fenti definícióval a "működés” fogalmát akarjuk absztrakt módon megfogalmazni.
|
||||
|
||||
\subsection*{Típusspecifikáció}
|
||||
|
||||
Először bevezetünk egy olyan fogalmat, amelyet arra használhatunk, hogy pontosan
|
||||
leírjuk a követelményeinket egy típusértékhalmazzal és a rajta végezhető
|
||||
műveletekkel szemben.\\
|
||||
|
||||
\noindent A $\mathcal{T_{S}}=(H,I_{S},\mathbb{F})$ hármast \emph{\textbf{típusspecifikáció}}nak nevezzük, ha
|
||||
teljesülnek rá a következő feltételek:
|
||||
|
||||
\begin{enumerate}
|
||||
\item H az alaphalmaz,
|
||||
|
||||
\item $I_{S} : H \to \mathbb{L} $ a \emph{specifikációs invariáns},
|
||||
|
||||
\item $T_{\mathcal{T}} = \left\{ {(\mathcal{T},x) | x \in \lceil I_{S}} \rceil\right\}$ a \emph{típusértékhalmaz},
|
||||
|
||||
\item $\mathbb{F} = \left\{ {F_{1},F_{2},...,F_{n}}\right\}$ a \emph{típusműveletek specifikációja}, ahol\\
|
||||
$\forall i \in [1..n]: F_{i} \subseteq A_{i} \times A_{i}$, $A_{i} = A_{i_{1}} \times ... \times A_{i_{n_{i}}}$ úgy,\\
|
||||
hogy $\exists j \in [1..n_{i}]: A_{i_{j}} = T_{\mathcal{T}} $
|
||||
\end{enumerate}
|
||||
|
||||
\noindent Az alaphalmaz és az invariáns tulajdonság segítségével azt fogalmazzuk meg, hogy mi az a halmaz, $T_{\mathcal{T}}$, amelynek elemeivel foglalkozni akarunk, míg a feladatok halmazával azt írjuk le, hogy ezekkel az elemekkel milyen műveletek végezhetők el.\\
|
||||
|
||||
\noindent Az állapottér definíciójában szereplő típusértékhalmazok mind ilyen típusspecifikációban
|
||||
vannak definiálva. Az állapottér egy komponensét egy program csak a típusműveleteken keresztül változtathatja meg.
|
||||
|
||||
\newpage
|
||||
\subsection*{Típus}
|
||||
|
||||
\noindent Vizsgáljuk meg, hogy a típusspecifikációban leírt követelményeket hogyan valósítjuk meg.\\
|
||||
|
||||
\noindent A $\mathcal{T}=(\rho,I,\mathbb{S})$ hármast \emph{\textbf{típus}}nak nevezzük, ha
|
||||
|
||||
\begin{enumerate}
|
||||
\item $\rho \subseteq E^{*} \times T$ a reprezentációs függvény (reláció),\\
|
||||
T a típusértékhalmaz,\\
|
||||
E az elemi típusértékhalmaz
|
||||
\item $I : E^{*} \to \mathbb{L} $ típusinvariáns
|
||||
\item $\mathbb{S} = \left\{ {S_{1},S_{2},...,S_{m}}\right\}$, ahol\\
|
||||
$\forall i \in [1..m]: S_{i} \subseteq B_{i} \times B_{i}^{**}$ program, $B_{i} = B_{i_{1}} \times ... \times B_{i_{m_{i}}}$ úgy,\\
|
||||
hogy $\exists j \in [1..m_{i}]: B_{i_{j}} = E^{*}$ és $\not \exists j \in [1..m_{i}]: B_{i_{j}} = T$
|
||||
\end{enumerate}
|
||||
|
||||
\noindent A típus első két komponense az absztrakt típusértékek reprezentációját írja le, míg a programhalmaz a típusműveletek implementációját tartalmazza. Az elemi típusértékhalmaz lehet egy tetszőleges másik típus típusértékhalmaza vagy egy, valamilyen módon definiált legfeljebb megszámolható halmaz.
|
||||
|
||||
\subsection*{Invariáns}
|
||||
|
||||
Az invariáns lényege, hogy ezt a tulajdonságot soha nem sérthetjük meg. Például halmaz típus esetén nem szabad, hogy megsérüljön
|
||||
az az invariáns tulajdonság, hogy egy halmazban egy elem csak egyszer fordulhat elő.
|
||||
|
||||
\subsection*{Reprezentáció}
|
||||
|
||||
Azt, hogy egy típust milyen típusok segítségével, milyen módszerrel, stb., valósítottunk meg, reprezentációnak nevezzük. Például
|
||||
egy verem típust meg lehet valósítani tömb segítségével, de láncolt listával is.\\
|
||||
|
||||
\noindent A reprezentáció a típusspecifikáció típusértékhalmazának leképezése a konkrét típusban, amit a reprezentációs függvény ad meg.
|
||||
|
||||
\subsection*{Implementáció}
|
||||
|
||||
Az implementáció a típusspecifikáció típusműveleteinek megvalósítása a konkrét típus programhalmaza által.\\
|
||||
|
||||
\noindent Az implementáció során a típus megvalósításakor a típusértékhalmaz megadását követően definiálni kell a típusműveleteket. Ahogyan a modellben is, a gyakorlatban is az állapottér változásait a program csak a típusműveleteken keresztül végezheti el.
|
||||
|
||||
\subsection*{Emészthetőbb módon}
|
||||
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\includegraphics[width=0.75\linewidth]{img/adattipus}
|
||||
\caption{Adattípus}
|
||||
\label{fig:adattipus}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\includegraphics[width=0.75\linewidth]{img/adattipus_pelda}
|
||||
\caption{BigNumber példa}
|
||||
\label{fig:adattipus_pelda}
|
||||
\end{figure}
|
||||
\newpage
|
||||
|
||||
\section*{A visszavezetés módszere}
|
||||
|
||||
A programozási feladatok megoldásához különböző programozási mintákat, ún. programozási tételeket használunk fel, ezekre vezetjük vissza
|
||||
a megoldást.\\
|
||||
|
||||
\noindent A visszavezetés lépései:
|
||||
\begin{enumerate}
|
||||
\item Megsejtjük a feladatot megoldó programozási tételt.
|
||||
\item Specifikáljuk a feladatot a programozási tétel jelöléseivel.
|
||||
\item Megadjuk a programozási tétel és a feladat közötti eltéréseket:
|
||||
\begin{itemize}
|
||||
\item intervallum határok: konkrét érték vagy kifejezés (pl. $[1..\frac{n}{2}]$),
|
||||
a típusuk a $\mathbb{Z}$ helyett lehet annak valamely része (pl. $\mathbb{N}$)
|
||||
|
||||
\item $\beta:[m..n] \to \mathbb{L}$ és/vagy $f:[m..n] \to H$ konkrét megfelelői
|
||||
|
||||
\item a H megfelelője a szükséges művelettel
|
||||
\begin{itemize}
|
||||
\item $(H,>)$ helyett pl. $(\mathbb{Z},>)$ vagy $(\mathbb{Z},<)$
|
||||
\item $(H,+)$ helyett pl. $(\mathbb{Z},+)$ vagy $(\mathbb{R},*)$
|
||||
\end{itemize}
|
||||
\item a változók átnevezése
|
||||
\end{itemize}
|
||||
\item A különbségek figyelembe vételével a tétel algoritmusából elkészítjük a konkrét feladatot megoldó algoritmust.
|
||||
\end{enumerate}
|
||||
|
||||
\section*{Felsoroló, a felsoroló típus specifikációja}
|
||||
|
||||
A gyűjtemény (tároló, kollekció, iterált) egy olyan adat (objektum), amely valamilyen elemek tárolására alkalmas.
|
||||
\begin{itemize}
|
||||
\item Ilyenek az összetett szerkezetű, de különösen az iterált szerkezetű típusok értékei: halmaz, sorozat (verem, sor, fájl), fa, gráf
|
||||
|
||||
\item De vannak úgynevezett virtuális gyűjtemények is: pl. egész számok
|
||||
egy intervallumának elemei, vagy egy természetes szám prím-osztói
|
||||
\end{itemize}
|
||||
|
||||
\noindent Egy gyűjtemény feldolgozásán a benne levő elemek
|
||||
feldolgozását értjük.
|
||||
{\color{mygray}
|
||||
\begin{itemize}
|
||||
\item Keressük a halmaz legnagyobb elemét!
|
||||
\item Hány negatív szám van egy számsorozatban?
|
||||
\item Válogassuk ki egy fa leveleiben elhelyezett értékeket!
|
||||
\item Járjuk be az [m .. n] intervallum minden második elemét visszafelé!
|
||||
\item Adjuk össze az n természetes szám prím-osztóit!
|
||||
\end{itemize}
|
||||
}
|
||||
|
||||
\noindent A feldolgozni kívánt elemek felsorolását (bejárását) az alábbi
|
||||
műveletekkel szabványosítjuk:
|
||||
\begin{itemize}
|
||||
\item First() : Rááll a felsorolás első elemére, azaz elkezdi a felsorolást
|
||||
\item Next() : Rááll az elkezdett felsorolás soron következő elemére
|
||||
\item End() : Mutatja, ha a felsorolás végére értünk
|
||||
\item Current() : Visszaadja a felsorolás aktuális elemét\\
|
||||
\end{itemize}
|
||||
|
||||
\noindent Egy felsorolásnak különböző állapotai vannak
|
||||
\begin{itemize}
|
||||
\item indulásra kész
|
||||
\item folyamatban van
|
||||
\item befejeződött\\
|
||||
\end{itemize}
|
||||
|
||||
\noindent A műveletek csak bizonyos állapotokban értelmezhetők (máshol a hatásuk nem definiált). \\
|
||||
|
||||
\noindent A feldolgozó algoritmus garantálja, hogy a felsoroló műveletek mindig megfelelő állapotban kerüljenek végrehajtásra.
|
||||
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\includegraphics[width=0.3\linewidth]{img/felsorolas_stuki}
|
||||
\caption{A felsorolás algoritmusa}
|
||||
\label{fig:felsorolas_stuki}
|
||||
\end{figure}
|
||||
|
||||
A felsorolást sohasem a felsorolni kívánt gyűjtemény, hanem egy külön felsoroló objektum végzi.
|
||||
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\includegraphics[width=0.7\linewidth]{img/felsorolo_speci}
|
||||
\caption{A felsoroló objektum és típusa}
|
||||
\label{fig:felsorolas_stuki}
|
||||
\end{figure}
|
||||
|
||||
\section*{Felsorolóra megfogalmazott programozási tételek}
|
||||
|
||||
A következő szakaszban találhatóak a felsorolókra megfogalmazott programozási tételek progos definíciója, valamint stuktorgramja.
|
||||
|
||||
\includepdf[pages={1-2}]{progtetel_felsorolo.pdf}
|
||||
|
||||
\section*{Nevezetes gyűjtemények felsorolói}
|
||||
|
||||
\subsection*{Intervallum}
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\includegraphics[width=0.75\linewidth]{img/felsorolo_intervallum}
|
||||
\caption{Intervallum felsorolója}
|
||||
\label{fig:felsorolo_intervallum}
|
||||
\end{figure}
|
||||
|
||||
\subsection*{Tömb}
|
||||
Itt két különböző tömbtípus felsorolóját mutatjuk be: az egydimenziós (vektor) és a kétdimenziós tömbét (mátrix).
|
||||
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\includegraphics[width=0.7\linewidth]{img/felsorolo_vektor}
|
||||
\caption{Vektor felsorolója}
|
||||
\label{fig:felsorolo_vektor}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\includegraphics[width=0.7\linewidth]{img/felsorolo_matrix}
|
||||
\caption{Mátrix sorfolytonos felsorolója}
|
||||
\label{fig:felsorolo_matrix}
|
||||
\end{figure}
|
||||
|
||||
\noindent \emph{Megjegyzés}: a felsorolás történhet másképpen is, például vektor esetén végezhetjük a felsorolást visszafelé, a tömb végétől kezdve, vagy mátrixnál alkalmazhatunk pl. oszlopfolytonos bejárást.
|
||||
|
||||
\subsection*{Sorozat}
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\includegraphics[width=0.7\linewidth]{img/felsorolo_sorozat}
|
||||
\caption{Sorozat felsorolója}
|
||||
\label{fig:felsorolo_sorozat}
|
||||
\end{figure}
|
||||
|
||||
\subsection*{Halmaz}
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\includegraphics[width=0.7\linewidth]{img/felsorolo_halmaz}
|
||||
\caption{Halmaz felsorolója}
|
||||
\label{fig:felsorolo_halmaz}
|
||||
\end{figure}
|
||||
|
||||
\subsection*{Szekvenciális inputfájl}
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\includegraphics[width=0.7\linewidth]{img/felsorolo_seqin}
|
||||
\caption{Szekvenciális inputfájl felsorolója}
|
||||
\label{fig:felsorolo_seqin}
|
||||
\end{figure}
|
||||
|
||||
\end{document}
|
After Width: | Height: | Size: 32 KiB |
After Width: | Height: | Size: 4.3 KiB |
After Width: | Height: | Size: 3.0 KiB |
After Width: | Height: | Size: 9.6 KiB |
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 7.3 KiB |
After Width: | Height: | Size: 7.7 KiB |