Qhull Algorithm: Unleashing Precision in Convex Hull Computation

Qhull-algoritmin hallitseminen: Korkealaatuinen ratkaisu konveksille kuorille, Delaunay-triangulaatioille ja Voronoi-kaavioille. Opi, kuinka Qhull tukee kestävää geometrista ratkaisua laskennallisessa geometriassa.

Johdanto Qhull-algoritmiin

Qhull-algoritmi on laajasti käytetty laskennallisen geometrian työkalu, joka on suunniteltu laskemaan konveksia kuoria, Delaunay-triangulaatioita, Voronoi-kaavioita ja niihin liittyviä rakenteita monidimensionaaliselle pistesarjalle. Algoritmi kehitettiin 1990-luvun alussa, ja Qhull toteuttaa ”Quickhull”-algoritmin, joka on peruskonseptiltaan samanlainen kuin tunnettu Quicksort-algoritmi, hyödyntäen jakaviin ja valloittaviin menetelmiin geometristen tietojen tehokkaassa käsittelyssä. Algoritmia arvostetaan erityisesti sen luotettavuuden ja kyvyn vuoksi käsitellä korkeamittaisia tietojoukkoja, mikä tekee siitä standardin sekä akateemisessa tutkimuksessa että käytännön sovelluksissa, kuten tietokonegrafiikassa, maantieteellisissä tietojärjestelmissä ja tieteellisessä laskennassa.

Qhull toimii etsimällä rekursiivisesti konveksin kuoren pinta-alat, jotka erottavat syötetyt pisteet, ja rakentaa kuorirakenteen vähitellen. Sen toteutus tukee syötteitä kahdessa tai useammassa ulottuvuudessa ja voi käsitellä degeneraatiotilanteita, kuten kollineaarisia tai koplanaarisia pisteitä, erityisellä tarkkuudella ja virheenkäsittelyllä. Ohjelmisto on jaettu avoimen lähdekoodin muodossa ja saatavilla useilla ohjelmointikielillä, sisältäen komentorivikäyttöliittymän ja kirjaston API:ita integroimiseen suurempiin järjestelmiin. Qhullin tehokkuus ja luotettavuus ovat johtaneet sen hyväksymiseen lukuisiin ohjelmistopaketteihin ja kirjastoihin, kuten MATLAB, R ja SciPy, joissa se toimii geometrisen laskennan perustana.

Lisätietoja teknisistä tiedoista ja pääsy lähdekoodiin löytyy virallisesta Qhull-dokumentaatiosta ja jakelusta. Algoritmin teoreettisia perusteita ja käytännön näkökulmia käsitellään myös sen alkuperäisten kirjoittajien julkaisuissa, jotka ovat saatavilla Qhullin Quickhull-algoritmi-sivulta.

Perusperiaatteet ja matemaattiset perusteet

Qhull-algoritmi perustuu keskeisimpiin laskennallisen geometrian periaatteisiin, erityisesti konveksien kuorien, Delaunay-triangulaatioiden ja Voronoi-kaavioiden rakentamiseen monidimensionaalisissa tiloissa. Perusperiaatteensa mukaan Qhull käyttää beneath-beyond-menetelmää, joka on kasvava lähestymistapa, joka lisää pisteitä systemaattisesti laajenevaan konveksiin kuoreen ja päivittää rakennetta tunnistamalla ja korvaamalla näkyvät pinnat. Tämä menetelmä varmistaa, että syntyvä polytooppi pysyy konveksina jokaisessa vaiheessa, hyödyntäen konveksisuuden ja affiinien riippumattomuuden matemaattisia ominaisuuksia.

Qhullin keskeinen matemaattinen perusta on konveksien kuorien käsite, jotka ovat pienimmät konvekset joukot, jotka sisältävät annetun pistesarjan. Algoritmi toimii mielivaltaisissa ulottuvuuksissa, nojaten lineaarialgebran tekniikoihin, kuten orientaatio-testit ja determinanttien laskeminen, määrittääkseen pisteiden ja pintojen suhteelliset sijainnit. Qhull käyttää myös pintojen naapuruuskaavioita hallitakseen tehokkaasti polytoopin kasvojen välisiä suhteita, mikä on tärkeää kuoren päivittämisessä, kun uusia pisteitä lisätään.

