Automatyka i Robotyka
Automatyka i Robotyka

Kilka pytań i odpowiedzi:

1.

Jedna cegła waży pół cegły plus 1kg. Ile waży cegła?

Odp:

Jeśli oznaczymy wagę cegły jako "x" w kilogramach, to możemy zapisać równanie:

x = 0.5x + 1

Rozwiązując to równanie, możemy wyznaczyć wagę cegły:

x - 0.5x = 1

0.5x = 1

x = 2

Zatem cegła waży 2 kg.

2.

Omówić klasyczne algorytmy przeszukiwania i sortowania, w kontekście poprawności i złożoności obliczeniowej.

Odp:

Przeszukiwanie i sortowanie są fundamentalnymi problemami informatycznymi, które są kluczowe dla wielu algorytmów i aplikacji. W kontekście poprawności i złożoności obliczeniowej, istnieje wiele klasycznych algorytmów przeszukiwania i sortowania, o różnych właściwościach i złożonościach czasowych.

Algorytmy przeszukiwania:

Przeszukiwanie liniowe (linear search): Przeszukuje elementy w porządku liniowym, aż znajdzie szukany element lub osiągnie koniec listy. Poprawność jest oczywista, a złożoność wynosi O(n).

Przeszukiwanie binarne (binary search): Przeszukuje posortowaną listę, dzieląc ją na pół na każdym kroku i porównując wartość środkowego elementu z wartością szukanej. Jeśli szukana wartość jest mniejsza niż wartość środkowego elementu, przeszukiwanie jest kontynuowane w lewej połowie listy, a jeśli jest większa, w prawej połowie. Poprawność wynika z faktu, że lista jest posortowana i złożoność wynosi O(log n).

Algorytmy sortowania:

Sortowanie bąbelkowe (bubble sort): Sortuje elementy w listy porównując sąsiednie pary i zamieniając je, jeśli nie są w odpowiedniej kolejności. Poprawność wynika z faktu, że algorytm porównuje każdą parę elementów i zamienia je w odpowiedniej kolejności. Złożoność wynosi O(n^2).

Sortowanie przez wstawianie (insertion sort): Sortuje elementy w liście przez wstawienie każdego elementu na odpowiednie miejsce w posortowanej liście, zachowując porządek. Poprawność wynika z faktu, że algorytm wstawia każdy element w odpowiednim miejscu, a złożoność wynosi O(n^2).

Sortowanie przez wybieranie (selection sort): Sortuje elementy w liście przez wybieranie najmniejszego elementu i umieszczanie go na początku listy. Poprawność wynika z faktu, że algorytm wybiera najmniejszy element na każdym kroku i umieszcza go w odpowiednim miejscu, a złożoność wynosi O(n^2).

Sortowanie szybkie (quick sort): Sortuje elementy w liście przez wybieranie elementu rozdzielającego, dzieląc listę na mniejsze i większe elementy, a następnie sortując je osobno. Poprawność wynika z faktu, że algorytm dzieli listę na mniejsze i większe elementy i sortuje je osobno, a złożoność wynosi O(n log n) w przeciętnym przypadku i O(n^2) w najgorszym przypadku.

Sortowanie przez scalanie (merge sort): Sortuje elementy w liście przez dzielenie listy na pół

3.
Podać różnicę między strukturą a unią.

Odp:

Struktura (struct) i unia (union) to dwa różne typy danych, które są dostępne w językach programowania.

Struktura to złożony typ danych, który może przechowywać wiele zmiennych różnych typów, zwanych polami. Każde pole ma swój unikalny identyfikator, dzięki czemu można odwoływać się do niego w kodzie. Struktura reprezentuje zestaw informacji, które są logicznie ze sobą powiązane, na przykład informacje o kliencie (imię, nazwisko, adres, numer telefonu itp.) lub dane o produkcie (nazwa, opis, cena, itp.).

