Upload files to ''
This commit is contained in:
parent
63aecfc957
commit
a916a1fce2
214
MernokiModellalkotasVizsga.ipynb
Normal file
214
MernokiModellalkotasVizsga.ipynb
Normal 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
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user