Toinen tärkeä näkökulma on numeerisen tarkkuuden ja degeneraatiotilanteiden käsittely. Qhull sisältää strategioita pyöristysvirheiden ja lähes koplanaaristen pisteiden käsittelemiseksi, mikä varmistaa luotettavuuden käytännön sovelluksissa. Algoritmin suunnittelu mahdollistaa sen laskemisen ei vain konveksia kuoria, vaan myös siihen liittyviä rakenteita, kuten puolivuorokausileikkausten ja Voronoi-kaavioiden laskemista, hyödyntämällä geometrisiä dualisuuksia. Nämä matemaattiset perusteet tekevät Qhullista monipuolisen ja luotettavan työkalun korkeamittaisiin geometristen laskentatehtäviin, kuten Qhullin dokumentaatiossa ja American Mathematical Society:n tarjoamassa teoreettisessa taustassa on yksityiskohtia.

Qhullin keskeiset ominaisuudet ja kyvyt

Qhull on kestävä laskennallisen geometrian ohjelmisto, joka toteuttaa Quickhull-algoritmin laskemiseen konveksia kuoria, Delaunay-triangulaatioita, Voronoi-kaavioita ja puolivuorokausileikkauksia monidimensionaaliselle pistesarjalle. Yksi sen keskeisistä ominaisuuksista on kyky käsitellä syöttötietoja kahdesta yhdeksään ulottuvuuteen, mikä tekee siitä erittäin monipuolisen useisiin tieteellisiin ja insinööritieteellisiin sovelluksiin. Qhullia arvostetaan erityisesti sen tarkkuuden ja tehokkuuden vuoksi, sillä se käyttää tarkkaa aritmetiikkaa välttääkseen yleisiä numeerisia virheitä geometristen laskentojen yhteydessä.

Qhullin merkittävä kyky on sen tuki sekä konveksien kuorien että Delaunay-triangulaatioiden laskennalle, jotka ovat perustoimintoja laskennallisessa geometriassa. Ohjelmisto voi myös tuottaa Voronoi-kaavioita, joita käytetään laajasti tilastoanalyysissä ja lähimmän naapurin kyselyissä. Qhullin puolivuorokausileikkausominaisuus mahdollistaa käyttäjien laskea puolivuorokausien leikkauksia, mikä on oleellista lineaarisessa ohjelmoinnissa ja optimointiongelmissa.

Qhull tarjoaa laajat tulostusvaihtoehdot, mukaan lukien yksityiskohtaiset pinta-, kärki- ja harjainformaatiot sekä graafisen tulostuksen visualisointia varten. Se tukee etenemistä vaiheittain, mikä mahdollistaa käyttäjien lisätä pisteitä dynaamisesti ja päivittää kuoren tehokkaasti. Ohjelmisto on suunniteltu kestämään degeneraatiotilanteita, kuten kollineaariset tai koplanaariset pisteet, ja se sisältää vaihtoehtoja tarkkuusongelmien ja syöttötarkistusten käsittelyyn.

Qhull on jaettu avointa lähdekoodia olevalta ohjelmistolta ja se on laajalti integroitunut muihin laskennallisen geometrian kirjastoihin ja sovelluksiin. Sen kattava dokumentaatio ja aktiivinen kehitys tekevät siitä standardi työkalun alalla, kuten Qhull.org osoittaa ja viittaa laskennallisen geometrian tutkimuksessa CGAL:n kautta.

Sovellukset laskennallisessa geometriassa ja sen ulkopuolella

Qhull-algoritmi on kulmakivi laskennallisessa geometriassa, pääasiassa käytetty konveksien kuorien, Delaunay-triangulaatioiden ja Voronoi-kaavioiden laskemisessa monidimensionaalisissa tiloissa. Sen kestävä toteutus ja monipuolisuus ovat tehneet siitä standardityökalun sekä akateemisessa tutkimuksessa että teollisuuden sovelluksissa. Laskennallisessa geometriassa Qhullia käytetään usein muotoanalyysiin, törmäystunnistukseen ja verkkojen generointiin, joissa konveksien kuorien tarkan määrittämisen tarve on oleellinen mallintamis- ja simulaatiotehtävissä. Esimerkiksi tietokonegrafiikassa Qhull auttaa kohteiden rajausten tunnistamisessa ja pinnan palauttamisessa, mahdollistaen tehokkaan renderöinnin ja fysiikan simulaatiot.