Unia, z drugiej strony, jest również typem danych, który może przechowywać różne typy danych. Jednak w przeciwieństwie do struktury, unia przechowuje tylko jeden typ danych w danym momencie. To oznacza, że ​​wszystkie pola unii dzielą ten sam obszar pamięci, co oznacza, że ​​mogą mieć tylko jeden stan w danej chwili. Unia jest zazwyczaj wykorzystywana do oszczędzania pamięci, ponieważ pozwala na przechowywanie różnych typów danych w tym samym miejscu w pamięci.

Podsumowując, struktury służą do grupowania zmiennych różnych typów w celu przechowywania informacji o jednej jednostce, natomiast unie umożliwiają przechowywanie różnych typów danych w tym samym obszarze pamięci, co jest przydatne w celu oszczędzania pamięci.
Janusz Tykocki
Omówić proces transparentnego szyfrowania (TDE).

Proces transparentnego szyfrowania (TDE) to technika szyfrowania danych na poziomie bazy danych, która pozwala na ochronę poufnych informacji bez potrzeby zmiany aplikacji lub procesów biznesowych.

W procesie TDE dane są szyfrowane przed zapisaniem do bazy danych, a następnie deszyfrowane po pobraniu z bazy danych. Proces ten odbywa się automatycznie i nie wymaga interwencji użytkowników. Szyfrowanie i deszyfrowanie danych odbywa się w pamięci, co oznacza, że dane są zawsze szyfrowane, nawet gdy znajdują się w pamięci podręcznej.

TDE zapewnia wysoki poziom bezpieczeństwa dla poufnych danych, ponieważ klucz szyfrowania jest przechowywany poza bazą danych, co uniemożliwia dostęp do danych bezpośrednio z bazy. Szyfrowanie i deszyfrowanie danych odbywa się automatycznie, co oznacza, że proces ten nie wpływa na działanie aplikacji i nie wymaga interwencji użytkowników.

Jednym z głównych zastosowań TDE jest ochrona danych w przypadku utraty lub kradzieży dysków twardych, na których przechowywane są dane. W przypadku utraty lub kradzieży dysku twardego, dane na nim przechowywane pozostają zaszyfrowane i nie są dostępne bez klucza szyfrowania.

Wadą TDE jest wzrost złożoności zarządzania kluczami szyfrowania, ponieważ klucz musi być przechowywany poza bazą danych i wymaga regularnego rotowania w celu zapewnienia bezpieczeństwa danych. Dodatkowo, proces TDE może wpłynąć na wydajność bazy danych ze względu na konieczność szyfrowania i deszyfrowania danych przy każdej operacji odczytu i zapisu.

4.
Wyjaśnić pojęcie zjawiska sublimacji w technice termonadruku.

Odp:

Sublimacja to proces przechodzenia bezpośrednio z fazy stałej do gazowej, bez przechodzenia przez fazę ciekłą. W technice termosublimacji (termosublimacyjnym druku) sublimacja jest wykorzystywana do drukowania obrazów lub tekstu na różnych powierzchniach, takich jak papier, tkaniny, plastik, metal itp.

W druku termosublimacyjnym, tusz sublimacyjny jest podgrzewany i przechodzi bezpośrednio z fazy stałej do gazowej. W fazie gazowej, cząsteczki tuszu łączą się z włóknami materiału, tworząc trwałe i żywe obrazy. W porównaniu z tradycyjnymi metodami drukowania, druk termosublimacyjny jest bardziej trwały i odporny na blaknięcie.

Jednym z przykładów zastosowania techniki termosublimacji jest drukowanie na koszulkach, gdzie obraz jest drukowany na specjalnym papierze sublimacyjnym, a następnie przenoszony na koszulkę poprzez podgrzanie papieru i prasowanie go na powierzchnię koszulki. Ten proces pozwala na uzyskanie trwałego i wysokiej jakości obrazu.

5.

Co to są systemy czasu rzeczywistego? Przedstawić podział systemów czasu rzeczywistego.

Odp:

Systemy czasu rzeczywistego (Real-Time Systems, RTS) to systemy informatyczne, które muszą reagować na sygnały z otoczenia w ściśle określonym czasie. Inaczej mówiąc, RTS muszą przetwarzać dane i podejmować decyzje w czasie rzeczywistym. Przykładami zastosowań RTS mogą być systemy sterowania lotami kosmicznymi, systemy kontrolowania produkcji, czy też systemy sterowania ruchem ulicznym.

