1
0
Fork 0

Upload files to ''

This commit is contained in:
Torma Kristóf 2021-01-04 00:47:57 +01:00
parent 63aecfc957
commit a916a1fce2
1 changed files with 214 additions and 0 deletions

View File

@ -0,0 +1,214 @@
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Mérnöki modellalkotás vizsga\n",
"**Optikai hiba lokalizálás**\n",
"\n",
"_Torma Kristóf\tY8O353_\n",
"## Feladat\n",
"Adjon meg egy olyan bináris mátrixot, amelyiknek kevesebb oszlopa van, mint sora, és bármely legfeljebb 2 sor (bitenkénti) VAGY vektora egyedi. (Nem triviális 2-separable hibakód) Válaszodat indokold, és mondj olyan link hibákat, amelyeket a fenti m-trail mátrixszal azonosítani tudunk!\n",
"## Megoldás\n",
"A feladat megoldását a sorok és oszlopok számának meghatározásával kezdtem. A következő kifejezésekben a mátrix oszlopainak számát ```n```-nel jelöltem.\n",
"### Előkészületek\n",
"Mivel a bitenkénti ```VAGY``` műveletet minden sor esetében elvégezzük önmagán, ezért ```n+1``` sorú mátrix esetében legalább ```n+1``` vektort állítunk össze. Emellett mindegyik sorát a mátrixnak bitenként ```VAGY```-olunk minden másik sorával. Ez\n",
"\\begin{equation*}\n",
"\\frac{\\ n\\ast\\left(n+1\\right)}{2}\n",
"\\end{equation*}\n",
"darab vektort jelent. Tehát összesen\n",
"\\begin{equation*}\n",
"\\frac{\\ n\\ast\\left(n+1\\right)}{2}\\ +\\ n\\ +\\ 1\n",
"\\end{equation*}\n",
"darabszámú vektor fog keletkezni.\n",
"Triviális, hogy a keletkezett vektorok egyediségének szükséges feltétele az\n",
"\\begin{equation*}\n",
"\\frac{\\ n\\ast\\left(n+1\\right)}{2}\\ +\\ n\\ +\\ 1\\ <=\\ 2^n\n",
"\\end{equation*}\n",
"egyenlőtlenség teljesülése, hiszen n hosszú bináris vektorból\n",
"\\begin{equation*}\n",
"2^n\n",
"\\end{equation*}\n",
"darab van.\n",
"A mátrixot úgy alkottam meg, hogy a csupa nulla vektor és csupa egyes vektorokat ne használjam, ugyanis előbbi a hibátlan állapotot jelzi, utóbbi pedig minden másik vektorra VAGY-olva a csupa egyes vektort eredményezi, ezzel a feladat nem teljesülne.\n",
"\n",
"Az egyenlőtlenség legkisebb pozitív egész megoldása a négy (lásd lenti kód)."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"n = 4\n",
"\n",
"nsqrd = n ** 2\n",
"\n",
"print(f\"n^2: {nsqrd}\")\n",
"\n",
"numofrows = n + 1\n",
"\n",
"numofvectors = (((numofrows - 1) * (numofrows)) / 2) + numofrows\n",
"\n",
"print(f\"Vector count: {numofvectors}\")\n",
"\n",
"print(f\"Required condition satisfied: {numofvectors <= nsqrd}\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Mátrix előállítása\n",
"A szükséges feltétel segítségével megállapíthattuk, hogy legalább négy oszlopos mátrixra lesz szükségünk. Négy bit viszont a feladat többi feltételét is figyelembe véve nem elengendő.\n",
"\n",
"Mivel a feladatban nem szerepel, hogy a legkisebb ilyen mátrixot kell megadni, ezért kezdetben hét oszloppal és nyolc sorral próbálkoztam ilyen mátrixot keresni. A mátrixot soronként készítettem el, minden sort úgy adtam hozzá a métrixomhoz, hogy a bitenkénti ```VAGY```-olással generált vektorok egyediek legyenek.\n",
"\n",
"Így kaptam meg az alábbi mátrixot:\n",
"\n",
"\\begin{equation}\n",
"\\begin{vmatrix}\n",
"1&0&0&0&0&1&0\\\\\n",
"0&1&0&0&1&0&0\\\\\n",
"0&0&1&1&0&0&0\\\\\n",
"0&0&1&0&0&1&0\\\\\n",
"1&0&0&0&0&0&1\\\\\n",
"0&1&1&0&0&0&0\\\\\n",
"1&0&0&0&1&0&0\\\\\n",
"0&0&0&1&0&0&1\n",
"\\end{vmatrix}\n",
"\\end{equation}\n",
"\n",
"Ennek helyességét az alábbi Python kóddal ellenőriztem:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"!pip3 install -q numpy networkx matplotlib"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"scrolled": true
},
"outputs": [],
"source": [
"import numpy\n",
"\n",
"\n",
"mtx = \\\n",
"[\n",
" [1,0,0,0,0,1,0],\n",
" [0,1,0,0,1,0,0],\n",
" [0,0,1,1,0,0,0],\n",
" [0,0,1,0,0,1,0],\n",
" [1,0,0,0,0,0,1],\n",
" [0,1,1,0,0,0,0],\n",
" [1,0,0,0,1,0,0],\n",
" [0,0,0,1,0,0,1]\n",
"]\n",
"\n",
"vectors = [numpy.bitwise_or(mtx[i], mtx[j]) for i in range(len(mtx)) for j in range(i, len(mtx)) ]\n",
"\n",
"n = 7\n",
"nsqrd = n ** 2\n",
"numofrows = n + 1\n",
"numofvectors = (((numofrows - 1) * (numofrows)) / 2) + numofrows\n",
"\n",
"print(f\"All generated vectors in the Matrix are unique: \"\n",
" f\"{((len(vectors) == numofvectors) and (len(vectors) <= nsqrd)) and (len(vectors) == len(numpy.unique(vectors, axis=0)))}\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Gráf előállítása\n",
"A mátrix elkészítése után láttam neki a az arra illeszkedő gráf elkészítésének. Egy olyan gráfot szerettem volna elkészíteni, aminek nyolc éle van és abban hét monitorozó út található.\n",
"\n",
"A gráfh hibakódtáblájával bármely egy vagy két link meghibásodása detektálható, hiszen a mátrix bármely két sorának bitenkénti ```VAGY```-olása egyedi vektort eredményez.\n",
"\n",
"A gráfhoz tartozó hibakódtábla:\n",
"\n",
"\\begin{array}{l|lllllll}\n",
"&t_1&t_2&t_3&t_4&t_5&t_6&t_7\\\\ \\hline\n",
"A-B&1&0&0&0&0&1&0\\\\\n",
"C-D&0&1&0&0&1&0&0\\\\\n",
"D-B&0&0&1&1&0&0&0\\\\\n",
"E-D&0&0&1&0&0&1&0\\\\\n",
"A-D&1&0&0&0&0&0&1\\\\\n",
"C-E&0&1&1&0&0&0&0\\\\\n",
"A-B&1&0&0&0&1&0&0\\\\\n",
"E-F&0&0&0&1&0&0&1\n",
"\\end{array}\n",
"\n",
"A gráfot kirajzoló kód:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import networkx\n",
"\n",
"G = networkx.Graph()\n",
"G.add_edges_from([(\"A\", \"B\"), (\"A\", \"C\"), (\"A\", \"D\"), (\"C\", \"D\"), (\"B\", \"D\"), (\"D\", \"E\"), (\"C\", \"E\"), (\"E\", \"F\")])\n",
"\n",
"node_positions = {\"A\": (0., 1.), \"B\": (1., 1.), \"C\": (0., 0.), \"D\": (1., 0.), \"E\": (0.5, -1.3), \"F\": (1., -1.3)}\n",
"\n",
"networkx.draw_networkx(G, pos=nx.rescale_layout_dict(node_positions), font_color=\"white\")\n",
"\n",
"edge_labels = \\\n",
"{ \n",
" ('A', 'B'): \"1000010\",\n",
" ('A', 'D'): \"1000001\",\n",
" ('C', 'A'): \"1000100\",\n",
" ('C', 'D'): \"0100100\",\n",
" ('D', 'B'): \"0011000\",\n",
" ('D', 'E'): \"0010010\",\n",
" ('C', 'E'): \"0110000\",\n",
" ('E', 'F'): \"0001001\"\n",
"}\n",
"el = nx.draw_networkx_edge_labels(G, pos=nx.rescale_layout_dict(node_positions), edge_labels=edge_labels)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.6"
}
},
"nbformat": 4,
"nbformat_minor": 4
}