Co-simulation using Python and Simulink
Viheriäranta, Niilo (2024)
Viheriäranta, Niilo
2024
Tekniikan ja luonnontieteiden kandidaattiohjelma - Bachelor's Programme in Engineering and Natural Sciences
Tekniikan ja luonnontieteiden tiedekunta - Faculty of Engineering and Natural Sciences
This publication is copyrighted. You may download, display and print it for Your own personal use. Commercial use is prohibited.
Hyväksymispäivämäärä
2024-02-27
Julkaisun pysyvä osoite on
https://urn.fi/URN:NBN:fi:tuni-202402022076
https://urn.fi/URN:NBN:fi:tuni-202402022076
Tiivistelmä
Co-simulation is a methodology of computer analysis and simulation. This technique involves different kinds of specialized simulation programs interacting and working simultaneously to reach more comprehensive results regarding complex systems. It is an approach that is very beneficial for multidisciplinary experiments that include various subsystems of a model that require distinct areas of expertise or simulation approaches.
This thesis studies co-simulation using Python and Simulink. The thesis starts with a short literature review where different methods of communication between Python and Simulink are discovered and their suitability for co-simulation is discussed. In addition, some prior research on the topic is presented. Co-simulation using these two platforms is quite a new technology so the research available was limited. Out of the methods discovered in the literature review four were chosen as most suitable for co-simulation. The chosen methods were MATLAB Engine API, Python code in Simulink, TCP/IP (Transmission control protocol/internet protocol), and extracting a model from Simulink to C-code and embedding it in Python.
Each method was used to perform a simulation and the process of conducting the simulation was explained. For the MATLAB Engine API, a computational cost experiment was conducted because it could be used in two different ways. The results showed that one way is more suitable for simple simulations and the other for more complex simulations. The other methods were found to have their own benefits and limitations as well. Embedded C-code was very fast but only works for discrete systems. Python classes can be used to control Simulink models, but the Simulation needs to be run from a script and requires precise setup steps. TCP/IP is the most suitable for parallel processing but could prove difficult to use with very complex data. Finally, co-simulation was used to train a reinforcement learning agent to play a dice game. The experiment was successful, and it showcased the possible real-life utility of co-simulation. Yhteissimulaatio on tietokoneanalyysin tekniikka, jossa kahta tai useampaa simulaatioalustaa hyödynnetään yhtaikaisesti monimutkaisten ongelmien ratkaisemiseen. Sen avulla pystytään saavuttamaan kattavampia tuloksia ongelmissa, joissa systeemin eri osat vaativat erilaisia mallinnuskyvykkyyksiä. Yhteissimulaation hyötyjä ovat esimerkiksi laajemmat ratkaisijavaihtoehdot, rinnakkaisprosessointi ja immateriaalioikeuksien suojaaminen.
Tässä kandidaatintyössä tutkitaan yhteissimulaation toteuttamista Pythonin ja Simulinkin avulla. Alussa on toteutettu lyhyt kirjallisuuskatsaus, jossa ensin tutkitaan erilaisia tapoja siirtää dataa sekä toiminnallisuutta alustojen välillä ja sitten etsitään aiempaa tutkimusta yhteisimulaatiosta. Koska yhteissimulaatio näitä kahta alustaa käyttäen on melko uusi aihe, tutkimuksia löytyi suhteellisen vähän. Kirjallisuuskatsauksessa löydetyistä metodeista valittiin neljä parhaimmin yhteissimulaatioon sopivinta tapaa tutkittavaksi. Nämä ovat Python koodin käyttö Simulinkissä, MATLAB Engine API, mallin muuttaminen C-koodiksi ja sen sulauttaminen Pythoniin sekä TCP/IP-yhteyden (Transmission control protocol / internet protocol) käyttäminen.
Jokaisen tavan toteuttaminen esiteltiin ja niitä kaikkia käytettiin simulaation ajamiseen. Lisäksi MATLAB Engine API:lla pystyi toteuttamaan simulaation kahdella eri tyylillä, joten tyylien resurssivaatimukset mitattiin ja data esiteltiin. Huomattiin, että toinen tyyli sopii paremmin lyhyisiin yksinkertaisiin simulaatioihin ja toinen taas paremmin pidempiin monimutkaisiin simulaatioihin. Muistakin tavoista huomattiin erilaisia hyötyjä ja haittoja. Sulautettu C-koodi on nopein, mutta se toimii vain diskreeteillä systeemeillä. Python-koodia pystytään käyttämään Simulinkissä niin että molempien hyödyt saadaan käyttöön, mutta valmistelut vaativat tarkkoja määreitä. TCP/IP-yhteys sopii parhaiten rinnakkaisprosessointiin mutta monimutkaisen datan siirtäminen voi muuttua vaikeaksi. Lopuksi esitellään käytännön esimerkki, jossa vahvistusoppimisen avulla koulutetaan toimija pelaamaan erästä noppapeliä mahdollisimman tehokkaasti. Toimija oli tehokkaampi kuin satunnaisesti valitseva toimija, mikä osoitti yhteissimulaation hyödyllisyyden esimerkiksi koneoppimisessa.
This thesis studies co-simulation using Python and Simulink. The thesis starts with a short literature review where different methods of communication between Python and Simulink are discovered and their suitability for co-simulation is discussed. In addition, some prior research on the topic is presented. Co-simulation using these two platforms is quite a new technology so the research available was limited. Out of the methods discovered in the literature review four were chosen as most suitable for co-simulation. The chosen methods were MATLAB Engine API, Python code in Simulink, TCP/IP (Transmission control protocol/internet protocol), and extracting a model from Simulink to C-code and embedding it in Python.
Each method was used to perform a simulation and the process of conducting the simulation was explained. For the MATLAB Engine API, a computational cost experiment was conducted because it could be used in two different ways. The results showed that one way is more suitable for simple simulations and the other for more complex simulations. The other methods were found to have their own benefits and limitations as well. Embedded C-code was very fast but only works for discrete systems. Python classes can be used to control Simulink models, but the Simulation needs to be run from a script and requires precise setup steps. TCP/IP is the most suitable for parallel processing but could prove difficult to use with very complex data. Finally, co-simulation was used to train a reinforcement learning agent to play a dice game. The experiment was successful, and it showcased the possible real-life utility of co-simulation.
Tässä kandidaatintyössä tutkitaan yhteissimulaation toteuttamista Pythonin ja Simulinkin avulla. Alussa on toteutettu lyhyt kirjallisuuskatsaus, jossa ensin tutkitaan erilaisia tapoja siirtää dataa sekä toiminnallisuutta alustojen välillä ja sitten etsitään aiempaa tutkimusta yhteisimulaatiosta. Koska yhteissimulaatio näitä kahta alustaa käyttäen on melko uusi aihe, tutkimuksia löytyi suhteellisen vähän. Kirjallisuuskatsauksessa löydetyistä metodeista valittiin neljä parhaimmin yhteissimulaatioon sopivinta tapaa tutkittavaksi. Nämä ovat Python koodin käyttö Simulinkissä, MATLAB Engine API, mallin muuttaminen C-koodiksi ja sen sulauttaminen Pythoniin sekä TCP/IP-yhteyden (Transmission control protocol / internet protocol) käyttäminen.
Jokaisen tavan toteuttaminen esiteltiin ja niitä kaikkia käytettiin simulaation ajamiseen. Lisäksi MATLAB Engine API:lla pystyi toteuttamaan simulaation kahdella eri tyylillä, joten tyylien resurssivaatimukset mitattiin ja data esiteltiin. Huomattiin, että toinen tyyli sopii paremmin lyhyisiin yksinkertaisiin simulaatioihin ja toinen taas paremmin pidempiin monimutkaisiin simulaatioihin. Muistakin tavoista huomattiin erilaisia hyötyjä ja haittoja. Sulautettu C-koodi on nopein, mutta se toimii vain diskreeteillä systeemeillä. Python-koodia pystytään käyttämään Simulinkissä niin että molempien hyödyt saadaan käyttöön, mutta valmistelut vaativat tarkkoja määreitä. TCP/IP-yhteys sopii parhaiten rinnakkaisprosessointiin mutta monimutkaisen datan siirtäminen voi muuttua vaikeaksi. Lopuksi esitellään käytännön esimerkki, jossa vahvistusoppimisen avulla koulutetaan toimija pelaamaan erästä noppapeliä mahdollisimman tehokkaasti. Toimija oli tehokkaampi kuin satunnaisesti valitseva toimija, mikä osoitti yhteissimulaation hyödyllisyyden esimerkiksi koneoppimisessa.
Kokoelmat
- Kandidaatintutkielmat [8683]