Podział systemów czasu rzeczywistego:

Systemy czasu rzeczywistego z twardymi wymaganiami czasowymi (hard real-time systems) – w takim systemie zadania muszą być wykonane w ściśle określonym czasie, inaczej może to prowadzić do poważnych konsekwencji, np. wypadków.
Systemy czasu rzeczywistego z miękkimi wymaganiami czasowymi (soft real-time systems) – zadania muszą być wykonywane w określonym czasie, jednak ich opóźnienie nie jest krytyczne lub ma tylko niewielki wpływ na wynik działania systemu.
Systemy czasu rzeczywistego hybrydowego (firm real-time systems) – stanowią połączenie cech systemów z twardymi i miękkimi wymaganiami czasowymi. System ten ma ściśle określone wymagania czasowe, jednakże ich przekroczenie nie zawsze prowadzi do poważnych konsekwencji.

Wszystkie systemy czasu rzeczywistego charakteryzują się wysokim poziomem niezawodności, determinizmu i precyzji. Aby spełnić wymagania czasowe, często stosuje się specjalistyczne systemy operacyjne i algorytmy planowania zadań.

6.

Omówić mechanizmy RestApi w JavaScript

Odp:

REST API (Representational State Transfer Application Programming Interface) to popularny protokół komunikacyjny, który umożliwia interakcję z serwerem poprzez wymianę zapytań i odpowiedzi w formacie JSON lub XML. W JavaScript istnieją różne sposoby na korzystanie z REST API, ale najpopularniejsze to korzystanie z bibliotek takich jak jQuery, Fetch API czy Axios.

JQuery to popularna biblioteka JavaScript, która umożliwia łatwe korzystanie z REST API. Aby wykonać zapytanie HTTP do REST API, można użyć funkcji ajax() jQuery. Funkcja ta umożliwia wysłanie zapytania typu GET, POST, PUT, DELETE itp. oraz umożliwia ustawienie nagłówków, danych żądania i innych opcji.

Fetch API to nowsze rozwiązanie niż jQuery i dostępne jest w nowszych przeglądarkach. Fetch API umożliwia łatwe korzystanie z REST API za pomocą metody fetch(). Metoda ta umożliwia wysłanie zapytania typu GET, POST, PUT, DELETE itp. oraz umożliwia ustawienie nagłówków, danych żądania i innych opcji. W przeciwieństwie do jQuery, Fetch API zwraca obiekt typu Promise, co oznacza, że można korzystać z mechanizmu async/await, aby obsłużyć odpowiedź z serwera.

Axios to kolejna popularna biblioteka JavaScript do obsługi REST API. Biblioteka ta umożliwia łatwe wysyłanie zapytań HTTP do REST API i umożliwia ustawienie nagłówków, danych żądania i innych opcji. Podobnie jak Fetch API, Axios zwraca obiekt typu Promise, co umożliwia obsługę odpowiedzi z serwera za pomocą mechanizmu async/await.

Podsumowując, w JavaScript istnieją różne sposoby na korzystanie z REST API, ale najczęściej stosowane to jQuery, Fetch API i Axios. Korzystanie z tych bibliotek umożliwia łatwe wysyłanie zapytań HTTP do REST API i obsługę odpowiedzi z serwera.

7.

Wymienić 5 typów pól modeli w Django, omówić jeden z nich.

Odp:

W Django modele reprezentują obiekty w bazie danych. Każdy model składa się z pól, które definiują jakie informacje będą przechowywane. Oto pięć podstawowych typów pól modeli w Django:

Pole tekstowe (CharField): jest to pole, w którym można przechowywać ciągi znaków o ustalonej maksymalnej długości. Przykładowe użycie to przechowywanie nazwy użytkownika, opisu, tytułu itp.

Pole liczbowe (IntegerField): jest to pole, w którym można przechowywać liczby całkowite. Przykładowe użycie to przechowywanie wieku, numeru identyfikacyjnego, liczby punktów itp.