Perinteisen laskennallisen geometrian ulkopuolella Qhull löytää sovelluksia kentillä, kuten koneoppimisessa, datan analysoinnissa ja robotiikassa. Koneoppimisessa konveksia kuoria käytetään poikkeamien tunnistamiseen ja tukivektorikoneiden (SVM) optimointiin, missä kuori määrittää dataklusterien rajoja. Robotiikassa Qhull auttaa liikkumissuunnittelussa ja esteiden välttämisessä mallintamalla navigoitavaa tilaa konveksina polytooppeina. Lisäksi maantieteellisissä tietojärjestelmissä (GIS) Qhull tukee tilastollista analyysiä luomalla Voronoi-kaavioita resurssien jakeluun ja aluekartoittamiseen.

Algoritmin avoimen lähdekoodin toteutus, jota hallinnoi Qhull, on laajalti integroitu tieteellisen laskennan kirjastoihin, kuten SciPy ja MATLAB, mikä laajentaa sen ulottuvuutta. Sen kyky käsitellä korkeita ulottuvuuksia ja degeneraatiotapauksia tekee siitä korvaamattoman tutkijoille ja insinööreille, jotka käsittelevät monimutkaisia geometristen ongelmia eri alueilla.

Askel askeleelta -katsaus: Kuinka Qhull toimii

Qhull-algoritmi on laajasti käytetty laskennallisen geometrian työkalu konveksisten kuorien, Delaunay-triangulaatioiden ja Voronoi-kaavioiden rakentamiseksi useissa ulottuvuuksissa. Sen toiminta perustuu ”Quickhull”-lähestymistapaan, joka peruskonseptiltaan on samanlainen kuin QuickSort-algoritmi. Tässä on askel askeleelta -katsaus siitä, kuinka Qhull toimii:

  • Alustaminen: Qhull aloittaa tunnistamalla joukon ääripisteitä, jotka muodostavat simplex-muodon (esim. kolmion 2D:ssä, tetraedrin 3D:ssä), joka kattaa syötettyjen tietojen. Tämä simplex toimii alkuperäisenä kuorena.
  • Osiointi: Algoritmi jakaa jäljelle jäävät pisteet alaryhmiin, jotka liittyvät kuhunkin nykyisen kuoren pintaan (kasvo). Jokaisessa alaryhmässä on pisteitä, jotka sijaitsevat vastaavan pinnan ulkopuolella.
  • Pinnan laajentaminen: Jokaiselle pinnalle, jossa on ulkopisteitä, Qhull valitsee kauimpana pinnasta olevan pisteen. Tämä piste tulee uudeksi huippupisteeksi kuoressa, ja algoritmi rakentaa uusia pinnoituksia yhdistäen tämän pisteen näkyviin kuoren reunoihin.
  • Konfliktin ratkaisu: Qhull ylläpitää konfliktikaaviota, jolla seurataan tehokkaasti, mitkä pisteet ovat ulkopuolella mitkä pinnat. Kun uusia pintoja luodaan, konfliktikaaviota päivitetään uusien suhteiden heijastamiseksi.
  • Rekursio: Prosessi toistuu rekursiivisesti jokaiselle uudelle pinnalle ulkopisteiden kanssa, laajentaen kuorta, kunnes kaikki pisteet ovat joko kuoren sisällä tai sen päällä.
  • Päätös: Algoritmi päättyy, kun ulkopisteitä ei enää ole, mikä johtaa lopulliseen konveksiin kuoreen tai siihen liittyvään rakenteeseen.

Qhullin tehokkuus ja kestävyys johtuvat sen huolellisesta hallinnasta geometristen degeneraatioiden ja tarkan aritmetiikan käytöstä. Lisätietoja teknisistä yksityiskohdista löytyy Qhullin viralliselta verkkosivustolta.

Suorituskyky, tehokkuus ja rajoitukset

