L m o d els. Tekninen määrittely. Ryhmä Rajoitteiset

Koko: px
Aloita esitys sivulta:

Download "L m o d els. Tekninen määrittely. Ryhmä Rajoitteiset"

Transkriptio

1 Teknillinen korkeakoulu T Tietojenkäsittelyopin ohjelmatyö Lineaaristen rajoitteiden tyydyttämistehtävän ratkaisija L m o d els Tekninen määrittely Ryhmä Rajoitteiset Versio Päivämäärä Tekijä Muutokset Tuomas Luttinen Ensimmäinen alustava versio Tuomas Luttinen Enemmän sisältöä rungon päälle. Tätä iteraatiota koskemattomat otsikot on poistettu Tuomas Luttinen Lisäys translaattorin toiminnan kuvaukseen: semanttinen analyysi, hylätyt ratkaisut mukaan Tuomas Luttinen Palautteiden perusteella uuteen pohjaan muokattu versio Jouni Karppinen & Mitro Kuha Dokumentti tarkastettu ja korjattu PP-vaiheen palautusta varten Tuomas Luttinen Edelleen kehitetty versio ensimmäistä toteutusiteraatiota varten Tuomas Luttinen Ensimmäisen toteutusiteraation lopullinen versio Jouni Karppinen & Mitro Kuha Dokumentti tarkastettu ja korjattu I1-vaiheen palautusta varten Tuomas Luttinen Dokumentti päivitetty I2-vaiheen palautusta varten Jouni Karppinen & Mitro Kuha Dokumentti tarkastettu ja korjattu I2-vaiheen palautusta varten Tuomas Luttinen Dokumentti päivitetty I3-vaiheen palautusta varten Jouni Karppinen Dokumentti tarkastettu ja korjattu I3-vaiheen palautusta varten Tuomas Luttinen Dokumentti päivitetty Delivery-vaiheen palautusta varten Jouni Karppinen Dokumentti tarkastettu ja korjattu DE-vaiheen palautusta varten.

2 Sisällysluettelo 1 Johdanto Tarkoitus ja kattavuus Tuote ja ympäristö Termit ja määritelmät Järjestelmän yleiskuvaus Sovellusalueen kuvaus Järjestelmän liittyminen ympäristöönsä Laitteistoympäristö Ohjelmistoympäristö Toteutuksen keskeiset reunaehdot Arkkitehtuurin kuvaus Suunnitteluperiaatteet Ohjelmistoarkkitehtuuri Moduulien välinen kommunikaatio Järjestelmän pakettirakenne Virheenkäsittely Normalisointi ja linearisointi Normalisointi Linearisointi Moduulikuvaukset Nodes Model ja Solver Formats Processors Server Client ja Controller Web Muut luokat Hylätyt ratkaisut Kääntäjän tuottamistyökalut Lineaarinen ratkaisija Järjestelmän arkkitehtuuri päätasolla Palvelinohjelmisto servlettien ajamiseksi...18 Liite A - Normalisointimalli...19 Liite B - Modeller...22 Liite C - Solver...25

3 1 Johdanto 1.1 Tarkoitus ja kattavuus Tämä dokumentti on Teknillisen korkeakoulun kurssille T Tietojenkäsittelyopin ohjelmatyö harjoitustyönä tehtävän lineaaristen rajoitteiden tyydyttämistehtävän ratkaisijan tekninen määrittely. Dokumentin ensisijainen tarkoitus on määrittää ja kuvata vaatimusmäärittelyssä esitettyjen toiminnallisuuksien tekninen toteutustapa ja toisekseen täydentää toiminnallista määrittelyä teknisestä näkökulmasta. Näin ollen dokumentti on suunnattu järjestelmän toteuttajille. Tämän lisäksi sen on tarkoitus antaa asiakkaalle kuva järjestelmän teknisestä toteutuksesta jatkokehitystä varten ja toimia kurssin henkilökunnan apuna projektin arvioinnissa. 1.2 Tuote ja ympäristö Tuotteen nimi on Lmodels. Se on lineaaristen rajoitteiden tyydyttämistehtävän ratkaisija. Tuote toimii verkkoyhteyden tarjoavassa tietokoneessa, jossa on Java-virtuaalikone. 1.3 Termit ja määritelmät Seuraavassa taulukossa on selitetty lyhyesti erikoistermistö, jota käytetään tämän asiakirjan eri kohdissa. Vaatimusmäärittelyssä esitettyjen termien ja määritelmien oletetaan olevan tuttuja lukijalle. Termi Abstrakti syntaksipuu Määrittely Abstrakti syntaksipuu kuvaa lausekkeen sisäisen rakenteen kieliopin terminaaleja sisältävänä puuna. GLPK (GNU Linear Programming Kit) GNU-lisenssin alla jaettava lineaaristen ongelmien ratkaisija. Java-virtuaalikone Jetty Jäsennyspuu Käännettyä Java-koodia sisällään ajava prosessi, joka tarjoaa Javasovellukselle kielen vaatimat palvelut, kuten roskankeruun. Eri alustoille tehdyt virtuaalikoneet mahdollistavat Java-sovellusten ajamisen eri ympäristöissä. Palvelinohjelmisto, joka tarjoaa servleteille sopivan ajoympäristön. Kielen terminaaleista ja nonterminaaleista muodostuva tietorakenne, jossa nonterminaalit sisältävät toisia nonterminaaleja ja puun lehdiksi jääviä terminaaleja. Jäsentäjä Muodostaa selaajalta syötteenään saamista terminaaleista nonterminaalien muodostaman jäsennyspuun, joka kuvaa annetun syötteen rakenteen. lp_solve Javalla toteutettu lineaaristen ongelmien ratkaisija. 1

4 Termi LP-kieli Määrittely Lineaaristen mallien määrittelyyn käytettävä kieli, jota esim. GLPK hyväksyy syötteenään. Open Source Ohjelmistoja, joiden lähdekoodi on vapaasti saatavilla ja muokattavissa ja jotka ovat muokattuinekin lähdekoodeineen vapaasti käytettävissä ja eteenpäin levitettävissä. RMI-rajapinta (Remote Method Invocation) Tämän rajapinnan avulla yhdessä Java-virtuaalikoneessa sijaitseva olio voi kutsua toisessa virtuaalikoneessa sijaitsevan olion metodia. Virtuaalikoneet voivat sijaita vaikka fyysisesti eri koneissa. Selaaja Servlet Muodostaa tekstipohjaisesta syötteestä säännöllisten lausekkeiden avulla kielen syntaksin mukaisia terminaaleja. Tekniikka tehdä Java-sovellutuksia, jotka vastaavat HTTP-pyyntöihin interaktiivisesti muodostaen WWW-sivuja pyynnön mukana välitettyjen parametrien mukaan. UML (Universal Modelling Language) Ohjelmistojen mallintamiseen käytettäviä kaaviotyyppejä määrittelevä kieli. Taulukko 1: Termit ja määritelmät. 2

5 2 Järjestelmän yleiskuvaus 2.1 Sovellusalueen kuvaus Lineaaristen rajoitteiden tyydyttämistehtävän ratkaisijana Lmodels pyrkii löytämään ratkaisun malliin annettujen rajoitteiden vallitessa. Mikäli ratkaisu on olemassa, niin käyttäjälle annetaan mahdollisimman tiukat rajat, joiden sisältä kaikki mahdolliset ratkaisut löytyvät, sekä yksi yksiselitteinen ratkaisu. 2.2 Järjestelmän liittyminen ympäristöönsä Lmodels-järjestelmä koostuu palvelinohjelmasta, asiakasohjelmasta sekä komentorivityökalusta, joita ajetaan itsenäisinä kokonaisuuksina. Asiakasohjelma on riippuvainen palvelinohjelmasta, joka kuitenkaan itsenäisenä Java-ohjelmana ei ole sidottu tässä toteutuksessa tehtävään asiakasohjelmaan käyttöliittymineen, vaan sen tarjoamaa RMI-rajapintaa voivat yhtä hyvin hyödyntää ulkopuoliset ohjelmistot, jotka näin voivat käyttää sen tarjoamaa palvelua. 2.3 Laitteistoympäristö Lmodels ei aseta mitään erityisiä vaatimuksia sitä ajavan tietokoneen laitteistolle. Suorituskykyinen kone suurella muistilla on kuitenkin suositeltava, sillä ongelmakenttä, jota Lmodels:lla pyritään ratkaisemaan, on laskennallisesti kompleksinen ongelma. Ajoaika riippuu suuresti mallin koosta ja monimutkaisuudesta, koneen prosessoritehosta ja käytettävissä olevan muistin määrästä. Pienet ja yksinkertaiset mallit hoituvat nopeasti, kun taas suurten tai monimutkaisten mallien ratkaiseminen voi viedä paljon aikaa tehokkaallakin koneella. 2.4 Ohjelmistoympäristö Lmodels-järjestelmän ajoa varten tarvitaan Java-virtuaalikone ja GLPK-ratkaisija. Lmodels:n asentamiseksi tarvitaan näin ollen joko C-kääntäjä GLPK:n kääntämiseksi tai valmiiksi käännetty GLPK. GLPK ei tue perusmuodossaan säikeitä, joten tämän korjaamiseksi on tehty muutostiedosto, jolla GLPK saadaan säieturvalliseksi. Valitettavasti tätä ei ole periaatteellisista syistä hyväksytty osaksi GLPK:n päähaaraa. Haluttaessa käyttää mukana tulevaa asiakasohjelmaa käyttöliittymineen täytyy asentaa myös Java-servlettien ajon mahdollistava J2EE-standardia tukeva servletajoympäristö, koska käyttöliittymä toteutetaan Java-servletteinä. Kyseisenä palvelinohjelmistona tässä projektissa käytetään Jettyä sen ilmaisuuden vuoksi. Java-kielestä käytetään versiota Ohjelmisto ei aseta rajoitteita käyttöjärjestelmän suhteen, mutta projektiryhmän tarjoama tuki toimii parhaiten Linux-alustalla, sillä kehitystyö on tehty pääasiallisesti sillä. 2.5 Toteutuksen keskeiset reunaehdot Ohjelmiston toteutuksessa käytetään vain ilmaisia, jos mahdollista Open Source, ohjelmistoja. Projektin dokumentit ovat suomenkielisiä, mutta itse ohjelmakoodi ja koodin kommentit ovat englanninkielisiä. Käyttöohje kirjoitetaan suomeksi, mutta ohjelmiston mukana on myös lyhyet englanninkieliset asennus- ja käyttöohjeet erillisissä tiedostoissa. 3

6 3 Arkkitehtuurin kuvaus 3.1 Suunnitteluperiaatteet Järjestelmän toteutuskieli on Java useammastakin syystä, joista ensimmäinen on asiakkaan vaatimus. Lisäksi ryhmän jäsenet ovat tottuneet työskentelemään tällä kielellä, sitä tuetaan useassa ympäristössä ja sille löytyy laajat valmiskirjastot sekä tämän projektin vaatimia kääntäjiin liittyviä työkaluja jäsentäjän automatisoituun tekemiseen. Järjestelmään liittyvä käyttöliittymä toteutetaan Java-servletteinä ja HTML-kieltä käyttäen. Vaikka järjestelmässä on mukana käyttöliittymä, niin tällä kertaa suunnittelun painopiste ja sitä eteenpäin ajava voima on teknisellä puolella. Käyttöliittymä on tarkoitettu lähinnä testaamiseen, koska pääkäyttötapa järjestelmälle jatkossa on osana integroitua suurempaa järjestelmää, jolloin Lmodels:n käyttäjiä ovat toiset ohjelmistojärjestelmät. Järjestelmä toteutetaan käyttäen oliopohjaista mallinnusta ja erilaisia UML-kaavioita eri osien mallintamiseen. Koska koodin toteutuskielenä on englanti, niin kaavioiden kielikin on näin ollen englanti. Eri komponentteihin viitataan pääsääntöisesti kuitenkin tämän dokumentin kielellä eli suomeksi, joten tätä tapaa käytettäessä on kaavioissa esiintyvä englanninkielinen nimi laitettu sulkuihin suomalaisen termin perään, mikäli sitä ei ole saatu liitettyä asiayhteyteen jouhevasti muulla tavoin. 3.2 Ohjelmistoarkkitehtuuri Koska Lmodels-järjestelmällä tulee olemaan ulkopuolinen ohjelma käyttäjänään, on se suunniteltu palvelin-asiakas -mallin mukaiseksi ohjelmistoksi. Näin Lmodelsille syntyi ydin, joka tuottaa ratkaisut sille syötettyihin malleihin ja jolla on rajapinnat ulkoisia käyttäjiä varten. Suurin osa järjestelmän sisäisistä toiminnallisuuksista on koteloitu omiksi moduleikseen, joiden nimet jo kertovat mitä moduli tekee, esimerkiksi linearisoija linearisoi sille syötetyn normaalimuotoisen mallin. Kokonaisuutta ohjaamaan kehitettiin vielä erillinen moduli, joka nimettiin kontrolleriksi tehtävänsä mukaisesti. Näin syntyneen Lmodels-järjestelmän yleistason kuva on esitetty seuraavassa kaaviossa. formats CLIClient WWW client client server controller processors model nodes solver Kaavio 1: Lmodels-järjestelmä. Ulkoisella käyttäjällä, joka tässä kehitysvaiheessa on vielä ihminen, on kaksi tapaa käyttää järjestelmää: joko paikallisesti komentorivikäyttöliittymällä tai verkon yli WWWkäyttöliittymällä. Molemmissa tapauksissa järjestelmän keskuksena toimii kontrolleri 4