Pole zmiennoprzecinkowe (FloatField): jest to pole, w którym można przechowywać liczby zmiennoprzecinkowe. Przykładowe użycie to przechowywanie wartości pieniężnej, oceny itp.

Pole data i czas (DateTimeField): jest to pole, w którym można przechowywać daty i czas w formacie YYYY-MM-DD HH:MM:SS. Przykładowe użycie to przechowywanie daty urodzenia, daty dodania, daty ostatniej aktualizacji itp.

Pole relacyjne (ForeignKey): jest to pole, które odnosi się do innego modelu w bazie danych. Przykładowe użycie to relacja między użytkownikami a ich postami, gdzie pole ForeignKey odnosi się do modelu użytkownika.

Jednym z bardziej zaawansowanych pól modeli jest pole ManyToManyField, które pozwala na definiowanie relacji wiele-do-wielu między modelami. Pole to pozwala na przechowywanie zestawów wartości z innego modelu i jest używane, gdy wiele instancji modelu jest powiązanych z wieloma instancjami innego modelu. Przykładem takiego użycia może być relacja między tagami a postami, gdzie post może mieć wiele tagów, a tagi mogą być przypisane do wielu postów.

 

8.

Jakie funkcje pełni warstwa łącza danych w sieciowym modelu OSI?

Odp:

Warstwa łącza danych (ang. Data Link Layer) to druga warstwa w sieciowym modelu OSI (Open Systems Interconnection). Pełni ona kilka kluczowych funkcji:

Zapewnienie poprawności przesyłu danych: Warstwa łącza danych odpowiada za przesyłanie ramek między dwoma węzłami w sieci. W tym celu dodaje ona nagłówek i stopkę do każdej ramki, co umożliwia kontrolę błędów podczas przesyłania.

Kontrola dostępu do medium transmisyjnego: Warstwa łącza danych reguluje dostęp do medium transmisyjnego, np. kabla Ethernet. W tym celu wykorzystywane są różne protokoły, takie jak CSMA/CD (Carrier Sense Multiple Access/Collision Detection) w przypadku Ethernet.

Fragmentacja i łączenie pakietów: Warstwa łącza danych może dzielić pakiety na mniejsze fragmenty w celu łatwiejszego przesyłania, a następnie łączyć je ponownie na końcu trasy.

Adresowanie MAC: Warstwa łącza danych wykorzystuje adresy MAC (Media Access Control) do identyfikacji urządzeń w sieci lokalnej.

Wykrywanie i usuwanie pętli w sieci: Warstwa łącza danych może wykrywać i usuwać pętle w sieci, które mogą prowadzić do powstania zatorów w ruchu sieciowym.

Jednym z najważniejszych zadań warstwy łącza danych jest zapewnienie integralności danych podczas transmisji. W tym celu wykorzystywana jest suma kontrolna (CRC), która pozwala na wykrycie i poprawienie błędów przesyłania danych. Suma kontrolna jest dodawana do każdej ramki i jest sprawdzana na końcu trasy, aby upewnić się, że dane zostały przesłane bez błędów.

9.

Omówić koncepcje architektur komputerowych Harvard, Princeton i Harvard-Princeton.

Odp:

Architektury komputerowe to zbiór reguł, standardów i protokołów, które definiują sposób działania komputera i organizację jego podzespołów. W kontekście architektury, możemy wyróżnić trzy koncepcje: architekturę Harvard, architekturę Princeton oraz architekturę Harvard-Princeton.

Architektura Harvard to koncepcja architektury, w której pamięć programu i pamięć danych są od siebie fizycznie oddzielone, co oznacza, że używają różnych łączy do transferu danych. W tym modelu dane są przechowywane w jednej pamięci i są dostępne tylko do odczytu, natomiast program jest przechowywany w drugiej pamięci i jest dostępny do zapisu. Dzięki temu, pamięć programu i pamięć danych mogą działać równolegle, co pozwala na szybsze przetwarzanie danych. Koncepcja ta jest stosowana w mikrokontrolerach, mikroprocesorach oraz niektórych komputerach naukowych.

Z kolei architektura Princeton to koncepcja architektury, w której pamięć programu i pamięć danych są przechowywane w jednej pamięci, a procesor pobiera instrukcje i dane z jednego źródła. W tym modelu, dane i instrukcje są przesyłane przez to samo łącze, co oznacza, że procesor nie może odczytywać instrukcji i danych jednocześnie. Koncepcja ta jest stosowana w większości komputerów PC oraz serwerach.

Ostatnią koncepcją jest architektura Harvard-Princeton, która łączy w sobie elementy obu poprzednich koncepcji. W tej architekturze, pamięć programu i pamięć danych są oddzielone, tak jak w architekturze Harvard, natomiast procesor pobiera instrukcje i dane z jednego źródła, tak jak w architekturze Princeton. Dzięki temu, ta koncepcja architektury łączy zalety obu poprzednich koncepcji i jest stosowana w niektórych systemach wbudowanych, mikrokontrolerach oraz mikroprocesorach.

W skrócie, architektura Harvard wyróżnia się oddzielaniem pamięci programu i danych, architektura Princeton łączy je w jednej pamięci, natomiast architektura Harvard-Princeton łączy elementy obu tych koncepcji. Każda z tych architektur ma swoje zalety i wady, a wybór konkretnej zależy od specyfiki projektowanego systemu i jego wymagań.

10.

Przedstawić matematyczny model perceptronu, omówić modele uczenia sztucznej sieci neuronowej.

Odp:

Perceptron to podstawowy model sztucznej sieci neuronowej o jednej warstwie, składający się z wejść, neuronów, wag oraz funkcji aktywacji. Każde wejście jest mnożone przez odpowiadającą mu wagę, a wynik jest sumowany. Następnie ta suma jest przetwarzana przez funkcję aktywacji, która decyduje, czy neuron zostanie aktywowany i wyśle dalej swoją wartość, czy też nie. Proces ten można opisać matematycznie:

y=f(∑i=1nwixi+b)y=f(∑i=1n​wi​xi​+b)

gdzie:

$y$ to wyjście perceptronu,
$f$ to funkcja aktywacji,
$w_i$ to waga $i$-tego wejścia,
$x_i$ to wartość $i$-tego wejścia,
$b$ to bias.

Perceptron może być uczony za pomocą algorytmu uczenia nadzorowanego, który polega na prezentowaniu mu wektorów uczących, a następnie korygowaniu wag, aby uzyskać pożądane wyjście. Najpopularniejszym algorytmem uczenia perceptronu jest algorytm Rosenblatta.

Modele sztucznych sieci neuronowych są zwykle bardziej skomplikowane niż perceptron i składają się z wielu warstw neuronów, co pozwala na lepsze dopasowanie do danych. Najważniejszymi modelami uczenia sieci neuronowych są:

Sieci jednokierunkowe (feedforward networks) - modele składające się z jednej lub wielu warstw neuronów, w których dane przepływają tylko w jednym kierunku.
Sieci rekurencyjne (recurrent networks) - modele, w których dane mogą przepływać w obie strony, a neurony mają połączenia zwrotne, dzięki czemu sieć może pamiętać wcześniejsze stany.
Sieci konwolucyjne (convolutional networks) - modele stworzone do przetwarzania danych przestrzennych, takich jak obrazy, wykorzystujące operacje konwolucji, dzięki czemu sieć może wykrywać lokalne wzorce.
Sieci autoenkoderów (autoencoder networks) - modele, które próbują odwzorować dane wejściowe na wyjście, wykorzystując ograniczoną liczbę neuronów w warstwie ukrytej, co prowadzi do wydobycia istotnych cech danych.
Sieci GAN (Generative Adversarial Networks) - modele składające się z dwóch sieci neuronowych, generatora i dyskryminatora, które uczą się razem, przy czym generator stara się tworzyć fałszywe dane, a dyskryminator stara się odróżnić prawdziwe dane od fałszywych. Proces ten prowadzi do generowania coraz bardziej realistycznych danych.

Wszystkie modele sztucznych sieci neuronowych opierają się na podobnej architekturze.

Modele uczenia sztucznej sieci neuronowej dzielimy zwykle na trzy rodzaje: uczenie nadzorowane, uczenie nienadzorowane i uczenie ze wzmocnieniem.

Uczenie nadzorowane polega na dostarczeniu algorytmowi przykładów wejść i pożądanych wyjść. Celem jest nauczenie sieci, aby ta potrafiła dokonywać odpowiedniego przyporządkowania dla nowych, nieznanych wcześniej danych. W przypadku sieci neuronowych, uczenie nadzorowane polega na modyfikacji wag pomiędzy neuronami w celu minimalizacji błędu na wyjściu sieci.

Uczenie nienadzorowane polega na przeprowadzeniu analizy statystycznej danych wejściowych w celu wykrycia wzorców lub struktur ukrytych w danych bez wykorzystania pożądanych wyjść. Typowymi zastosowaniami uczenia nienadzorowanego są klastrowanie, redukcja wymiarowości danych i detekcja anomalii.

Uczenie ze wzmocnieniem polega na uczeniu sieci na podstawie nagród i kar za podjęte działania. Podobnie jak w przypadku uczenia nienadzorowanego, sieć sama musi odkryć, jakie akcje prowadzą do zwiększenia nagrody. Uczenie ze wzmocnieniem jest często stosowane w dziedzinie uczenia maszynowego, zwłaszcza w kontekście sztucznej inteligencji i uczenia przez wzmacnianie.

Matematyczny model perceptronu jest relatywnie prosty - jest to sieć neuronowa z jednym neuronem, który przyjmuje wektor wejściowy o długości n i wylicza wartość wyjściową na podstawie sumy ważonej tych wartości wejściowych, z dodaną stałą bias. W modelu tym wagi są modyfikowane na podstawie błędu predykcji, czyli różnicy między oczekiwaną a rzeczywistą wartością wyjściową. Proces ten jest iteracyjny i powtarza się do momentu, gdy błąd osiąga pożądaną wartość lub proces uczenia jest zakończony.

11.

Omówić metody reprezentacji wiedzy z wykorzystaniem zbiorów rozmytych, podać przykłady optymalizacji, predykacji itp.

Odp:

Zbiory rozmyte to narzędzie służące do reprezentacji i operowania na nieprecyzyjnych lub niestałych wartościach. Metoda ta jest szczególnie przydatna w sytuacjach, gdy posiadamy dane, które nie są dokładnie zdefiniowane, np. w przypadku oceny jakości produktu, stopnia zadowolenia klienta czy też poziomu ryzyka w inwestycji.

W ramach zbiorów rozmytych posługujemy się tzw. funkcją przynależności, która określa stopień przynależności danej wartości do danego zbioru. Funkcja ta przyjmuje wartości z przedziału [0,1], gdzie 0 oznacza brak przynależności, a 1 - pełną przynależność.

Wśród metod reprezentacji wiedzy z wykorzystaniem zbiorów rozmytych wyróżniamy między innymi optymalizację, predykcję oraz klasyfikację.

Optymalizacja polega na wyznaczaniu wartości argumentów funkcji, które minimalizują lub maksymalizują wartość tej funkcji. W tym przypadku stosuje się różne algorytmy optymalizacyjne, takie jak algorytm roju cząstek czy algorytm genetyczny, które pozwalają na efektywne wyszukiwanie optymalnych wartości.

Predykcja polega na prognozowaniu przyszłych wartości na podstawie danych historycznych. W tym przypadku stosujemy algorytmy takie jak sieci neuronowe lub logika rozmyta, które pozwalają na wyznaczenie przewidywanego kierunku zmian i trendów.

Klasyfikacja polega na przypisaniu obiektu do jednej z klas na podstawie jego właściwości. W tym przypadku wykorzystuje się algorytmy uczenia maszynowego, takie jak drzewa decyzyjne lub sieci neuronowe, które pozwalają na skuteczną klasyfikację obiektów.

Przykłady zastosowania zbiorów rozmytych to między innymi systemy rekomendacyjne, ocena jakości produktów lub usług, modelowanie ryzyka inwestycyjnego, sterowanie procesami przemysłowymi czy też diagnostyka medyczna.