Qhull-algoritmi on laajasti tunnustettu tehokkuudestaan konveksien kuorien, Delaunay-triangulaatioiden ja Voronoi-kaavioiden laskemisessa monidimensionaalisissa tiloissa. Sen suorituskyky johtuu suurelta osin Quickhull-lähestymistavan käytöstä, joka on analoginen quicksort-algoritmin kanssa ja yleensä osoittaa odotettavissa olevan aika monimutkaisuuden O(n log n) kahdessa ja kolmessa ulottuvuudessa. Kuitenkin pahimmassa tapauksessa — erityisesti degeneraattisissa tai patologisissa syötteissä — monimutkaisuus voi heikentyä O(n2) tai korkeammaksi, erityisesti korkeammissa ulottuvuuksissa, joissa pintojen määrä voi kasvaa eksponentiaalisesti syötettyjen pisteiden lukumäärän mukana (Qhull).

Qhull on erittäin optimoitu käytännön tietojoukoille, käyttäen strategioita, kuten vaiheittaista rakentamista, pintojen yhdistämistä ja tarkkuuden hallintaa, säilyttääkseen numeerisen vakauden ja nopeuden. Sen toteutus on kestävä kohtuullisille ulottuvuuksille (jopa 8-10), ja se on monien laskennallisen geometrian kirjastojen ja sovellusten selkäranka (Qhull). Kuitenkin ulottuvuuden kasvaessa sekä muistinkäyttö että laskenta-aika voivat muuttua esteeksi tulosteen koon eksponentiaalisen kasvun ja numeerisen vakauden lisääntyvän todennäköisyyden vuoksi. Lisäksi Qhull voi kohdata vaikeuksia syöteiden kanssa, joissa on suuri määrä lähes koplanaarisia tai kollineaarisia pisteitä, mikä voi johtaa tarkkuusvirheisiin tai liiallisiin laskentakustannuksiin (Qhullin toteutusraportti).

Yhteenvetona voidaan todeta, että vaikka Qhull on tehokas ja luotettava matalille ja kohtuullisille dimensioille ja hyvin käyttäytyville tiedoille, sen suorituskyky ja tarkkuus voivat merkittävästi heiketä korkeamittaisista tai degeneraattisista syötteistä, mikä korostaa syötteen esikäsittelyn ja huolellisen soveltamisen tärkeyttä haastavissa olosuhteissa.

Vertailu vaihtoehtoisiin algoritmeihin

Kun vertaillaan Qhull-algoritmia vaihtoehtoisiin algoritmeihin konveksien kuorien ja niihin liittyvien rakenteiden laskemiseen, useita keskeisiä eroja nousee esiin menetelmän, suorituskyvyn ja sovellettavuuden osalta. Qhull käyttää Quickhull-algoritmia, joka on peruskonseptiltaan samanlainen kuin QuickSort-algoritmi ja on erityisen tehokas matalissa ja kohtuullisissa dimensiotasoissa (yleensä jopa 8D). Se rakentaa konveksia kuoria, Delaunay-triangulaatioita ja Voronoi-kaavioita jakamalla ja valloittamalla lähestymistavalla, mitä on hyvin sovellettavissa datakokoihin, joissa pisteiden määrä on huomattavasti suurempi kuin tilan ulottuvuus Qhull.

Vastakohtana algoritmeille, kuten Grahamin skannaus ja Andrew’n monotoni ketju, jotka ovat erikoistuneet 2D-konveksisten kuorien laskentaan ja tarjoavat optimaalisen O(n log n) suorituskyvyn kahdessa ulottuvuudessa, mutta eivät yleisty tehokkaasti korkeammille ulottuvuuksille. Beneath-Beyond-algoritmi, toinen vaihtoehto, on usein käytetty korkeammalla ulottuvuudella konveksisten kuorien laskentaan ja on suosittu laskennallisen geometrian kirjastoissa, kuten CGAL, sen kestävyydestä ja kyvystään käsitellä degeneraatiotapauksia. Kuitenkin sen toteuttaminen voi olla monimutkaisempaa, eikä se välttämättä vastaa Qhullin suorituskykyä kohtuullisessa dimensiossa.

Vaihdealgoritmit, kuten ne, joita on toteutettu SciPy:ssa, lisäävät pisteitä yksi kerrallaan ja päivittävät kuoren, mikä voi olla tehokasta tietyille syötejaksoille, mutta saattaa kärsiä huonosta pahimmasta suorituskyvystä. Yhteenvetona voidaan todeta, että Qhullia usein suositaan sen nopeuden, yleisyyden ja käytännön kestävyyden tasapainon vuoksi, erityisesti sovelluksissa, joissa tarvitaan luotettavia tuloksia kohtuullisiin ulottuvuuksiin, kun taas vaihtoehtoisia algoritmeja voidaan valita erityisten ulottuvuuksien tai syöteominaisuuksien mukaan.

