Määrittelydokumentti



Samankaltaiset tiedostot
Tietorakenteet, laskuharjoitus 3, ratkaisuja

(a) L on listan tunnussolmu, joten se ei voi olla null. Algoritmi lisäämiselle loppuun:

Ohjelmoinnin perusteet Y Python

Tietorakenteet ja algoritmit

Ohjelmoinnin perusteet Y Python

TIETORAKENTEET JA ALGORITMIT

(p j b (i, j) + p i b (j, i)) (p j b (i, j) + p i (1 b (i, j)) p i. tähän. Palaamme sanakirjaongelmaan vielä tasoitetun analyysin yhteydessä.

Tehtävän V.1 ratkaisuehdotus Tietorakenteet, syksy 2003

Ohjelmoinnin perusteet Y Python

Algoritmit 1. Luento 4 Ke Timo Männikkö

Algoritmit 1. Luento 14 Ke Timo Männikkö

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

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

Kerta 2. Kerta 2 Kerta 3 Kerta 4 Kerta Toteuta Pythonilla seuraava ohjelma:

JOHDATUS TEKOÄLYYN TEEMU ROOS

Esimerkkejä vaativuusluokista

Pythonin Kertaus. Cse-a1130. Tietotekniikka Sovelluksissa. Versio 0.01b

Ohjelmoinnin perusteet Y Python

Tietorakenteet, laskuharjoitus 7, ratkaisuja

ImageRecognition toteutus

ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012

Nopea kertolasku, Karatsuban algoritmi

58131 Tietorakenteet ja algoritmit (kevät 2013) Kurssikoe 1, , vastauksia

3. Binääripuu, Java-toteutus

Algoritmit 1. Luento 1 Ti Timo Männikkö

JOHDATUS TEKOÄLYYN TEEMU ROOS

Harjoitustyö: virtuaalikone

Ohjelmoinnin perusteet Y Python

TAMPEREEN TEKNILLINEN YLIOPISTO

Algoritmit 2. Luento 7 Ti Timo Männikkö

10. Painotetut graafit

Algoritmit 1. Demot Timo Männikkö

.. X JOHDATUS TEKOÄLYYN TEEMU ROOS

Algoritmit 2. Luento 13 Ti Timo Männikkö

Koe ma 1.3 klo salissa A111, koeaika kuten tavallista 2h 30min

58131 Tietorakenteet (kevät 2009) Harjoitus 11, ratkaisuja (Topi Musto)

811312A Tietorakenteet ja algoritmit II Perustietorakenteet

MS-A0205/MS-A0206 Differentiaali- ja integraalilaskenta 2 Luento 8: Newtonin iteraatio. Taso- ja avaruusintegraalit

S09 04 Kohteiden tunnistaminen 3D datasta

A TIETORAKENTEET JA ALGORITMIT

JOHDATUS TEKOÄLYYN TEEMU ROOS

f(n) = Ω(g(n)) jos ja vain jos g(n) = O(f(n))

Algoritmit 1. Luento 10 Ke Timo Männikkö

2. Seuraavassa kuvassa on verkon solmujen topologinen järjestys: x t v q z u s y w r. Kuva 1: Tehtävän 2 solmut järjestettynä topologisesti.

Algoritmit 1. Luento 9 Ti Timo Männikkö

List-luokan soveltamista. Listaan lisääminen Listan läpikäynti Listasta etsiminen Listan sisällön muuttaminen Listasta poistaminen Listan kopioiminen

T Datasta tietoon, syksy 2005 Laskuharjoitus 8.12., ratkaisuja Jouni Seppänen

JOHDATUS TEKOÄLYYN TEEMU ROOS

Muuttujatyypit ovat Boolean, Byte, Integer, Long, Double, Currency, Date, Object, String, Variant (oletus)

Algoritmit 2. Luento 14 Ke Timo Männikkö

Ohjelmoinnin perusteet Y Python

TAMPEREEN TEKNILLINEN YLIOPISTO

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

811312A Tietorakenteet ja algoritmit I Johdanto

58131 Tietorakenteet Erilliskoe , ratkaisuja (Jyrki Kivinen)

58131 Tietorakenteet ja algoritmit (syksy 2015)

Antitammirobotti. Antti Meriläinen Martin Pärtel 29. toukokuuta 2009

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

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin jatkokurssi, kurssikoe

811312A Tietorakenteet ja algoritmit, , Harjoitus 6, Ratkaisu

Lieriö ja särmiö Tarkastellaan pintaa, joka syntyy, kun tasoa T leikkaava suora s liikkuu suuntansa

Ohjelmoinnin peruskurssi Y1

T Syksy 2002 Tietojenkäsittelyteorian perusteet Harjoitus 8 Demonstraatiotehtävien ratkaisut

MAA7 7.1 Koe Jussi Tyni Valitse kuusi tehtävää! Tee vastauspaperiin pisteytysruudukko! Kaikkiin tehtäviin välivaiheet näkyviin!

Kokeellista matematiikkaa SAGE:lla

1. Mitä tehdään ensiksi?

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

Tietorakenteet, laskuharjoitus 10, ratkaisuja. 1. (a) Seuraava algoritmi tutkii, onko jokin luku taulukossa monta kertaa:

Algoritmien suunnittelu ja analyysi (kevät 2004) 1. välikoe, ratkaisuja

Luento 5. Timo Savola. 28. huhtikuuta 2006

A215 Tietorakenteet. Tietojenkäsittelytieteiden laitos Tampereen yliopisto. Periodit I-II, syksy 2007

TKT20001 Tietorakenteet ja algoritmit Erilliskoe , malliratkaisut (Jyrki Kivinen)

Oikeasta tosi-epätosi -väittämästä saa pisteen, ja hyvästä perustelusta toisen.

Algoritmit 1. Luento 3 Ti Timo Männikkö

Linkitetystä listasta perittyä omaa listaa käytetään muun muassa viestiin liittyvien vastausten säilömiseen.

Ohjelmoinnin perusteet Y Python

Algoritmit 1. Luento 12 Ti Timo Männikkö

1. (a) Seuraava algoritmi tutkii, onko jokin luku taulukossa monta kertaa:

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

Algoritmit 1. Demot Timo Männikkö

Algoritmit 1. Luento 13 Ti Timo Männikkö

Algoritmi on periaatteellisella tasolla seuraava:

C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. Operaatioiden suoritusjärjestys

Numeerinen analyysi Harjoitus 1 / Kevät 2017

Ohjelmoinnin perusteet Y Python

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

MS-A0202 Di erentiaali- ja integraalilaskenta 2 (SCI) Luento 8: Taso- ja avaruusintegraalit

Rakenteiset tietotyypit Moniulotteiset taulukot

Satunnaisalgoritmit. Topi Paavilainen. Laskennan teorian opintopiiri HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

Algoritmit 1. Luento 12 Ke Timo Männikkö

Algoritmit 1. Luento 13 Ma Timo Männikkö

811312A Tietorakenteet ja algoritmit, , Harjoitus 5, Ratkaisu

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Algoritmit 2. Luento 2 Ke Timo Männikkö

Algoritmit 2. Luento 10 To Timo Männikkö

58131 Tietorakenteet ja algoritmit Uusinta- ja erilliskoe malliratkaisut ja arvosteluperusteet

Koordinaatistot 1/6 Sisältö ESITIEDOT: reaaliluvut

Transkriptio:

Määrittelydokumentti Aineopintojen harjoitustyö: Tietorakenteet ja algoritmit (alkukesä) Sami Korhonen 014021868 sami.korhonen@helsinki. Tietojenkäsittelytieteen laitos Helsingin yliopisto 23. kesäkuuta 2014

Työn aihe Ongelma ja tavoite Rahtirma NopsaToimitus haluaa optimoida konttikuljetuksissa käytettävän tilan. Kontin tila on käytetty sitä optimaalisemmin mitä suuremman tilavuuden edestä siihen mahtuu laatikoita. Tavoitteena on kehittää mahdollisimman nopea ja pätevä algoritmi, joka selvittää sopivan tavan pakata annetut laatikot annettuun konttiin. Ongelmaan ei ole toistaiseksi löydetty ratkaisua, joka antaisi parhaan mahdollisen ratkaisun kaikissa tilanteissa siedettävässä ajassa, eikä sitä luultavasti tule löytymään tämän harjoitustyön tuloksenakaan. Ongelman luonteesta johtuen algoritmin tarkoitus on löytää ongelmaan sopiva ratkaisu tietyllä tarkkuudella sopivassa ajassa. Tämän tarkkuuden tutkiminen on mielekkäin tapa tutkia ohjelman pätevyyttä aikavaativuuden ohella. Määritelmiä Yksiköt ja koordinaatisto Työssä käytetään yksikköinä kokonaisluvuiksi pyöristettyjä senttimetrejä, sillä todellisuudessa laatikoiden mitat eivät ole esimerkiksi puristuvuuden vuoksi tämän tarkempia. Koska kontti ja laatikot ovat suorakulmaisia särmiöitä, voidaan käyttä kolmiulotteista karteesista koordinaatistoa. Tässä työssä koordinaatiston akseleita merkitään kirjaimin x, y ja z. Laatikot Laatikoiden asettamiseen liittyy muutamia sääntöjä: 1. Laatikon tulee olla kokonaan kontin sisäpuolella 2. Laatikot eivät saa olla limittäin toistensa kanssa 1

3. Laatikon tulee olla kontin seinien suuntaisesti 4. Laatikko tulee olla tuettu koko pohjaltaan Pakkaaminen Toistaiseksi työssä ei kiinnitetä huomiota seuraaviin seikkoihin: 1. Laatikot tulisi latoa niin, että ne kestävät kuljetuksen 2. Rahdin tulisi olla mahdollisimman helppo pakata ja purkaa Ratkaisu Tietueet ja tietorakenteet Palkki Palkki koostuu yhdestä tai useammasta samanlaisesta laatikosta ja se on muodoltaan suorakulmainen särmiö. Palkeista kasattu lista antaa algoritmin lopputuloksen. Kaikki palkissa olevat laatikot ovat käännettynä samaan asentoon. Tämäntyyppiset yksinkertaiset palkit on esitellyt mm. Tobias Fanslau ja Andreas Bortfeldt [1, sivu 9]. Pakkaussuunnitelma Pakkaussuunnitelma on lista asetetuista palkeista. Pakkaussuunnitelma sisältää myös tiedon palkkien kokonaistilavuudesta ja laatikoiden määrästä. Tilapalkki Kontissa vapaana oleva eli tyhjä tila koostuu suorakulmaisista särmiöistä, joita kutsun tässä työssä tilapalkeiksi. Näihin tilapalkkeihin asetetaan palkkeja. 2

Tila Tämä pitää tietoa pakkauksen tämänhetkisestä tilasta esimerkiksi sisältäen pakkaussuunnitelman, listan vapaista laatikoista sekä pinon vapaista tilapalkeista. Algoritmit ja funktiot Tässä esitetyt pseudokoodit ovat hyvin pelkistettyjä versioita, joista selviää idea ohjelman takana. Esimerkiksi virheiden tarkastuksia, ja kaikkia tilanteita ei ole kirjoitettu näihin auki. Pääalgoritmi Kontin pakkaamisen orkesterinjohtajana on seuraava yksinkertainen algoritmi: function pakkaakontti(kontti, laatikot) pakkaussuunnitelma = new PakkausSuunnitelma tila = new Tila while (tila.tilapalkkipino not empty) tilapalkki = tila.tilapalkkipino.pop() palkki = haeparaspalkkilaatikoista(tilapalkki, tila.vapaatlaatikot) if (palkki not null) tila.paivita(palkki, tilapalkki) endwhile return pakkaussuunnitelma Tässä alustetaan aluksi pakkaussuunnitelma ja tilan. Ensimmäisellä whileloopin iteraatiolla tilan sisältämä tilapalkkipino poppaa koko kontin kokoisen vapaan tilapalkin. Tähän tilapalkkiin sopivaa palkkia etsii haeparaspalkki- Laatikoista. Tämä palauttaa arvon null, mikäli sopivaa palkkia ei löytynyt. Jos sopiva palkki löytyy, päivitetään tila tämän mukaan. Palkin lisäämisen seurauksena tilapalkki jaetaan palkkeja lisätessä pienemmiksi tilapalkeiksi, joita tulee aina kolme kappaletta lisää kun asetetaan uusi palkki. 3

haeparaspalkki(tilapalkki, vapaatlaatikot) function haeparaspalkki(tilapalkki, vapaatlaatikot) paras = new Palkki for each laatikko in vapaatlaatikot Palkki p = valitseorientaatio(tilapalkki, laatikko) if (parempi(p, paras)) paras = p end for return paras Tässä hieman yksinkertaistettu versio palkin valitsemisesta. Tämä käy läpi kaikki vapaat laatikot, ja valitsee niistä tehdyistä palkeista parhaiten sopivan. Funktio valitseorientaatio palauttaa palkin, joka on tehty sille parametriksi annetusta laatikosta. Mikäli tämä palkki p on parempi kuin paras, asetetaan se uudeksi parhaaksi. valitseorientaatio(tilapalkki, laatikko) function valitseorientaatio(tilapalkki, laatikko) paras = new Palkki for i = 0 to 6 laatikko.asetaorientaatio(i) // valitaan orientaatio // luodaan nx, ny ja nz if (nx*x*ny*y*nz*z > suurintilavuus) suurintilavuus = nx*x*ny*y*nz*z paras = new Palkki(sijainti, laatikko, nx, ny, nz) end for return paras Tämä on myös toiminnaltaan yksinkertaistettu versio laatikon eri orientaatioiden kokeilemisesta. Kaikki 6 mahdollista ei-identtistä orientaatiota käydään läpi. Luodaan luvut nx, ny ja nz, jotka kertovat kuinka monta laatikkoa mahtuu vierekkäin x, y ja z-akseleille. Näiden luomisessa otetaan huomioon 4

mm. laatikoiden määrä ja tilapalkin koko. Näiden lukujen perusteella luodaan uusi palkki, mikäli sen tilavuus on suurempi kuin aiemmaksi suurimman palkin tilavuus. tila.paivita(palkki, tilapalkki) Palkki lisätään pakkaussuunnitelmaan, tilapalkki poistetaan, ja tilapalkki- Pinoon asetetaan kolme uutta tilapalkkia, joiden sijainti ja koko määräytyy palkin ja aiemman tilapalkin mukaan. Syötteet ja käyttäminen Syötteet Ohjelma antaa käyttäjän valita täytettävän kontin muutamasta vaihtoehdosta. Sen jälkeen ohjelma lukee sopivassa muodossa olevasta tiedostosta tiedot pakattavista laatikoista. Käyttäminen Ohjelman käyttö tapahtuu yksinkertaisen komentorivipohjaisen käyttöliittymän kautta. Ohjelma näyttää kaikki ymmärtämänsä viisi komentoa. Aika- ja tilavaativuudet Aikavaativuus Algoritmin käyttämä aika riippuu hyvin pitkälti sille annetuista laatikoista, eikä pelkästään konttiin pakattavien laatikoiden määrästä. Koska ongelmaan ei löydetä varsinaisesti oikeaa ratkaisua, on jokseenkin mielivaltaista tutkia aikavaativuutta perinteisin tavoin. Enkä näe tavotteellisten aikavaativuuksien määrittelemistä miellekkäänä. Aikavaativuuksia voisi tutkia sen mukaan, kuinka kauan on tarvittu aikaa tietyllä tarkkuudella optimaalisen pakkaussuunnitelman löytymiseen tietyllä laatikkosarjalla. Aikavaativuuteen 5

ja algoritmin tarkkuuteen vaikuttaa hyvin paljon laatikoiden homogenisuus. Eli se kuinka monenlaisia laatikoita sarjassa on. Viitteet [1] Tobias Fanslau, Andreas Bortfeldt, 2008 A Tree Search Algorithm for Solving the Container Loading Problem http://www.fernuni-hagen.de/wirtschaftswissenschaft/download/beitraege/db426.pdf viitattu 22. kesäkuuta 2014 6