7 (controller), joka sisältää järjestelmän toimintalogiikan ja joka tuottaa vastaukset käyttäjän tekemiin kyselyihin. Seuraavassa sekvenssikaaviossa on esitettynä esimerkki, jossa Lmodels:ia käytetään komentorivityökalun avulla lineaarisen ongelman ratkaisuun. ModelProcessor :CLIClient controller:controller Format processor:cnfnormaliser ModelProcessor solver:glpksolver main(args[]) create() parser:lmformat processor:lineariser solversolution:=solve(text, limits) create() :SolverFactory model:=parse(text) create() model:=process(model) create() model:=process(model) solver:=getsolver(glpk) create() solversolution:=solve(model, limits) Kaavio 2: Sekvenssikaavio komentorivityökalusta. Komentoriviltä käynnistetään komentorivityökalu (CLIClient), joka käynnistää itselleen uuden kontrollerin (controller), jolle annetaan metodikutsun argumentteina ongelman malli tekstimuodossa ja kiinnitetyt muuttujat arvoineen. Kontrollerin tehtävänä on nyt päätellä, mitä vaiheita tarvitaan mallin käsittelyyn, ennen kuin se voidaan toimittaa varsinaiselle ratkaisimelle ratkaistavaksi. Tässä tapauksessa malli on tekstimuodossa ilman, että sitä olisi normalisoitu tai linearisoitu. Siksi kontrolleri käy kaikki askeleet läpi käyttäen lm-muodon jäsentäjää (parser:lmformat) mallin jäsentämiseksi, CNF-muodon normalisoijaa (processor:cnfnormaliser) normalisointiin, linearisoijaa (Lineariser) linearisointiin ja lopuksi ratkaisijatehdasta (SolverFactory) tuottamaan sopivan ratkaisijainstanssin, joka etsii mahdolliset ratkaisut annettuun ongelmaan. Tekniseltä kannalta kontrollerin ohjaamien moduulien voidaan katsoa muodostavan kääntäjän alkupuolen mukaisen selkeän peräkkäisrakenteen. Siinä ensimmäinen askel on tekstimuotoisen syötteen jäsennys, minkä jälkeen seuraavat moduulit tekevät erilaisia muutoksia aikaansaatuun abstraktiin syntaksipuuhun. Linjan viimeisenä oleva moduuli tuottaa abstraktista syntaksipuusta taas tekstimuotoista tulostetta. Tämä muoto on esitetty kaaviossa 3. 5

8 0..* General File Format String Model ModelProcessor Model ModelProcessor Model Translator Command line tool File LMFormat CNFNormaliser String Model Model LPX command line tool File LMFormat CNFNormaliser Lineariser String Model Model Model (Un)Bind variables Result model Server mode User File String LMFormat Model CNFNormaliser Model Linearisator String Format / ModelSolver Results model File User Kaavio 3: Lmodels kääntäjänä. LMFormat File String LPXFormat File String Model GLPKSolver Vasemmalla on esitetty yleinen malli, jossa syöte tuodaan tekstimuodossa sisään jäsentäjälle, sitä käsittelee yksi tai useampi puun käsittelijä (ModelProcessor) ja lopuksi se joko kirjoitetaan taas tekstimuodossa tiedostoon tai lähetetään ratkaisijalle (ModelSolver). Puun käsittelijöitä ovat normalisoijat ja linearisoija. Mallia voidaan normalisoijilla pyöritellä mielin määrin CNF- ja DNF-muotoihin ennen linearisointia. Kaavion 3 kaksi seuraavaa mallia kuvaavat komentorivityökalujen käyttöä ja niissä on abstraktien rajapintojen sijaan käytetty realisoituvia luokkia. Viimeisin esimerkki oikealla kuvaa palvelimen sisällä käytettyä ketjua ongelman saamiseksi ratkaistavaksi. 3.3 Moduulien välinen kommunikaatio Järjestelmässä on kaksi rajapintaa, joiden kohdalla se voidaan hajauttaa useampaan fyysiseen koneeseen ja kommunikaatio toimii verkkorajapinnan yli. Nämä rajapinnat ovat käyttöliittymän käyttämä HTTP-rajapinta selaimen ja servletpalvelimen välillä sekä järjestelmän sisäinen RMI-rajapinta, joka on esitelty seuraavassa kaaviossa. 6

9 «Factory» ClientFactory +getclient(clienttype:int): Client creates «interface» Client ServerSolver starts RemoteClient +connect(): RMIServer +getconnector(): RemoteController returns RemoteController Controller <<RMI>> <<RMI>> «interface» RMIServer Controller RMIServerImpl +getconnector(): RMIController returns SimpleController «interface» 1 RMIController RMIControllerImpl Kaavio 4: RMI-arkkitehtuuri. Luokka ServerSolver käynnistää RMI-prosessin palvelimen puolella ja jää kuuntelemaan pyyntöjä. Asiakasohjelma käynnistyy ja pyytää itselleen asiakastehtaasta (ClientFactory) uuden asiakasrajapinnan (Client) toteutuksen ja saa itselleen RMI:tä tukevan asiakasolion (RemoteClient). Tämä ottaa yhteyden palvelimeen ja saa itselleen viitteen RMIpalvelimeen (RMIServer), jolta asiakasolio saa viitteen palvelimen kontrolleriin (RMIController), joka tallennetaan asiakaspäässä omaan olioonsa (RemoteController). Tämän jälkeen asiakas voi käyttää oman päänsä kontrolleria (RemoteController) aivan normaaliin tapaan, koska RMI:n toteutus mahdollisine ongelmatilanteineen on upotettu sen sulkeviin luokkiin. Itse työn tekee palvelimen päässä tavallinen kontrolleri (SimpleController), jolle pyynnöt ohjataan RMI-rajapinnan yli. Kuvan keskellä kulkevan jakolinjan yli menevä liikenne voi tapahtua verkon välityksellä kahden eri fyysisen koneen välillä. Tällöin Lmodels voidaan jakaa kahdelle koneelle siten, että toinen näistä koneista ratkoo ongelmia toisen toimiessa palvelimena, joka tarjoaa käyttäjän selaimelle tarpeellisen WWW-palvelun. Integroitaessa Lmodels:ia asiakkaan laajempaan järjestelmään tulee yllä kuvatusta RMI-rajapinnasta toisten ohjelmakomponenttien käyttöliittymä Lmodels-järjestelmään. 3.4 Järjestelmän pakettirakenne Järjestelmän pakettirakenne on esitetty kaaviossa 5. Pakettien riippuvuudet ketjuuntuvat alaspäin vieviksi ketjuiksi ilman silmukoita. Ylimpänä tasona ovat palvelin- (server) ja asiakas- (client) paketit, jotka kommunikoivat kontrollerin (controller) kanssa, joka puolestaan käyttää muista paketeista löytyviä luokkia ja niiden metodeita ratkaistakseen lineaarisia ongelmia. 7

10 lmodels client server controller model processors formats solver nodes Kaavio 5: Lmodels:in pakettikaavio. 3.5 Virheenkäsittely Virheenkäsittely Lmodels-järjestelmässä perustuu pakettikohtaisiin poikkeuksiin, joita on yksi kutakin pakettia kohden. Yleisesti kyseisen paketin rajapinta ilmoittaa heittävänsä tämän poikkeuksen ongelmatilanteissa, johon rajapinnan hyödyntäjän tulee varautua. Jokaisesta kerroksesta pyritään tekemään mahdollisimman hyvin alemman kerroksen virheitä sietävä. 3.6 Normalisointi ja linearisointi Mallin käsittelyyn käytetään kahta prosessia, jotka ovat luonteeltaan matemaattisia ja varsin monimutkaisia. Näiden tarkempi toteutus on esitettynä tämän dokumentin liitteissä, mutta tässä on satunnaiselle lukijalle tiivistetty versio näistä prosesseista Normalisointi Normalisointi tarkoittaa loogisen yhtälön muuttamista muotoon, jossa joko JA- (konjunktiivinen) tai TAI-operaattorit (disjunktiivinen) ovat yhdistämässä muiden operaattoreiden muodostamia alilausekkeita ja jonka ratkaisu on yhtäpitävä alkuperäisen yhtälön kanssa. Lmodels:ssa käytetään lineaaris-loogisia malleja, jotka muutetaan normalisoiduiksi lineaaris-loogisiksi malleiksi noudattaen samoja menetelmiä kuin loogisen mallin kanssa, sillä lineaarisissa yhtälöissä oleva vertailuoperaattori antaa koko yhtälölle loogisen arvon. 8

11 3.6.2 Linearisointi Määritelmän mukaan linearisoitaessa loogisia rajoitteita ja lineaarisia sekalukurajoitteita sisältävä malli muutetaan lineaariseksi sekalukumalliksi. Lmodelsin tapauksessa tämä tarkoittaa sitä, että lineaaris-loogisesta mallista muokataan lineaarinen malli korvaamalla loogiset muuttujat numeerisilla muuttujilla ja loogiset lausekkeet lineaarisilla lausekkeilla käyttäen tarvittaessa apumuuttujia. 9

12 4 Moduulikuvaukset Seuraavissa kappaleissa on esitelty jokaisen paketin sisältö pääkohdittain sekä mahdollinen rajapinta, jolla paketin sisältämiä luokkia voidaan käyttää. Paketit on käyty läpi periaatteella bottom-up, eli ensimmäisen on esitelty mallin sisäisen rakenteen rakennuspalikat, tämän jälkeen itse malli, mallia muokkaavat kokonaisuudet ja viimeiseksi nämä Lmodels-järjestelmäksi niputtavat osat ja käyttöliittymä näiden päälle. Lisäksi esitellään vielä erilliset luokat, jotka käyttävät koko järjestelmää. 4.1 Nodes Tämän paketin luokkien tarkoitus on muodostaa abstrakti syntaksipuu, joka kuvaa mallin sisältämien yhtälöiden rakenteen. Alla on kuvattu paketin luokkarakenne. Expr +getnew(...): Expr BooleanExpr +getnew(...): BooleanExpr FloatExpr +getnew(...): FloatExpr BinaryBooleanExpr Not Comparison BooleanVariable +left: BooleanExpr +Right: BooleanExpr +getnew(booleanexpr,booleanexpr) +leftexpr +getnew(booleanexpr) +left: FloatExpr +right: FloatExpr +getnew(floatexpr,floatexpr) +name: String +negated: Boolean BooleanConstant And Or Xor Equiv Impl EQ NEQ GT LT GE LE Sub Luokasta ei oteta instansseja, getnew palauttaa AINA toisen luokan instanssin. BinaryFloatExpr +getnew(floatexpr,floatexpr,) FloatVariable +mul: double +name: String Add Sub Mul Div UMinus +getnew(floatexpr) FloatConstant Kaavio 6: Paketin nodes luokkakaavio. 10

13 Erityistä huomiota kannattaa kiinnittää siihen, että läheskään kaikista operaattoreista ei luoda oman luokkansa instansseja. Niiden sijaan käytetään toisten operaattoriluokkien instansseja, joilla saadaan sama asia ilmaistua toisella samanarvoisella tavalla. Tämän ansiosta lopullisen puun käsittelyssä selvitään vähemmällä vaivalla, koska erilaisia operaattoreita on rajoitetummin. Seuraavassa taulukossa on kuvattu puun muodostamisen apuna käytetyt operaattoreiden korvaavuudet. Luokka Lause Korvattu lause Xor a xor b ( a and not b) or (not a and b) Equiv a equiv b not(a) xor b Implies a implies b not(a) or b Sub j - k j + -1*k Uminus -k -1 * k Div k/ * k Taulukko 2: Korvattavat operaattorit korvaavuuksineen. Alla olevassa kaaviossa on vielä kuvattuna esimerkkinä eräs konjunktiivisessa normaalimuodossa oleva lauseke abstraktina syntaksipuuna. Expr Tree in CNF and or and 3.1*A >= not K or or P NOT p and or 3*B 12 + >= 0 or K not T 3*A + K not T 3*B *D -12 Kaavio 7: Abstrakti syntaksipuu konjunktiivisessa normaalimuodossa. 11

14 4.2 Model ja Solver Seuraavassa kaaviossa on esitetty pakettien model ja solver sisältö luokittain. model solver Model 1 SolverFactory «interface» ModelSolver 1 Vmap SolverSolution cputime: int modelsize: int AbstractSolver * Variable 1 1..* VariableSolution SolverEvent GLPKSolver 0..1 VariableLimits «interface» SolverListener Kaavio 8: Pakettien model ja solver luokkakaavio. Paketin model pääluokka on mallin (Model) sisältävä luokka, joka sisältää muuttujien määritelmät omassa luokassaan (Vmap). Tämän luokan sisäinen toteutus on linkitetty hajautustaulu, johon on säilötty muuttujia omassa luokassaan (Variable). Malli yhdessä kiinnitettyjen muuttujien (VariableLimits) kanssa muodostaa ongelman. Sille on olemassa ratkaisu (SolverSolution), joka puolestaan sisältää ongelman jokaiselle muuttujalle ratkaisun (VariableSolution), joka puolestaan sisältää muuttujan rajat ja käyvän ratkaisun, mikäli sellainen löydettiin. Paketissa solver on ratkaisijaan liittyviä luokkia. Seuraavassa taulukossa on esitelty paketin rajapinnat. Rajapinta Merkitys ModelSolver Ratkaisijan määrittelevä rajapinta. Sisältää metodit lineaarisen ongelman ratkaisemiseksi sekä kuuntelijan (SolverListener) lisäämiseen ja poistamiseen. SolverListener Kuuntelija, joka seuraa ratkaisijan työn edistymistä. Ratkaisija tiedottaa edistymisestään tapahtumilla (SolverEvent). Taulukko 3: Rajapinnat solver-paketissa. Erilaisten ratkaisijatyyppien tuottamiseksi paketissa on tehdasluokka (SolverFactory), joka luo ratkaisijoita annetun tekstitunnisteen mukaan. Muita paketin luokkia ovat tapahtuma (SolverEvent), jolla tiedotetaan ratkaisijan edistymisestä, sekä SolverSolution, joka 12

15 sisältää ongelman ratkaisun sekä tähän ratkaisuun liittyvää oheistietoa, kuten käytetyn koneajan ja mallin koon. 4.3 Formats Seuraavassa kaaviossa on esitetty tämän paketin luokkarakenne. processors «interface» ModelProcessor +process(m:model): Model Lineariser ModelNormaliser CNFNormaliser DNFNormaliser Kaavio 9: Paketin formats luokkakaavio. Tämä paketti sisältää seuraavan rajapinnan ja sen toteuttavia luokkia. Rajapinta Merkitys Format Muotoilijan (Format) määrittelevä rajapinta. Sisältää metodit lineaarisen mallin muodostamiseen tekstisyötteestä sekä lineaarisen mallin tulostamiseksi tekstimuotoon. Taulukko 4: Rajapinta formats-paketissa. Rajapinnan toteutusluokkia on kaksi kappaletta. Näistä ensimmäinen käsittelee määrittelemäämme lm-kieltä ja toinen lineaaristen mallien kuvaamiseen yleisesti käytettyä lpx-kieltä. 4.4 Processors Kaaviossa 10 on esitetty tämän paketin luokkarakenne. Paketti sisältää edellisen paketin tavoin yhden rajapinnan sekä sen toteuttavia luokkia. 13

16 processors «interface» ModelProcessor +process(m:model): Model Lineariser ModelNormaliser CNFNormaliser DNFNormaliser Kaavio 10: Paketin processors luokkakaavio. Rajapinta ModelProcessor Merkitys Mallin prosessoijan (ModelProcessor) määrittelevä rajapinta. Tämän rajapinnan ainoa metodi on process, joka ottaa sisäänsä argumenttina annetun mallin ja palauttaa uuden, prosessoidun mallin. Taulukko 5: Rajapinta processors-paketissa. Toteuttavia luokkia on processors-paketissa useampia, ja ne jakautuvat kahteen lajiin: mallin linearisoijaan (Lineariser) ja normalisoijiin. Jälkimmäisiä on yksi isäluokka (ModelNormaliser) ja toteutukset kahdelle eri normaalimuodolle (CNFNormaliser, DNFNormaliser). 4.5 Server Seuraavassa kaaviossa on esitetty tämän paketin luokkarakenne. server <<interface>> RMIServer <<interface>> RMIController RMIServerImpl +getconnector(): RMIController RMIControllerImpl Kaavio 11: Paketin server luokkakaavio. 14

17 Paketti server sisältää RMI-rajapinnan palvelinpuolen toteutuksen sekä rajapinnat näiden toteutusten viitteen toimittamiseksi RMI-yhteyden yli, jotta metodikutsut voidaan välittää toiseen koneeseen. Rajapinta Merkitys RMIServer Rajapinta RMIServer määrittelee RMI-rajapintaa kuuntelevan palvelimen ja sen metodin getconnector, jolla saadaan toimitettua viite kontrollerista RMI-rajapinnan toiselle puolelle. RMIController Taulukko 6: Rajapinnat server-paketissa. Rajapinta RMIController määrittelee samat metodit kuin rajapinta Controller mallin käsittelemiseksi RMI-rajapinnan yli. Palvelimen toteutus (RMIServerImpl) on siis konkreettinen olio, joka toimii RMIpalvelimena. Kontrollerin RMI-toteutus (RMIControllerImpl) puolestaan käyttää suoraan tavallista kontrolleria (SimpleController) toteuttaakseen mallin käsittelyn metodit. 4.6 Client ja Controller Paketti controller sisältää edellisten pakettien tavoin yhden rajapinnan sekä sen toteuttavan luokan. Tämän rajapinnan toteuttava luokka on myös paketissa client liittyen kontrollerin käyttöön RMI-rajapinnan yli. Rajapinta Merkitys Controller Rajapinta Controller määrittelee metodit, joilla mallia voidaan järjestelmän ulkopuolelta käsitellä. Taulukko 7: Rajapinta controller-paketissa. Yksinkertainen kontrolleri (SimpleController) on rajapinnan ainoa täysi toteutus, joka sisältää tarpeellisen logiikan mallin vaatiman käsittelyn selvittämiseen annettujen parametrien ja mallin itsensä avulla. Muiden saman rajapinnan toteuttavien luokkien toiminta palautuu tämän luokan metodien kutsumiseen. 15

18 client ClientFactory +getclient(): Client creates <<interface>> Client LocalClient +getconnector(): Controller RemoteClient +connect(address:string) +getconnector(): Controller returns returns RemoteController controller <<interface>> Controller SimpleController Kaavio 12: Pakettien client ja controller luokkakaavio. Kaaviossa 12 on esitetty pakettien client ja controller luokkarakenne. Seuraava taulukko esittelee paketin client sisältämän rajapinnan. Rajapinta Client Merkitys Rajapinta Client määrittelee asiakkaan metodit, joilla otetaan yhteys palvelimeen ja saadaan viite kontrolleriin. Taulukko 8: Rajapinta client-paketissa. Paketti sisältää tehdasluokan (ClientFactory), jolla luodaan asiakas (Client) tilanteen mukaan. Kyseisen rajapinnan toteuttavista luokista paikallinen asiakas (LocalClient) toteuttaa vain metodin getconnector, jolla se luo uuden tavallisen kontrollerin (SimpleController). Etäasiakas (RemoteClient) toteuttaa metodin connect, jolla luodaan yhteys palvelimeen. Tämän luokan metodi getconnector pyytää palvelimen puolelta viitteen RMI-kontrolleriin (RMIController), joka suljetaan etäkontrolleriluokan (RemoteController) olioon RMI-yhteyden piilottamiseksi ulkopuoliselta käyttäjältä. 4.7 Web 16

19 Paketin web sisältämät luokat muodostavat Lmodels-järjestelmän testikäyttöön rakennetun web-käyttöliittymän. Paketissa on rajapinta Page, jonka toteuttavat EditingPage, SolverPage ja HelpPage luokat, jotka yhdessä muodostavat käyttöliittymän. Lisäksi pakettiin kuuluu SimpleServer, joka toteuttaa yksinkertaisen käyttäjän selainta palvelevan web-palvelimen ja FrontControllerServlet, joka ohjaa sisääntulevat kutsut oikealle sivulle. 4.8 Muut luokat Yllämainittujen alipakettien lisäksi paketti lmodels sisältää kolme Java-luokkaa, jotka ovat main-metodin sisältävinä luokkina tarkoitettu käynnistämään järjestelmä eri toimintamuotoihin eli komentorivityökaluna, palvelimena ja asiakasohjelmana. 17

20 5 Hylätyt ratkaisut Projektissa tuli eteen tullut kohtuullinen määrä valintatilanteita, joissa on otettu kantaa teknisen toteutuksen moniin kohtiin alkaen kääntäjän tuottamiseen käytettävistä työkaluista aina kokonaistason arkkitehtuuriin. 5.1 Kääntäjän tuottamistyökalut Ensimmäisenä asiana on translaattorin luomisessa apuna käytettävät kääntäjän tuottamistyökalut, joiksi päätettiin ottaa CUP ja JLex. Näiden vaihtoehtona oli kehittyneempi, myös itsensä Sunin tukema Open Source työkalu JavaCC, joka on sekä jäsentäjän että selaimen generoiva työkalu. Emme kuitenkaan valinneet tätä mentorimmekin suosittelemaa työkalua, vaan käytämme jäsentäjän generointiin CUP:ia ja selaimen generointiin JLex:iä, koska asiakkaamme oli vanhempien työkalujen puolella ja ryhmällä itsellään on kokemusta niiden käytöstä päinvastoin kuin JavaCC:n kohdalla. 5.2 Lineaarinen ratkaisija Toinen hylkäävä ratkaisu on myös tehty lineaarisen ratkaisijan kohdalla, sillä ratkaisijaksi oli GLPK:n lisäksi tarjolla Javalla toteutettu lp_solve. Vaikka tätä ratkaisua olisi voinut puolustaa toteutuskielen yhtenäisyydellä, niin hylkäämiseen johtaneet seikat veivät voiton. Nimittäin vaikka lp_solve on toteutettu Javalla, niin se vaikutti tehdyn automaattisesti aikaisemmasta C-toteutuksesta. Myöskään sen ylläpidosta ei ollut minkäänlaisia takeita, sillä sen toteuttamiseen käytetty Java-versiokin oli jo aika vanha. 5.3 Järjestelmän arkkitehtuuri päätasolla Suunnitteluvaiheessa oli esillä suuremmista kokonaisuuksista koostuva arkkitehtuuri järjestelmän toteuttamiseksi. Tästä kuitenkin luovuttiin, koska nämä suuremmat kokonaisuudet koettiin liian raskaiksi ja kömpelöiksi, joten lopullisen arkkitehtuurin kohdalla päädyttiin käyttämään pienemmistä osista koostuvaa ketjua, jonka lisäksi järjestelmässä on erillinen logiikka, joka ohjaa ketjun käyttäytymistä. Tällöin tämä logiikka voi jättää vaikka osan ketjusta pois, mikäli sisään syötetään jo osin käsiteltyä syötettä, kuten esimerkiksi normalisoitu malli. 5.4 Palvelinohjelmisto servlettien ajamiseksi Ryhmä päätti luopua Tomcatista sen suuren koon ja raskauden vuoksi. Sen sijaan servlettejä ajetaan Jettyllä, joka on toinen vapaan ohjelmakehityksen aikaansaama servleteille kirjoitettu palvelinohjelmisto. 18

21 Liite A - Normalisointimalli Yleistä Tämän dokumentin tarkoitus on kuvata algoritmia, jolla normalisointi tapahtuu. Tässä dokumentissa on pyritty ymmärrettävyyteen matemaattisen eksaktiuden sijasta. (Ei siis TKK-tyyliä, jossa väännetään kaavaa ja ymmärtäminen on kuulijan ongelma.) Tätä dokumenttia ei kannata käyttää virheiden etsimiseen mallista, koska ohjelmakoodia on testattu aika paljon toisin kuin tätä dokumenttia, joten todennäköisesti virhe on tässä dokumentissa eikä ohjelmakoodissa. Tätä dokumenttia sen sijaan kannattaa käyttää mallin ymmärtämisen tukena tai apuna sen määrittelemiseen mitä voisi tehdä tehokkaammin. Algoritmin toiminta Normalisointi jakaantuu 3 vaiheeseen. Ensimmäisessä vaiheessa luetaan muuttujat typpeineen ja rajoineen. Seuraavassa luetaan itse lausekkeet käyttäen apuna muuttujien tyyppejä ja rajoja. Muuttujia, joita ei ole määritelty, ei hyväksytä, vaan heitetään poikkeus, jos niitä ilmenee. Näistä rakennetaan puu alkaen lehdistä. Jokainen puun alkio luodaan nodes-paketin getnew-metodilla, jolle annetaan parametreinä sen alipuut. Puussa jokaisella alkiolla on 0-2 alialkiota, joten se on eräänlainen binääripuu. Kaikki operaattorit siis yksi- tai kaksioperandisia ts. kaava a+b+c+d on meidän kannaltamme (a+(b+(c+d))) (voi olla muutakin, mutta se muu supistetaan tuohon muotoon edempänä tulevilla kaavoilla.) Edellä mainitut getnew-metodit hoitavat yleiset supistukset, eivätkä aina palauta sen luokan instanssia, joille ne on kutsuttu vaan voivat supistaa lauseketta, niin että tuloksena on toisen luokan instanssi. Tässä on kuvattu yksinkertaistetusti säännöt, joiden avulla alkiot muutetaan. Säännöt käydään järjestyksessä päättyen ensimmäiseen sääntöön, joka sopii. Sääntö johtaa usein uuden lausekkeen osan luontiin, joka johtaa taas uusien sääntöjen soveltamiseen sen osille joko samasta tai toisesta operaattorista. Lauseke käsitellään siis aina alkaen lehdistä päättyen juureen. Säännöt eri lausekkeen osille: And: false and a _korvataan_ false a and false _korvataan_ false a and true _korvataan_ a, true and b _korvataan_ b a and (a and xx) _korvataan_ (a and xx) a and (not a and b) _korvataan_ false K and K _korvataan_ K K and not K _korvataan_ false a and (a and xx) _korvataan_ (a and xx) a and (... a and (xx)...) _korvataan_ (... a and (xx)...) a and (... and (a and..)) _korvataan_ (... and (a and...)) 19

22 a and (not a and xx) _korvataan_ false a and (... and (not a and xx)) _korvataan_ false (a and b) and xxx _korvataan_ (a and (b and xxx)) E and C _korvataan_ C and E (järjestäminen, vain muuttujille) E and (C and xxx) _korvataan_ C and (E and xxx) (järjestäminen, vain muuttujille) Muutoin: a and b Or: true or a _korvataan_ true a or true _korvataan_ true false or K _korvataan_ K K or K _korvataan_ K K or not K _korvataan_ true a or (a or xx) _korvataan_ (a or xx) a or (... or (a or xx)) _korvataan_ (... (a or xx)) a or (not a or xx) _korvataan_ true a or (not a or xx) _korvataan_ true a or (... not a or...) _korvataan_ true (a or b) or xxx _korvataan_ (a or(b or xxx)) E or C _korvataan_ C or E (järjestäminen,vain muuttujille) E or (C or xxx) _korvataan_ C or (E or xxx) (järjestäminen,vain muuttujille) Not: not(not(a)) _korvataan_ a not(xx and yy) _korvataan_ not(xx) or not(yy) not(xx or yy) _korvataan_ not(xx) and not(yy) not( a) _korvataan_ not a (vain muuttujille) not( not a) _korvataan_ a (vain muuttujille) muutoin: (ei tapahdu) not ( a) "not a" tarkoitaa tässä boolean muuttujan a instanssia, joka on invertoitu. not ( a) tarkoittaa not operaattoria operandilla a. Xor: a xor b _korvataan_ ((a or b) and ((not a) and (not b)) Implies: a implies b _korvataan_ (not a) or b Equiv: a equiv b _korvataan_ (not a) xor b Mul: (kertolasku) jos a * b, missä a tai b ei ole vakio, heitetään poikkeus. 3 * 2 _korvataan_ 6 3 * a _korvataan_ 3a a * 3 _korvataan_ 3a 3 * ((x) + (y)) _korvataan_ 3 * (x) + 3 * (y) 20

23 ((x) + (y)) * 3 _korvataan_ 3 * (x) + 3 * (y) muutoin (ei tapahdu) a * b Mikäli kahden muuttujan kertolaskua tavataan, niin heitetään poikkeus epälineaarisesta mallista, ellei sen salliva parametri ole asetettu. Parametrin asettamisesta ei kuitenkaan ole hyötyä, sillä Lmodels ei osaa käsitellä epälineaarisia malleja. Tämä on vain tulevaisuutta varten. 3a tarkoittaa muuttujaa a, johon on sisällytetty kerroin 3. Kaikilla numeeristen muuttujien instansseilla on kertoimet. Add: (yhteenlasku) 2+3 _korvataan_ 5 3a+5a _korvataan_ 8a (b+c)+d _korvataan_ b+(c+d) E + C _korvataan_ C + E 3+(4+xxx) _korvataan_ 7+xxx 2A + (3A + xxx) _korvataan_ 5a+xxx E + (C + xxx) _korvataan_ C + (E + xxx) muutoin a + b Div: (jakolasku) a/4 _korvataan_ 0.25a 1/4 _korvataan_ 0.25 Muuttujalla jakamista ei tueta, koska se ei ole lineaarista, ellei epälineaarisuden sallivaa parametria ole asetettu. Kolmas vaihe on että tehdään itse normalisointi. Se tehdään vain muutaman säännön pohjalta. Täytyy huomata, että aina kun luodaan uusia edellä mainittuja olioita, niin aiempinen supistussäntöjen mukaiset operaatiot tehdään myös siinä. Normalisointi konjuktiiviseen muotoon (CNF): (al and ar) or b _korvataan_ (al or b) and (ar or b) PAITSI jos al == b, niin _korvataan_ ar or b tai jos ar == b, niin _korvataan_ al or b a or (bl and br) _korvataan_ (br or a) and (bl or a) PAITSI jos a == bl _korvataan_ (a or br) tai jos a == br _korvataan_ (a or bl) Normalisointi disjunktiivisen muotoon (DNF): (al and ar) or b _korvataan_ (al or b) and (ar or b) paitsi jos b == al tai b == ar, niin _korvataan_ b a or (bl and br) _korvataan_ (br or a) and (bl or a) paitsi jos a == bl tai a == br, niin _korvatan_ a 21

24 Liite B - Modeller Muodostetaan rajoitteet disjunktioille tai konjunktioille sekä rajat muuttujille, kun X on kaikkien boolean-muuttujien joukko, X on niiden boolean-muuttujien joukko, jotka ovat kiinnitettyjä johonkin arvoon x, Y on kaikkien kokonaislukuja liukulukumuuttujien joukko ja Y on niiden kokonaisluku- ja liukulukumuuttujien joukko, jotka ovat kiinnitettyjä johonkin arvoon y. Tavoitefunktio ja kokonaislukumääritykset annetaan ylemmällä tasolla. Muuttujat x, z ja w ovat 0-1-muuttujia, kun taas muuttujat y ovat osin kokonaislukumuuttujia ja osin liukulukumuuttujia. K = 0, Z =, W = Jokaiselle lausekkeelle E i, joka on joko disjunktio D i tai konjunktio C i X + =, X - =, Z + =, Z - = Jokaiselle lausekkeelle B ij lausekkeessa E i Jos B ij on x h X + = X + {h} Muutoin jos B ij on x h X - = X - {h} Muutoin c l ij = h aijh > 0 a ijh * y l h + h aijh < 0 a ijh * y u h c u ij = h aijh > 0 a ijh * y u h + h aijh < 0 a ijh * y l h. K = K + 1 Z = Z {K} Jos B ij on ( h a ijh * y h c ij ) Muodosta { h a ijh * y h (c ij c l ij) * z K c l ij} Z + = Z + {K} Muutoin jos B ij on ( h a ijh * y h c ij ) ja Muodosta { h a ijh * y h + (c ij c l ij) * z K c ij } Z - = Z - {K} Muutoin jos B ij on ( h a ijh * y h c ij ) Muodosta { h a ijh * y h (c ij c u ij) * z K c u ij} Z + = Z + {K} Muutoin jos B ij on ( h a ijh * y h c ij ) Muodosta { h a ijh * y h + (c ij c u ij) * z K c ij } Z - = Z - {K} Seuraava lauseke B ij Jos E i on disjunktio

25 Muodosta { h X+ x h h X- x h + k Z+ z k k Z- z k 1 X - Z - } Muutoin jos E i on konjunktio W = W {i} Muodosta { h X+ x h h X- x h + k Z+ z k k Z- z k X + Z + X - Z - * w i X - Z - } Seuraava lauseke E i Jos W Muodosta { i W w i 1} Jokaiselle muuttujalle x h X Seuraava x h Jos x h X Muodosta {x h x h x h } Muutoin Muodosta {0 x h 1} Jokaiselle muuttujalle z k Z Seuraava z k Muodosta {0 z k 1} Jokaiselle muuttujalle w i W Seuraava w i Muodosta {0 w i 1} Jokaiselle muuttujalle y h Y Jos y h Y Muodosta {y h y h y h } Seuraava y h Muutoin Muodosta {y l h y h y u h} Esimerkki Olkoon esimerkkitehtävä seuraavaa muotoa: Y 1 [0,3] Y 2 [1,4] X (Y 1 Y 2 < 2) ja Y 1 kiinnitetty arvoon 1. Konjunktiivinen normaalimuoto: ( X (Y 1 Y 2 2)) (X (Y 1 Y 2 2)) Etsitään X:lle alaraja: min x

26 y 1 y 2 + (2 (0 4)) * z 1 2 x z y 1 y 2 (2 (0 4)) * z x + z x 1 0 z z y y 2 4 Disjunktiivinen normaalimuoto: X (Y 1 Y 2 2)) ( X (Y 1 Y 2 2)) Etsitään Y 1 :lle yläraja: max y 1 y 1 y 2 + (2 (0 4)) * z 1 2 x z 1 2 * w 1 1 y 1 y 2 (2 (0 4)) * z x + z 2 2 * w 2 1 w 1 + w x 1 0 z z w w y y 2 4

27 Liite C - Solver Olkoon X kaikkien, X kiinnitettyjen (x h = x h ) boolean-muuttujien, Y I kaikkien kokonaislukumuuttujien, Y F kaikkien liukulukumuuttujien sekä kiinnitettyjen Y (y h = y h ) kokonais- ja liukulukumuuttujien joukko. Lisäksi olemassa voi olla kaikkien apumuuttujien Z ja W joukot. Muuttujien X ja Y = Y I Y F ala- ja ylärajat x l h ja x u h sekä y l h ja y u h ratkaistaan annetulla tarkkuustasolla, joka on joko mikään muuttuja X, Y, Z ja W ei ole integer tai X, Z ja W ovat vain integer tai X, Y I, Z ja W ovat integer. Syöte x h jokaiselle X ja y h jokaiselle Y (Jos x h null se kuuluu joukkoon X Jos y h null se kuuluu joukkoon Y ) Tee Modellerilla malli M, jossa kiinnitettyjä X ja Y Jokaiselle x h X \ X x u h = x l h = null Ratkaise x h tavoitteella {min x h } mallin M suhteen Jos x h = null LopetusIlmanRajoja x l h = [x h ] + Ratkaise x h tavoitteella {max x h } mallin M suhteen x u h = [x h ] - Jos x l h > x u h LopetusIlmanRajoja Seuraava x h Jokaiselle y h Y I \ Y y u h = y l h = null Ratkaise y h tavoitteella {min y h } mallin M suhteen Jos y h = null LopetusIlmanRajoja y l h = [y h ] + Ratkaise y h tavoitteella {max y h } mallin M suhteen y u h = [y h ] - Jos y l h > y u h LopetusIlmanRajoja Seuraava y h Jokaiselle y h Y F \ Y y u h = y l h = null Ratkaise y h tavoitteella {min y h } mallin M suhteen Jos y h = null LopetusIlmanRajoja y l h = y h Ratkaise y h tavoitteella {max y h } mallin M suhteen y u h = y h- Seuraava y h Jokaiselle x h X Tee Modellerilla malli M, jossa kiinnitettyjä X \ {x h } ja Y x u h = x l h = null Ratkaise x h tavoitteella {min x h } mallin M suhteen Jos x h = null LopetusIlmanRajoja x l h = [x h ] + Ratkaise x h tavoitteella {max x h } mallin M suhteen x u h = [x h ] - Jos x l h > x u h LopetusIlmanRajoja Seuraava x h

28 Jokaiselle y h Y Y I Tee Modellerilla malli M, jossa kiinnitettyjä X ja Y \ {y h } y u h = y l h = null Ratkaise y h tavoitteella {min y h } mallin M suhteen Jos y h = null LopetusIlmanRajoja y l h = [y h ] + Ratkaise y h tavoitteella {max y h } mallin M suhteen y u h = [y h ] - Jos y l h > y u h LopetusIlmanRajoja Seuraava y h Jokaiselle y h Y Y F Tee Modellerilla malli M, jossa kiinnitettyjä X ja Y \ {y h } y u h = y l h = null Ratkaise y h tavoitteella {min y h } mallin M suhteen Jos y h = null LopetusIlmanRajoja y l h = y h Ratkaise y h tavoitteella {max y h } mallin M suhteen y u h = y h- Seuraava y h Tee malli M, jossa kiinnitettyjä X ja Y, käytössä rajat x l h ja x u h muuttujille X \ X sekä y l h ja y u h muuttujille Y \ Y, kun X, Y I, Z ja W ovat integer. Ratkaise x * h kaikille joukossa X ja y * h kaikille joukossa Y tavoitteella {min 0} mallin M suhteen Jos ratkaisu löytyi Tuloste x * h, x l h ja x u h jokaiselle X sekä y * h, y l h ja y u h jokaiselle Y Tuloste x * h = null, x l h ja x u h jokaiselle X sekä y * h = null, y l h ja y u h jokaiselle Y LopetusIlmanRajoja: Tuloste x * h = x l h = x u h = null jokaiselle X sekä y * h = y l h = y u h = null jokaiselle Y Huom!!! [a] + pyöristää a:n yhtä suureen tai lähimpään suurempaan kokonaislukuun [a] - pyöristää a:n yhtä suureen tai lähimpään pienempään kokonaislukuun

L models. Tekninen määrittely. Ryhmä Rajoitteiset

L models. Tekninen määrittely. Ryhmä Rajoitteiset Teknillinen Korkeakoulu T-76.115 Tietojenkäsittelyopin ohjelmatyö Lineaaristen rajoitteiden tyydyttämistehtävän ratkaisija L models Tekninen määrittely Ryhmä Rajoitteiset Versio Päivämäärä Tekijä Muutokset

Lisätiedot

Lmodels. Tekninen määrittely. Ryhmä Rajoitteiset

Lmodels. Tekninen määrittely. Ryhmä Rajoitteiset Teknillinen korkeakoulu T-76.115 Tietojenkäsittelyopin ohjelmatyö Lineaaristen rajoitteiden tyydyttämistehtävän ratkaisija Lmodels Tekninen määrittely Ryhmä Rajoitteiset Versio Päivämäärä Tekijä Muutokset

Lisätiedot

L models. Vaatimusmäärittely. Ryhmä Rajoitteiset

L models. Vaatimusmäärittely. Ryhmä Rajoitteiset Teknillinen Korkeakoulu T-76.5 Tietojenkäsittelyopin ohjelmatyö Lineaaristen rajoitteiden tyydyttämistehtävän ratkaisija L models Vaatimusmäärittely Ryhmä Rajoitteiset Versio Päivämäärä Tekijä Muutokset

Lisätiedot

L models. Käyttöohje. Ryhmä Rajoitteiset

L models. Käyttöohje. Ryhmä Rajoitteiset Teknillinen korkeakoulu T-76.115 Tietojenkäsittelyopin ohjelmatyö Lineaaristen rajoitteiden tyydyttämistehtävän ratkaisija L models Käyttöohje Ryhmä Rajoitteiset Versio Päivämäärä Tekijä Muutokset 0.1

Lisätiedot

L models. Vaatimusmäärittely. Ryhmä Rajoitteiset

L models. Vaatimusmäärittely. Ryhmä Rajoitteiset Teknillinen korkeakoulu T-76.5 Tietojenkäsittelyopin ohjelmatyö Lineaaristen rajoitteiden tyydyttämistehtävän ratkaisija L models Vaatimusmäärittely Ryhmä Rajoitteiset Versio Päivämäärä Tekijä Muutokset

Lisätiedot

Digi-tv vastaanottimella toteutetut interaktiiviset sovellukset

Digi-tv vastaanottimella toteutetut interaktiiviset sovellukset Tekninen määrittely: Editori Digi-tv vastaanottimella toteutetut interaktiiviset sovellukset Sisällysluettelo 1. Johdanto...4 1.1. Tarkoitus ja kattavuus...4 1.2. Tuote ja ympäristö...4 1.3. Määritelmät,

Lisätiedot

Käyttäjien tunnistaminen ja käyttöoikeuksien hallinta hajautetussa ympäristössä

Käyttäjien tunnistaminen ja käyttöoikeuksien hallinta hajautetussa ympäristössä www.niksula.cs.hut.fi/~jjkankaa// Demosovelluksen tekninen määrittely v. 0.6 Päivitetty 11.12.2000 klo 20:26 Mickey Shroff 2 (12) Dokumentin versiohistoria Versio Päivämäärä Tekijä / muutoksen tekijä Selite

Lisätiedot

13. Loogiset operaatiot 13.1

13. Loogiset operaatiot 13.1 13. Loogiset operaatiot 13.1 Sisällys Loogiset operaatiot AND, OR, XOR ja NOT. Operaatioiden ehdollisuus. Bittioperaatiot. Loogiset operaatiot ohjausrakenteissa. Loogiset operaatiot ja laskentajärjestys.

Lisätiedot

Vasen johto S AB ab ab esittää jäsennyspuun kasvattamista vasemmalta alkaen:

Vasen johto S AB ab ab esittää jäsennyspuun kasvattamista vasemmalta alkaen: Vasen johto S AB ab ab esittää jäsennyspuun kasvattamista vasemmalta alkaen: S A S B Samaan jäsennyspuuhun päästään myös johdolla S AB Ab ab: S A S B Yhteen jäsennyspuuhun liittyy aina tasan yksi vasen

Lisätiedot

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 2 vastaukset Harjoituksen aiheena on BNF-merkinnän käyttö ja yhteys rekursiivisesti etenevään jäsentäjään. Tehtävä 1. Mitkä ilmaukset seuraava

Lisätiedot

Valppaan asennus- ja käyttöohje

Valppaan asennus- ja käyttöohje Versio Päiväys Muokkaaja Kuvaus 0.9 16.2.2006 Tuukka Laakso Korjattu versio 0.1 Antti Kettunen Alustava versio Sisällysluettelo 1 Johdanto...2 2 Valppaan asennus...3 2.1 Valppaan kääntäminen...3 2.2 Valmiiksi

Lisätiedot

Ohjelmistojen mallintaminen, mallintaminen ja UML

Ohjelmistojen mallintaminen, mallintaminen ja UML 582104 Ohjelmistojen mallintaminen, mallintaminen ja UML 1 Mallintaminen ja UML Ohjelmistojen mallintamisesta ja kuvaamisesta Oliomallinnus ja UML Käyttötapauskaaviot Luokkakaaviot Sekvenssikaaviot 2 Yleisesti

Lisätiedot

tään painetussa ja käsin kirjoitetussa materiaalissa usein pienillä kreikkalaisilla

tään painetussa ja käsin kirjoitetussa materiaalissa usein pienillä kreikkalaisilla 2.5. YDIN-HASKELL 19 tään painetussa ja käsin kirjoitetussa materiaalissa usein pienillä kreikkalaisilla kirjaimilla. Jos Γ ja ovat tyyppilausekkeita, niin Γ on tyyppilauseke. Nuoli kirjoitetaan koneella

Lisätiedot

13. Loogiset operaatiot 13.1

13. Loogiset operaatiot 13.1 13. Loogiset operaatiot 13.1 Sisällys Loogiset operaatiot AND, OR, XOR ja NOT. Operaatioiden ehdollisuus. Bittioperaatiot. Loogiset operaatiot ohjausrakenteissa. Loogiset operaatiot ja laskentajärjestys.

Lisätiedot

Harjoitus 6 (viikko 42)

Harjoitus 6 (viikko 42) Nämä ovat kurssin viimeiset harjoitukset. Hyväksytyistä ratkaisuista ja läsnäoloista kerättyjen pisteiden summan tulee olla vähintään 40 % ( pistettä) tehtävien ja läsnäolopisteiden kokonaislukumäärien

Lisätiedot

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. IX Suunnittelumallit Proxy, Factory Method, Prototype ja Singleton

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. IX Suunnittelumallit Proxy, Factory Method, Prototype ja Singleton 2015 syksy 2. vsk IX Suunnittelumallit Proxy, Factory Method, Prototype ja Singleton Sisältö 1. Johdanto luontimalleihin 2. Proxy 3. Factory Method 4. Prototype 5. Singleton Suunnittelumallit Proxy et.

Lisätiedot

Ohjelmoinnin jatkokurssi, kurssikoe 28.4.2014

Ohjelmoinnin jatkokurssi, kurssikoe 28.4.2014 Ohjelmoinnin jatkokurssi, kurssikoe 28.4.2014 Kirjoita jokaiseen palauttamaasi konseptiin kurssin nimi, kokeen päivämäärä, oma nimi ja opiskelijanumero. Vastaa kaikkiin tehtäviin omille konsepteilleen.

Lisätiedot

11.4. Context-free kielet 1 / 17

11.4. Context-free kielet 1 / 17 11.4. Context-free kielet 1 / 17 Määritelmä Tyypin 2 kielioppi (lauseyhteysvapaa, context free): jos jokainenp :n sääntö on muotoa A w, missäa V \V T jaw V. Context-free kielet ja kieliopit ovat tärkeitä

Lisätiedot

Olion elinikä. Olion luominen. Olion tuhoutuminen. Olion tuhoutuminen. Kissa rontti = null; rontti = new Kissa();

Olion elinikä. Olion luominen. Olion tuhoutuminen. Olion tuhoutuminen. Kissa rontti = null; rontti = new Kissa(); Sisällys 7. Oliot ja viitteet Olio Java-kielessä. Olion luominen, elinikä ja tuhoutuminen. Viitteiden käsittelyä: sijoitus, vertailu ja varautuminen null-arvoon. Viite metodin paluuarvona.. 7.1 7.2 Olio

Lisätiedot

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A274615 JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++?

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A274615 JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++? JAVA-OHJELMOINTI 3op A274615 JAVAN PERUSTEET LYHYT KERTAUS Teemu Saarelainen teemu.saarelainen@kyamk.fi Lähteet: http://java.sun.com/docs/books/tutorial/index.html Vesterholm, Kyppö: Java-ohjelmointi,

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 15.3.2010 T-106.1208 Ohjelmoinnin perusteet Y 15.3.2010 1 / 56 Tiedostoista: tietojen tallentaminen ohjelman suorituskertojen välillä Monissa sovelluksissa ohjelman

Lisätiedot

TEKNINEN MÄÄRITTELY Virtuaaliyhteisöjen muodostaminen Versio 1.0 (Luonnos 2)

TEKNINEN MÄÄRITTELY Virtuaaliyhteisöjen muodostaminen Versio 1.0 (Luonnos 2) TEKNINEN MÄÄRITTELY Edited by Checked by Approved by Tuomo Marttila Luonnos 1 Tekninenmäärittely i Sisällysluettelo 1. JOHDANTO 2 1.1. Tarkoitus ja kattavuus 2 1.2. Tuote ja ympäristö 2 1.3. Määritelmät,

Lisätiedot

System.out.printf("%d / %d = %.2f%n", ekaluku, tokaluku, osamaara);

System.out.printf(%d / %d = %.2f%n, ekaluku, tokaluku, osamaara); Mikäli tehtävissä on jotain epäselvää, laita sähköpostia vastuuopettajalle (jorma.laurikkala@uta.fi). Muista nimetä muuttujat hyvin sekä kommentoida ja sisentää koodisi. Ohjelmointitehtävien osalta palautetaan

Lisätiedot

CODEONLINE. Monni Oo- ja Java-harjoituksia. Version 1.0

CODEONLINE. Monni Oo- ja Java-harjoituksia. Version 1.0 CODEONLINE Monni Oo- ja Java-harjoituksia Version 1.0 Revision History Date Version Description Author 25.10.2000 1.0 Initial version Juha Johansson Inspection History Date Version Inspectors Approved

Lisätiedot

Harjoitus 3 (viikko 39)

Harjoitus 3 (viikko 39) Mikäli tehtävissä on jotain epäselvää, laita sähköpostia vastuuopettajalle (jorma.laurikkala@uta.fi). Muista nimetä muuttujat hyvin sekä kommentoida ja sisentää koodisi. Vältä liian pitkiä rivejä. Ohjelmointitehtävien

Lisätiedot

815338A Ohjelmointikielten periaatteet Harjoitus 4 vastaukset

815338A Ohjelmointikielten periaatteet Harjoitus 4 vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 4 vastaukset Harjoituksen aiheena ovat imperatiivisten kielten lauseisiin, lausekkeisiin ja aliohjelmiin liittyvät kysymykset. Tehtävä 1. Mitä

Lisätiedot

15. Ohjelmoinnin tekniikkaa 15.1

15. Ohjelmoinnin tekniikkaa 15.1 15. Ohjelmoinnin tekniikkaa 15.1 Sisällys For-each-rakenne. Geneerinen ohjelmointi. Lueteltu tyyppi enum. 15.2 For-each-rakenne For-rakenteen variaatio taulukoiden ja muiden kokoelmien silmukoimiseen:

Lisätiedot

Sisällys. 17. Ohjelmoinnin tekniikkaa. Aritmetiikkaa toisin merkiten. for-lause lyhemmin

Sisällys. 17. Ohjelmoinnin tekniikkaa. Aritmetiikkaa toisin merkiten. for-lause lyhemmin Sisällys 17. Ohjelmoinnin tekniikkaa for-lause lyhemmin. Vaihtoehtoisia merkintöjä aritmeettisille lauseille. Useiden muuttujien esittely ja alustaminen yhdellä lauseella. if-else-lause vaihtoehtoisesti

Lisätiedot

System.out.printf("%d / %d = %.2f%n", ekaluku, tokaluku, osamaara);

System.out.printf(%d / %d = %.2f%n, ekaluku, tokaluku, osamaara); Kysy Karilta tai Kimmolta, jos tehtävissä on jotain epäselvää. Kerro WETOon liittyvät ongelmat suoraan Jormalle sähköpostitse (jorma.laurikkala@uta.fi). Muista nimetä muuttujat hyvin sekä kommentoida ja

Lisätiedot

582203 Tietokantasovellus (4 op) - Web-sovellukset ja niiden toteutus

582203 Tietokantasovellus (4 op) - Web-sovellukset ja niiden toteutus 582203 Tietokantasovellus (4 op) - Web-sovellukset ja niiden toteutus Sisältö Mikä on web-sovellus? Selaimen rooli web-sovelluksessa Palvelimen rooli web-sovelluksessa Aineistopyynnöt Tiedon välittäminen

Lisätiedot

Sisällys. 7. Oliot ja viitteet. Olion luominen. Olio Java-kielessä

Sisällys. 7. Oliot ja viitteet. Olion luominen. Olio Java-kielessä Sisälls 7. Oliot ja viitteet Olio Java-kielessä. Olion luominen, elinikä ja tuhoutuminen.. Viitteiden vertailu. Varautuminen null-arvoon. Viite metodin paluuarvona.. Muuttumattomat ja muuttuvat merkkijonot.

Lisätiedot

Yhtälöryhmä matriisimuodossa. MS-A0004/A0006 Matriisilaskenta. Tarkastellaan esimerkkinä lineaarista yhtälöparia. 2x1 x 2 = 1 x 1 + x 2 = 5.

Yhtälöryhmä matriisimuodossa. MS-A0004/A0006 Matriisilaskenta. Tarkastellaan esimerkkinä lineaarista yhtälöparia. 2x1 x 2 = 1 x 1 + x 2 = 5. 2. MS-A4/A6 Matriisilaskenta 2. Nuutti Hyvönen, c Riikka Kangaslampi Matematiikan ja systeemianalyysin laitos Aalto-yliopisto 5.9.25 Tarkastellaan esimerkkinä lineaarista yhtälöparia { 2x x 2 = x + x 2

Lisätiedot

Uutisjärjestelmä. Vaatimusmäärittely. Web-palvelujen kehittäminen. Versio 1.3

Uutisjärjestelmä. Vaatimusmäärittely. Web-palvelujen kehittäminen. Versio 1.3 Uutisjärjestelmä Vaatimusmäärittely Versio 1.3 Sisällys 1 Muutoshistoria... 4 2 Viitteet... 4 3 Sanasto... 4 3.1 Lyhenteet... 4 3.2 Määritelmät... 4 4 Johdanto...5 4.1 Järjestelmän yleiskuvaus... 5 4.2

Lisätiedot

Java-kielen perusteet

Java-kielen perusteet Java-kielen perusteet Tunnus, varattu sana, kommentti Muuttuja, alkeistietotyyppi, merkkijono, Vakio Tiedon merkkipohjainen tulostaminen Ohjelmointi (ict1tx006) Tunnus (5.3) Javan tunnus Java-kirjain Java-numero

Lisätiedot

15. Ohjelmoinnin tekniikkaa 15.1

15. Ohjelmoinnin tekniikkaa 15.1 15. Ohjelmoinnin tekniikkaa 15.1 Sisällys For-each-rakenne. Lueteltu tyyppi enum. Override-annotaatio. Geneerinen ohjelmointi. 15.2 For-each-rakenne For-rakenteen variaatio taulukoiden ja muiden kokoelmien

Lisätiedot

Suunnitteluvaihe prosessissa

Suunnitteluvaihe prosessissa Suunnittelu Suunnitteluvaihe prosessissa Silta analyysin ja toteutuksen välillä (raja usein hämärä kumpaankin suuntaan) Asteittain tarkentuva Analyysi -Korkea abstraktiotaso -Sovellusläheiset käsitteet

Lisätiedot

Alkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5)

Alkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5) Alkuarvot ja tyyppimuunnokset (1/5) Aiemmin olemme jo antaneet muuttujille alkuarvoja, esimerkiksi: int luku = 123; Alkuarvon on oltava muuttujan tietotyypin mukainen, esimerkiksi int-muuttujilla kokonaisluku,

Lisätiedot

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

812341A Olio-ohjelmointi Peruskäsitteet jatkoa 812341A Olio-ohjelmointi 2106 Peruskäsitteet jatkoa Luokkakohtaiset piirteet n Yhteisiä kaikille saman luokan olioille n Liittyvät luokkaan, eivät yksittäiseen olioon n Kaikki ko. luokan oliot voivat käyttää

Lisätiedot

ELM GROUP 04. Teemu Laakso Henrik Talarmo

ELM GROUP 04. Teemu Laakso Henrik Talarmo ELM GROUP 04 Teemu Laakso Henrik Talarmo 23. marraskuuta 2017 Sisältö 1 Johdanto 1 2 Ominaisuuksia 2 2.1 Muuttujat ja tietorakenteet...................... 2 2.2 Funktiot................................

Lisätiedot

IDL - proseduurit. ATK tähtitieteessä. IDL - proseduurit

IDL - proseduurit. ATK tähtitieteessä. IDL - proseduurit IDL - proseduurit 25. huhtikuuta 2017 Viimeksi käsiteltiin IDL:n interaktiivista käyttöä, mutta tämä on hyvin kömpelöä monimutkaisempia asioita tehtäessä. IDL:llä on mahdollista tehdä ns. proseduuri-tiedostoja,

Lisätiedot

Sisällys. 6. Metodit. Oliot viestivät metodeja kutsuen. Oliot viestivät metodeja kutsuen

Sisällys. 6. Metodit. Oliot viestivät metodeja kutsuen. Oliot viestivät metodeja kutsuen Sisällys 6. Metodit Oliot viestivät metodeja kutsuen. Kuormittaminen. Luokkametodit (ja -attribuutit).. Metodien ja muun luokan sisällön järjestäminen. 6.1 6.2 Oliot viestivät metodeja kutsuen Oliot viestivät

Lisätiedot

T harjoitustyö, kevät 2012

T harjoitustyö, kevät 2012 T-110.4100 harjoitustyö, kevät 2012 Kurssiassistentit T-110.4100@tkk.fi Tietotekniikan laitos Perustieteiden korkeakoulu Aalto-yliopisto 31.1.2012 Yleistä Kurssin osasuoritteita ovat kaksi osatenttiä,

Lisätiedot

ATK tähtitieteessä. Osa 3 - IDL proseduurit ja rakenteet. 18. syyskuuta 2014

ATK tähtitieteessä. Osa 3 - IDL proseduurit ja rakenteet. 18. syyskuuta 2014 18. syyskuuta 2014 IDL - proseduurit Viimeksi käsiteltiin IDL:n interaktiivista käyttöä, mutta tämä on hyvin kömpelöä monimutkaisempia asioita tehtäessä. IDL:llä on mahdollista tehdä ns. proseduuri-tiedostoja,

Lisätiedot

4.12.2005. SEPA REFAKTOROINTI Antti Ahvenlampi, 57408L Erik Hakala, 57509T

4.12.2005. SEPA REFAKTOROINTI Antti Ahvenlampi, 57408L Erik Hakala, 57509T SEPA REFAKTOROINTI Antti Ahvenlampi, 57408L Erik Hakala, 57509T SEPA: REFAKTOROINTI 2 (9) SEPA: REFAKTOROINTI 3 (9) VERSIOHISTORIA Version Date Author Description 0.1 2.12.2005 Erik Hakala Ensimmäinen

Lisätiedot

Rekursiolause. Laskennan teorian opintopiiri. Sebastian Björkqvist. 23. helmikuuta Tiivistelmä

Rekursiolause. Laskennan teorian opintopiiri. Sebastian Björkqvist. 23. helmikuuta Tiivistelmä Rekursiolause Laskennan teorian opintopiiri Sebastian Björkqvist 23. helmikuuta 2014 Tiivistelmä Työssä käydään läpi itsereplikoituvien ohjelmien toimintaa sekä esitetään ja todistetaan rekursiolause,

Lisätiedot

Ylläpitodokumentti. Boa Open Access. Helsinki 2.5.2006 Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Ylläpitodokumentti. Boa Open Access. Helsinki 2.5.2006 Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Ylläpitodokumentti Boa Open Access Helsinki 2.5.2006 Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Kurssi 581260 Ohjelmistotuotantoprojekti (6 ov) Projektiryhmä Ilmari

Lisätiedot

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 30. marraskuuta 2015

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 30. marraskuuta 2015 TIEA241 Automaatit ja kieliopit, syksy 2015 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 30. marraskuuta 2015 Sisällys t Väitöstilaisuus 4.12.2015 kello 12 vanhassa juhlasalissa S212 saa tulla 2 demoruksia

Lisätiedot

T kevät 2007 Laskennallisen logiikan jatkokurssi Laskuharjoitus 1 Ratkaisut

T kevät 2007 Laskennallisen logiikan jatkokurssi Laskuharjoitus 1 Ratkaisut T-79.5101 kevät 2007 Laskennallisen logiikan jatkokurssi Laskuharjoitus 1 Ratkaisut 1. Jokaiselle toteutuvalle lauselogiikan lauseelle voidaan etsiä malli taulumenetelmällä merkitsemällä lause taulun juureen

Lisätiedot

Harjoitustyö: virtuaalikone

Harjoitustyö: virtuaalikone Harjoitustyö: virtuaalikone Toteuta alla kuvattu virtuaalikone yksinkertaiselle olio-orientoituneelle skriptauskielelle. Paketissa on testaamista varten mukana kaksi lyhyttä ohjelmaa. Ohjeita Noudata ohjelman

Lisätiedot

Aki Taanila LINEAARINEN OPTIMOINTI

Aki Taanila LINEAARINEN OPTIMOINTI Aki Taanila LINEAARINEN OPTIMOINTI 26.4.2011 JOHDANTO Tässä monisteessa esitetään lineaarisen optimoinnin alkeet. Moniste sisältää tarvittavat Excel ohjeet. Viimeisin versio tästä monisteesta ja siihen

Lisätiedot

5. HelloWorld-ohjelma 5.1

5. HelloWorld-ohjelma 5.1 5. HelloWorld-ohjelma 5.1 Sisällys Lähdekoodi. Lähdekoodin (osittainen) analyysi. Lähdekoodi tekstitiedostoon. Lähdekoodin kääntäminen tavukoodiksi. Tavukoodin suorittaminen. Virheiden korjaaminen 5.2

Lisätiedot

Sisällys. 16. Ohjelmoinnin tekniikkaa. Aritmetiikkaa toisin merkiten. Aritmetiikkaa toisin merkiten

Sisällys. 16. Ohjelmoinnin tekniikkaa. Aritmetiikkaa toisin merkiten. Aritmetiikkaa toisin merkiten Sisällys 16. Ohjelmoinnin tekniikkaa Vaihtoehtoisia merkintöjä aritmeettisille lauseille. Useiden muuttujien esittely ja alustaminen yhdellä lauseella. For-lause lyhemmin. If-else-lause vaihtoehtoisesti

Lisätiedot

Javan perusteita. Janne Käki

Javan perusteita. Janne Käki Javan perusteita Janne Käki 20.9.2006 Muutama perusasia Tietokone tekee juuri (ja vain) sen, mitä käsketään. Tietokone ymmärtää vain syntaksia (sanojen kirjoitusasua), ei semantiikkaa (sanojen merkitystä).

Lisätiedot

Java-kielen perusteet

Java-kielen perusteet Java-kielen perusteet Tunnus, varattu sana, kommentti Muuttuja, alkeistietotyyppi, merkkijono, literaalivakio, nimetty vakio Tiedon merkkipohjainen tulostaminen 1 Tunnus Java tunnus Java-kirjain Java-numero

Lisätiedot

16. Ohjelmoinnin tekniikkaa 16.1

16. Ohjelmoinnin tekniikkaa 16.1 16. Ohjelmoinnin tekniikkaa 16.1 Sisällys For-lause lyhemmin. Vaihtoehtoisia merkintöjä aritmeettisille lauseille. Useiden muuttujien esittely ja alustaminen yhdellä lauseella. If-else-lause vaihtoehtoisesti

Lisätiedot

Liite 1: KualiKSB skenaariot ja PoC tulokset. 1. Palvelun kehittäjän näkökulma. KualiKSB. Sivu 1. Tilanne Vaatimus Ongelma jos vaatimus ei toteudu

Liite 1: KualiKSB skenaariot ja PoC tulokset. 1. Palvelun kehittäjän näkökulma. KualiKSB. Sivu 1. Tilanne Vaatimus Ongelma jos vaatimus ei toteudu Liite 1: skenaariot ja PoC tulokset 1. Palvelun kehittäjän näkökulma Tilanne Vaatimus Ongelma jos vaatimus ei toteudu Palvelun uusi versio on Palveluiden kehittäminen voitava asentaa tuotantoon vaikeutuu

Lisätiedot

16. Ohjelmoinnin tekniikkaa 16.1

16. Ohjelmoinnin tekniikkaa 16.1 16. Ohjelmoinnin tekniikkaa 16.1 Sisällys Vaihtoehtoisia merkintöjä aritmeettisille lauseille. Useiden muuttujien esittely ja alustaminen yhdellä lauseella. For-lause lyhemmin. If-else-lause vaihtoehtoisesti

Lisätiedot

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Rajapinnat ja sisäluokat

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Rajapinnat ja sisäluokat Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Rajapinnat ja sisäluokat Rajapinnat Java-kieli ei tue luokkien moniperintää. Jokaisella luokalla voi olla vain yksi välitön yliluokka. Toisinaan olisi

Lisätiedot

Vaatimusmäärittely Ohjelma-ajanvälitys komponentti

Vaatimusmäärittely Ohjelma-ajanvälitys komponentti Teknillinen korkeakoulu 51 Vaatimusmäärittely Ohjelma-ajanvälitys komponentti Versio Päiväys Tekijä Kuvaus 0.1 21.11.01 Oskari Pirttikoski Ensimmäinen versio 0.2 27.11.01 Oskari Pirttikoski Lisätty termit

Lisätiedot

Olio-ohjelmointi Javalla

Olio-ohjelmointi Javalla 1 Olio-ohjelmointi Javalla Olio-ohjelmointi Luokka Attribuutit Konstruktori Olion luominen Metodit Olion kopiointi Staattinen attribuutti ja metodi Yksinkertainen ohjelmaluokka Ohjelmaluokka 1 Olio-ohjelmointi

Lisätiedot

T Testiraportti - järjestelmätestaus

T Testiraportti - järjestelmätestaus T-76.115 Testiraportti - järjestelmätestaus 18. huhtikuuta 2002 Confuse 1 Tila Versio: 1.0 Tila: Päivitetty Jakelu: Julkinen Luotu: 18.04.2002 Jani Myyry Muutettu viimeksi: 18.04.2002 Jani Myyry Versiohistoria

Lisätiedot

Sisällys. JAVA-OHJELMOINTI Osa 7: Abstrakti luokka ja rajapinta. Abstraktin luokan idea. Abstrakti luokka ja metodi. Esimerkki

Sisällys. JAVA-OHJELMOINTI Osa 7: Abstrakti luokka ja rajapinta. Abstraktin luokan idea. Abstrakti luokka ja metodi. Esimerkki Sisällys JAVA-OHJELMOINTI Osa 7: Abstrakti luokka ja rajapinta Abstrakti luokka ja metodi Rajapintamäärittely (interface) Eero Hyvönen Tietojenkäsittelytieteen laitos Helsingin yliopisto 13.10.2000 E.

Lisätiedot

Hakemistojen sisällöt säilötään linkitetyille listalle.

Hakemistojen sisällöt säilötään linkitetyille listalle. Harjoitustyö 1 Harjoitustyö Tehtävä: ohjelmoi Java-kielellä komentoikkunaa (komentotulkkia, komentoriviä) simuloiva olioperustainen ohjelma. Hakemistojen sisällöt säilötään linkitetyille listalle. Työ

Lisätiedot

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti:

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti: 1 (7) Tiedon lukeminen näppäimistöltä Scanner-luokan avulla Miten ohjelma saa käyttöönsä käyttäjän kirjoittamaa tekstiä? Järjestelmässä on olemassa ns. syöttöpuskuri näppäimistöä varten. Syöttöpuskuri

Lisätiedot

Harjoitus 6. Käytä String-luokasta vain charat- ja length-operaatioita.

Harjoitus 6. Käytä String-luokasta vain charat- ja length-operaatioita. Nämä ovat kurssin viimeiset harjoitukset. Hyväksytyistä ratkaisuista ja läsnäoloista kerättyjen pisteiden summan tulee olla vähintään 40 % ( pistettä) tehtävien ja läsnäolopisteiden kokonaislukumäärien

Lisätiedot

Korkeakoulujen prosessipalvelin: mallintajan palvelinohje Versio 0.2

Korkeakoulujen prosessipalvelin: mallintajan palvelinohje Versio 0.2 Korkeakoulujen prosessipalvelin: mallintajan palvelinohje Versio 0.2 Sisällysluettelo Muutoshistoria...3 1 Johdanto...4 2 Palvelimen käyttöön tarvittavat ohjelmat...4 3 Palvelimelle kirjautuminen...4 4

Lisätiedot

Ehto- ja toistolauseet

Ehto- ja toistolauseet Ehto- ja toistolauseet 1 Ehto- ja toistolauseet Uutena asiana opetellaan ohjelmointilauseet / rakenteet, jotka mahdollistavat: Päätösten tekemisen ohjelman suorituksen aikana (esim. kyllä/ei) Samoja lauseiden

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 20.1.2010 T-106.1208 Ohjelmoinnin perusteet Y 20.1.2010 1 / 40 Arvon pyytäminen käyttäjältä Käyttäjän antaman arvon voi lukea raw_input-käskyllä. Käskyn sulkujen

Lisätiedot

Harjoitustyön testaus. Juha Taina

Harjoitustyön testaus. Juha Taina Harjoitustyön testaus Juha Taina 1. Johdanto Ohjelman teko on muutakin kuin koodausta. Oleellinen osa on selvittää, että ohjelma toimii oikein. Tätä sanotaan ohjelman validoinniksi. Eräs keino validoida

Lisätiedot

Tyyppejä ja vähän muutakin. TIEA341 Funktio ohjelmointi 1 Syksy 2005

Tyyppejä ja vähän muutakin. TIEA341 Funktio ohjelmointi 1 Syksy 2005 Tyyppejä ja vähän muutakin TIEA341 Funktio ohjelmointi 1 Syksy 2005 Viime luennolla... Haskellin alkeita pääasiassa Hello World!... ja muita tutunoloisia ohjelmia Haskellilla Haskellin voima on kuitenkin

Lisätiedot

Yhtälöryhmät 1/6 Sisältö ESITIEDOT: yhtälöt

Yhtälöryhmät 1/6 Sisältö ESITIEDOT: yhtälöt Yhtälöryhmät 1/6 Sisältö Yhtälöryhmä Yhtälöryhmässä on useita yhtälöitä ja yleensä myös useita tuntemattomia. Tavoitteena on löytää tuntemattomille sellaiset arvot, että kaikki yhtälöt toteutuvat samanaikaisesti.

Lisätiedot

7. Oliot ja viitteet 7.1

7. Oliot ja viitteet 7.1 7. Oliot ja viitteet 7.1 Sisällys Olio Java-kielessä. Olion luominen, elinikä ja tuhoutuminen. Viitteiden sijoitus. Viitteiden vertailu. Varautuminen null-arvoon. Viite metodin paluuarvona. Viite metodin

Lisätiedot

TAMPEREEN TEKNILLINEN YLIOPISTO Digitaali- ja tietokonetekniikan laitos. Harjoitustyö 4: Cache, osa 2

TAMPEREEN TEKNILLINEN YLIOPISTO Digitaali- ja tietokonetekniikan laitos. Harjoitustyö 4: Cache, osa 2 TAMPEREEN TEKNILLINEN YLIOPISTO Digitaali- ja tietokonetekniikan laitos TKT-3200 Tietokonetekniikka I Harjoitustyö 4: Cache, osa 2.. 2010 Ryhmä Nimi Op.num. 1 Valmistautuminen Cache-työn toisessa osassa

Lisätiedot

Operaattoreiden ylikuormitus. Operaattoreiden kuormitus. Operaattoreiden kuormitus. Operaattoreista. Kuormituksesta

Operaattoreiden ylikuormitus. Operaattoreiden kuormitus. Operaattoreiden kuormitus. Operaattoreista. Kuormituksesta C++ - perusteet Java-osaajille luento 5/7: operaattoreiden ylikuormitus, oliotaulukko, parametrien oletusarvot, komentoriviparametrit, constant, inline, Operaattoreiden ylikuormitus Operaattoreiden kuormitus

Lisätiedot

AJAX-konsepti AJAX. Asynkronisuus. Nykyisten web-ohjelmien ongelmia. Asynchronous JavaScript And XML

AJAX-konsepti AJAX. Asynkronisuus. Nykyisten web-ohjelmien ongelmia. Asynchronous JavaScript And XML AJAX-konsepti AJAX Asynchronous JavaScript And XML Viimeisin muoti-ilmiö web-ohjelmoinissa, termi Ajax tuli käyttöön vuoden 2005 aikana Joukko teknologioita, joiden avulla voidaan toteuttaa uudenlaisen

Lisätiedot

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä Matti Luukkainen 10.12.2009 Tässä esitetty esimerkki on mukaelma ja lyhennelmä Robert Martinin kirjasta Agile and Iterative Development löytyvästä

Lisätiedot

7. Näytölle tulostaminen 7.1

7. Näytölle tulostaminen 7.1 7. Näytölle tulostaminen 7.1 Sisällys System.out.println- ja System.out.print-operaatiot. Tulostus erikoismerkeillä. Edistyneempää tulosteiden muotoilua. 7.2 Tulostusoperaatiot System.out.println-operaatio

Lisätiedot

Tietorakenteet ja algoritmit

Tietorakenteet ja algoritmit Tietorakenteet ja algoritmit Kurssin sisältö pääpiirteittäin Tarvittavat pohjatiedot Avainsanat Abstraktio Esimerkkiohjelman tehtäväkuvaus Abstraktion käyttö tehtävässä Abstrakti tietotyyppi Hyötyjä ADT:n

Lisätiedot

A274101 TIETORAKENTEET JA ALGORITMIT

A274101 TIETORAKENTEET JA ALGORITMIT A274101 TIETORAKENTEET JA ALGORITMIT PERUSTIETORAKENTEET LISTA, PINO, JONO, PAKKA ABSTRAKTI TIETOTYYPPI Tietotyyppi on abstrakti, kun se on määritelty (esim. matemaattisesti) ottamatta kantaa varsinaiseen

Lisätiedot

Harjoitus 5 (viikko 48)

Harjoitus 5 (viikko 48) Moni tämän harjoituksen tehtävistä liittyy joko suoraan tai epäsuorasti kurssin toiseen harjoitustyöhön. Harjoitustyö edistyy sitä paremmin, mitä enemmän tehtäviä ratkaiset. Mikäli tehtävissä on jotain

Lisätiedot

58131 Tietorakenteet ja algoritmit (kevät 2016) Ensimmäinen välikoe, malliratkaisut

58131 Tietorakenteet ja algoritmit (kevät 2016) Ensimmäinen välikoe, malliratkaisut 58131 Tietorakenteet ja algoritmit (kevät 2016) Ensimmäinen välikoe, malliratkaisut 1. Palautetaan vielä mieleen O-notaation määritelmä. Olkoon f ja g funktioita luonnollisilta luvuilta positiivisille

Lisätiedot

Matemaattinen optimointi I, demo

Matemaattinen optimointi I, demo Matemaattinen optimointi I, demo 3 29.1.2015 Demo 3 järjestetään Quantumin mikroluokassa normaaleina demoaikoina. Tavoitteena on harjoitella kurssilla tarvittavien optimointiohjelmistojen käyttöä. Demopisteet

Lisätiedot

Järjestelmäarkkitehtuuri (TK081702) Web Services. Web Services

Järjestelmäarkkitehtuuri (TK081702) Web Services. Web Services Järjestelmäarkkitehtuuri (TK081702) Standardoidutu tapa integroida sovelluksia Internetin kautta avointen protokollien ja rajapintojen avulla. tekniikka mahdollista ITjärjestelmien liittämiseen yrityskumppaneiden

Lisätiedot

Käyttöohje. Boa Open Access. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Käyttöohje. Boa Open Access. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Käyttöohje Boa Open Access Helsinki 5.5.2006 Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Kurssi 581260 Ohjelmistotuotantoprojekti (6 ov) Projektiryhmä Ilmari Heikkinen

Lisätiedot

T Syksy 2006 Tietojenkäsittelyteorian perusteet T Harjoitus 7 Demonstraatiotehtävien ratkaisut

T Syksy 2006 Tietojenkäsittelyteorian perusteet T Harjoitus 7 Demonstraatiotehtävien ratkaisut T-79.1001 Syksy 2006 Tietojenkäsittelyteorian perusteet T Harjoitus 7 Demonstraatiotehtävien ratkaisut Lemma (Säännöllisten kielten pumppauslemma). Olkoon A säännöllinen kieli. Tällöin on olemassa n 1

Lisätiedot

Dokumentin nimi LOGO:) Tampereen teknillinen yliopisto. Ryhmä XXX: Projektiryhmän nimi Projektin nimi

Dokumentin nimi LOGO:) Tampereen teknillinen yliopisto. Ryhmä XXX: Projektiryhmän nimi Projektin nimi Tampereen teknillinen yliopisto Ohjelmistotekniikan laitos OHJ-3500 Ohjelmistotuotannon projektityö LOGO:) Ryhmä XXX: Projektiryhmän nimi Projektin nimi Dokumentin nimi Jakelu: (Ryhmä) (Kurssihenkilökunta)

Lisätiedot

11/20: Konepelti auki

11/20: Konepelti auki Ohjelmointi 1 / syksy 2007 11/20: Konepelti auki Paavo Nieminen nieminen@jyu.fi Tietotekniikan laitos Informaatioteknologian tiedekunta Jyväskylän yliopisto Ohjelmointi 1 / syksy 2007 p.1/11 Tämän luennon

Lisätiedot

T Kevät 2005 Logiikka tietotekniikassa: erityiskysymyksiä I Kertausta Ratkaisut

T Kevät 2005 Logiikka tietotekniikassa: erityiskysymyksiä I Kertausta Ratkaisut T-79.146 Kevät 2005 Logiikka tietotekniikassa: erityiskysymyksiä I Kertausta Ratkaisut 1. Jokaiselle toteutuvalle lauselogiikan lauseelle voidaan etsiä malli taulumenetelmällä merkitsemällä lause taulun

Lisätiedot

Taulukot. Jukka Harju, Jukka Juslin 2006 1

Taulukot. Jukka Harju, Jukka Juslin 2006 1 Taulukot Jukka Harju, Jukka Juslin 2006 1 Taulukot Taulukot ovat olioita, jotka auttavat organisoimaan suuria määriä tietoa. Käsittelylistalla on: Taulukon tekeminen ja käyttö Rajojen tarkastus ja kapasiteetti

Lisätiedot

LOAD R1, =2 Sijoitetaan rekisteriin R1 arvo 2. LOAD R1, 100

LOAD R1, =2 Sijoitetaan rekisteriin R1 arvo 2. LOAD R1, 100 Tiedonsiirtokäskyt LOAD LOAD-käsky toimii jälkimmäisestä operandista ensimmäiseen. Ensimmäisen operandin pitää olla rekisteri, toinen voi olla rekisteri, vakio tai muistiosoite (myös muuttujat ovat muistiosoitteita).

Lisätiedot

Ohjelmistojen mallintamisen ja tietokantojen perusteiden yhteys

Ohjelmistojen mallintamisen ja tietokantojen perusteiden yhteys Ohjelmistojen mallintamisen ja tietokantojen perusteiden yhteys Tällä kurssilla on tutustuttu ohjelmistojen mallintamiseen oliomenetelmiä ja UML:ää käyttäen Samaan aikaan järjestetyllä kurssilla on käsitelty

Lisätiedot

T Logiikka tietotekniikassa: perusteet Kevät 2008 Laskuharjoitus 5 (lauselogiikka ) A ( B C) A B C.

T Logiikka tietotekniikassa: perusteet Kevät 2008 Laskuharjoitus 5 (lauselogiikka ) A ( B C) A B C. T-79.3001 Logiikka tietotekniikassa: perusteet Kevät 2008 Laskuharjoitus 5 (lauselogiikka 6.1 7.2) 27. 29.2.2008 Ratkaisuja demotehtäviin Tehtävä 6.1 a) A (B C) Poistetaan lauseesta ensin implikaatiot.

Lisätiedot

1 Kertaus. Lineaarinen optimointitehtävä on muotoa:

1 Kertaus. Lineaarinen optimointitehtävä on muotoa: 1 Kertaus Lineaarinen optimointitehtävä on muotoa: min c 1 x 1 + c 2 x 2 + + c n x n kun a 11 x 1 + a 12 x 2 + + a 1n x n b 1 a 21 x 1 + a 22 x 2 + + a 2n x n b 2 (11) a m1 x 1 + a m2 x 2 + + a mn x n

Lisätiedot

T Testiraportti - integraatiotestaus

T Testiraportti - integraatiotestaus T-76.115 Testiraportti - integraatiotestaus 16. huhtikuuta 2002 Confuse 1 Tila Versio: 1.1 Tila: Päivitetty Jakelu: Julkinen Luotu: 19.03.2002 Jani Myyry Muutettu viimeksi: 16.04.2002 Jani Myyry Versiohistoria

Lisätiedot

TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 27. lokakuuta 2009

TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 27. lokakuuta 2009 TIE448 Kääntäjätekniikka, syksy 2009 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 27. lokakuuta 2009 Sisällys Sisällys Seuraava deadline Vaihe D tiistai 10.11. klo 10 välikielen generointi Kääntäjän rakenne

Lisätiedot

2. Lisää Java-ohjelmoinnin alkeita. Muuttuja ja viittausmuuttuja (1/4) Muuttuja ja viittausmuuttuja (2/4)

2. Lisää Java-ohjelmoinnin alkeita. Muuttuja ja viittausmuuttuja (1/4) Muuttuja ja viittausmuuttuja (2/4) 2. Lisää Java-ohjelmoinnin alkeita Muuttuja ja viittausmuuttuja Vakio ja literaalivakio Sijoituslause Syötteen lukeminen ja Scanner-luokka 1 Muuttuja ja viittausmuuttuja (1/4) Edellä mainittiin, että String-tietotyyppi

Lisätiedot

Tietorakenteet ja algoritmit

Tietorakenteet ja algoritmit Tietorakenteet ja algoritmit Rekursio Rekursion käyttötapauksia Rekursio määritelmissä Rekursio ongelmanratkaisussa ja ohjelmointitekniikkana Esimerkkejä taulukolla Esimerkkejä linkatulla listalla Hanoin

Lisätiedot

Ohjelmistojen suunnittelu

Ohjelmistojen suunnittelu Ohjelmistojen suunnittelu 581259 Ohjelmistotuotanto 154 Ohjelmistojen suunnittelu Software design is a creative activity in which you identify software components and their relationships, based on a customer

Lisätiedot

3.3 Paraabeli toisen asteen polynomifunktion kuvaajana. Toisen asteen epäyhtälö

3.3 Paraabeli toisen asteen polynomifunktion kuvaajana. Toisen asteen epäyhtälö 3.3 Paraabeli toisen asteen polynomifunktion kuvaajana. Toisen asteen epäyhtälö Yhtälön (tai funktion) y = a + b + c, missä a 0, kuvaaja ei ole suora, mutta ei ole yhtälökään ensimmäistä astetta. Funktioiden

Lisätiedot