Todelliset käytännön esimerkit ja tapaustutkimukset

Qhull-algoritmi, joka tunnetaan tehokkuudestaan konveksien kuorien, Delaunay-triangulaatioiden ja Voronoi-kaavioiden laskemisessa, on saanut laajalti sovelluksia eri tieteellisissä ja insinöörialoissa. Laskennallisessa geometriassa Qhull on perustyökalu verkkojen luomiseen ja pinnan palauttamiseen, mikä on kriittistä tietokonegrafiikassa ja 3D-mallinnuksessa. Esimerkiksi algoritmi on olennainen pistepilven käsittelyssä sovelluksissa, kuten LiDAR-datan analysoinnissa, jossa se auttaa palauttamaan maastonpintoja ja tunnistamaan kohteiden rajoja hajautetusta tilatiedosta (Qhull).

Koneoppimisessa Qhullia käytetään sanktioitujen vektori koneiden (SVM) toteutuksessa, erityisesti korkeamittaisessa datan luokittelussa, jossa konveksi kuori auttaa määrittämään optimaalisia eristäviä hyperpintoja. Algoritmia käytetään myös klusterianalyysissä määrittelemään klusterien rajoja monidimensionaalisissa tietojoukoissa, mikä parantaa valvonnasta vapaan oppimisen tulosten tulkittavuutta (scikit-learn).

Merkittävä tapaustutkimus on sen integrointi MATLAB-ympäristöön, jossa Qhull tukee toimintoja, kuten convhull ja delaunayTriangulation, mahdollistaen tutkijoiden ja insinöörien suorittaa geometrisia laskelmia suurilla tietojoukoilla tehokkaasti. Robotiikassa Qhull auttaa liikkumissuunnittelussa, rakennettaessaan konfiguraatiotilan esteet, mahdollistaen turvallisen ja tehokkaan reitin löytämisen (MoveIt). Nämä todelliset käytännön esimerkit korostavat Qhullin monipuolisuutta ja luotettavuutta monimutkaisten geometristen ongelmien käsittelyssä eri tieteenaloilla.

Aloittaminen: Qhullin toteuttaminen käytännössä

Qhull-algoritmin toteuttaminen käytännössä sisältää useita keskeisiä vaiheita, alkaen sen syöttötarpeiden ymmärtämisestä ja sen ulostulojen integroimiseksi laskennallisen geometrian työskentelyyn. Qhullia käytetään laajasti konveksien kuorien, Delaunay-triangulaatioiden ja Voronoi-kaavioiden laskemiseen monidimensionaalisissa tiloissa. Aloittaaksesi sinun on ensin valmisteltava syötedatasi sarjana pisteitä Euklidisessa avaruudessa, joka on yleensä muotoiltu koordinaattilistana. Qhull hyväksyy syötteet useissa muodoissa, mukaan lukien tavalliset tekstimuotoiset tiedostot ja suorat datavirrat, mikä tekee siitä soveltuvan eri ohjelmointiympäristöihin.

Yleisimmät tavat käyttää Qhullia ovat komentorivikäyttöliittymän kautta tai linkittämällä sen C-kirjasto suoraan sovellukseesi. Skriptikielten, kuten Pythonin tai MATLABin, kohdalla on saatavilla kääreitä ja sidonnaisuuksia, jotka mahdollistavat saumattoman integraation. Kun ajat Qhullia, määrität halutun laskennan (esim. konveksi kuori, Delaunay-triangulaatio) komentorivivaihtoehtojen avulla. Algoritmi käsittelee sitten syötteet ja tuottaa tulokset rakenteellisessa muodossa, kuten pinnat tai simplex-listat, joita voidaan edelleen analysoida tai visualisoida.

Käytännön toteuttamiseen liittyy myös numeerisen tarkkuuden ja degeneraatiotilanteiden käsittely, koska Qhull käyttää liukulukuaritmetiikkaa ja saattaa kohdata ongelmia lähes koplanaaristen tai kollineaaristen pisteiden kanssa. Ohjelmisto tarjoaa vaihtoehtoja syötetietojen häiritsemiseksi tai toleranssien säätämiseksi näiden haasteiden lieventämiseksi. Kattava dokumentaatio ja esimerkkidataset ovat saatavilla virallisesta lähteestä, mikä on arvokasta virheiden etsimisessä ja toteutuksen optimoinnissa (Qhull). Noudattamalla näitä ohjeita käytännön asiantuntijat voivat tehokkaasti hyödyntää Qhullin kestäviä algoritmeja laajassa valikoimassa geometrisia laskentoja.

Tulevaisuuden suuntaukset ja jatkuvat kehitystoimet

Qhull-algoritmi, jota tunnustetaan laajasti sen tehokkuudesta konveksien kuorien, Delaunay-triangulaatioiden ja Voronoi-kaavioiden laskemisessa, jatkaa kehitystään vastaamaan nouseviin laskennallisiin haasteisiin ja sovellusalueisiin. Yksi merkittävä suunta tulevassa kehityksessä on Qhullin skaalautuvuuden ja suorituskyvyn parantaminen korkeamittaisille tietojoukoille, jotka ovat yhä yleisempiä aloilla, kuten koneoppimisessa ja datan analysoinnissa. Tutkijat tutkivat rinnakkaistamista ja GPU-kiihdytystä, joiden avulla pyritään ratkaista suurten geometristen laskentatehtävien yhteydessä syntyviä pullonkauloja. Nämä toimet pyrkivät säilyttämään Qhullin luotettavuuden samalla, kun suoritusajat voidaan merkittävästi lyhentää monimutkaisissa, korkeamittaisissa ongelmissa.

Toinen jatkuvan kehityksen alue on algoritmin numeerisen vakauden parantaminen ja degeneraatiotilanteiden käsittely. Kun sovellukset tarvitsevat korkeampaa tarkkuutta ja luotettavuutta, erityisesti tieteellisessä laskennassa ja insinööritieteissä, pyrkimyksenä on hioa Qhullin aritmetiikkaa ja virheenkäsittelymekanismeja. Lisäksi modernien ohjelmointiympäristöjen integroinnin ja muiden laskennallisen geometrian kirjastojen yhteensopivuuden parantamiselle annetaan etusija laajemman hyväksynnän helpottamiseksi.

Qhullin avoimen lähdekoodin luonne kannustaa yhteisövetoisia parannuksia, joissa panostetaan dokumentaation laajentamiseen, uusien ominaisuuksien lisäämiseen ja lisägeometristen rakenteiden tukemiseen. Ylläpitäjät pyytävät aktiivisesti palautetta ja ehdotuksia varmistaakseen, että Qhull pysyy relevanttina ja sopeutuu sekä akateemisten että teollisten käyttäjien tarpeisiin. Viimeisimmät päivitykset ja käynnissä olevat projektit löytyvät virallisesta repositoriosta ja dokumentaatiosta, jotka tarjoavat kattavia resursseja ja suunnitelmia tuleville julkaisuversioille (Qhull).

Lähteet ja viitteet

Convex Hull Algorithm - Graham Scan and Jarvis March tutorial

ByMonique Tawton

Monique Tawton on kokenut kirjailija ja ajattelija uusien teknologioiden ja fintechin aloilla. Hänen intohimonsa rahoituksen ja innovaation leikkauspisteiden tutkimiseen tuo ainutlaatuisen näkökulman hänen kirjoituksiinsa. Monique valmistui maisterin tutkinnolla rahoitusteknologiasta arvostetusta Northeastern-yliopistosta, jossa hän kehitti analyyttisiä taitojaan ja syvensi ymmärrystään kehittyvistä rahoitusmaailmoista. Hänen ammatillinen uransa sisältää arvokasta kokemusta Fintek Solutionsista, missä hän oli keskeisessä roolissa häiritsivien fintech-ratkaisujen kehittämisessä. Moniquen oivaltavat artikkelit ja analyysit pyrkivät purkamaan monimutkaisia teknologisia edistysaskeleita, tehden niistä helposti lähestyttäviä laajalle yleisölle. Hänen työnsä kautta hän pyrkii edistämään tietoisia keskusteluja rahoituksen tulevaisuudesta jatkuvasti kehittyvässä digitaalisessa maailmassa.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *