Simplex-menetelm. S ysteemianalyysin. 3. luento: Suuret LP-tehtävät sekä operaatiot harvoilla vektoreilla ja matriiseilla

Samankaltaiset tiedostot
1.1. Määritelmiä ja nimityksiä

Osittaistuenta Gaussin algoritmissa: Etsitään 1. sarakkeen itseisarvoltaan suurin alkio ja vaihdetaan tämä tukialkioiksi (eli ko. rivi 1. riviksi).

Numeeriset menetelmät

Tieto- ja tallennusrakenteet

Johdatus tekoälyn taustalla olevaan matematiikkaan

Algoritmit 1. Luento 4 Ke Timo Männikkö

Algoritmit 2. Luento 2 To Timo Männikkö

Käänteismatriisin ominaisuuksia

811312A Tietorakenteet ja algoritmit II Perustietorakenteet

Matriisit ovat matlabin perustietotyyppejä. Yksinkertaisimmillaan voimme esitellä ja tallentaa 1x1 vektorin seuraavasti: >> a = 9.81 a = 9.

Algoritmit 1. Luento 9 Ti Timo Männikkö

2.8. Kannanvaihto R n :ssä

Algoritmit 2. Luento 3 Ti Timo Männikkö

3 Lineaariset yhtälöryhmät ja Gaussin eliminointimenetelmä

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

Algoritmit 1. Luento 5 Ti Timo Männikkö

Algoritmit 2. Luento 3 Ti Timo Männikkö

Numeeriset menetelmät

Algoritmit 2. Luento 4 Ke Timo Männikkö

Matriisilaskenta (TFM) MS-A0001 Hakula/Vuojamo Ratkaisut, Viikko 47, 2017

4.5 Kaksivaiheinen menetelmä simplex algoritmin alustukseen

Algoritmit 2. Luento 2 Ke Timo Männikkö

Algoritmit 2. Luento 6 To Timo Männikkö

Mat Lineaarinen ohjelmointi

3 Lineaariset yhtälöryhmät ja Gaussin eliminointimenetelmä

Algoritmit 1. Luento 6 Ke Timo Männikkö

Rakenteiset tietotyypit Moniulotteiset taulukot

2.5. Matriisin avaruudet ja tunnusluvut

Numeeriset menetelmät

Ville Turunen: Mat Matematiikan peruskurssi P1 1. välikokeen alueen teoriatiivistelmä 2007

12. luento: Simplexin implementointi Mallinnusjärjestelmät. Simplexin implementointiin liittyviä asioita

Algoritmit 2. Luento 7 Ti Timo Männikkö

1 Kannat ja kannanvaihto

Matriisilaskenta Luento 8: LU-hajotelma

A TIETORAKENTEET JA ALGORITMIT

Algoritmit 2. Luento 4 To Timo Männikkö

Algoritmit 1. Luento 1 Ti Timo Männikkö

BM20A0700, Matematiikka KoTiB2

Talousmatematiikan perusteet

Insinöörimatematiikka D

Algoritmit 1. Luento 10 Ke Timo Männikkö

Talousmatematiikan perusteet: Luento 11. Lineaarikuvaus Matriisin aste Käänteismatriisi

Algoritmit 1. Luento 12 Ti Timo Männikkö

Sisältö. 22. Taulukot. Yleistä. Yleistä

Harjoitus 1: Matlab. Harjoitus 1: Matlab. Mat Sovelletun matematiikan tietokonetyöt 1. Syksy 2006

Insinöörimatematiikka D

Insinöörimatematiikka D

1 Matriisit ja lineaariset yhtälöryhmät

Käänteismatriisi 1 / 14

Inversio-ongelmien laskennallinen peruskurssi Luento 3

4.6 Matriisin kääntäminen rivioperaatioilla

1 Ominaisarvot ja ominaisvektorit

Algoritmit 2. Luento 6 Ke Timo Männikkö

Numeeriset menetelmät TIEA381. Luento 4. Kirsi Valjus. Jyväskylän yliopisto. Luento 4 () Numeeriset menetelmät / 44

MS-A0004/A0006 Matriisilaskenta

1 + b t (i, j). Olkoon b t (i, j) todennäköisyys, että B t (i, j) = 1. Siis operaation access(j) odotusarvoinen kustannus ajanhetkellä t olisi.

Matriisilaskenta. Harjoitusten 3 ratkaisut (Kevät 2019) 1. Olkoot AB = ja 2. Osoitetaan, että matriisi B on matriisin A käänteismatriisi.

(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ä.

Algoritmit 2. Luento 9 Ti Timo Männikkö

Matematiikka B2 - Avoin yliopisto

Lineaarialgebra ja matriisilaskenta I

Determinantti 1 / 30

Ennakkotehtävän ratkaisu

Algoritmit 1. Luento 10 Ke Timo Männikkö

Matriisi-vektori-kertolasku, lineaariset yhtälöryhmät

Lineaariset kongruenssiyhtälöryhmät

Algoritmit 1. Luento 12 Ke Timo Männikkö

A ja B pelaavat sarjan pelejä. Sarjan voittaja on se, joka ensin voittaa n peliä.

LU-hajotelma. Esimerkki 1 Matriisi on yläkolmiomatriisi ja matriisi. on alakolmiomatriisi. 3 / 24

Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen

Algoritmit 1. Luento 3 Ti Timo Männikkö

Algoritmit 1. Luento 8 Ke Timo Männikkö

Ellipsoidimenetelmä. Samuli Leppänen Kokonaislukuoptimointi. S ysteemianalyysin Laboratorio

Algoritmit 1. Luento 7 Ti Timo Männikkö

Algoritmit 2. Luento 5 Ti Timo Männikkö

Numeeriset menetelmät TIEA381. Luento 3. Kirsi Valjus. Jyväskylän yliopisto. Luento 3 () Numeeriset menetelmät / 45

Kokonaislukuoptiomointi Leikkaustasomenetelmät

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma.

Muita rekisteriallokaatiomenetelmiä

Esimerkki: Tietoliikennekytkin

Algoritmit 1. Luento 2 Ke Timo Männikkö

s = 11 7 t = = 2 7 Sijoittamalla keskimmäiseen yhtälöön saadaan: k ( 2) = 0 2k = 8 k = 4

Tietorakenteet ja algoritmit - syksy

ACKERMANNIN ALGORITMI. Olkoon järjestelmä. x(k+1) = Ax(k) + Bu(k)

18. Abstraktit tietotyypit 18.1

811312A Tietorakenteet ja algoritmit, , Harjoitus 7, ratkaisu

MS-C1340 Lineaarialgebra ja differentiaaliyhtälöt

S: siirtää listan ensimmäisen luvun viimeiseksi V: vaihtaa keskenään listan kaksi ensimmäistä lukua

7.4 Sormenjälkitekniikka

Matematiikka B2 - TUDI

Department of Mathematics, Hypermedia Laboratory Tampere University of Technology. Roolit Verkostoissa: HITS. Idea.

C-kielessä taulukko on joukko peräkkäisiä muistipaikkoja, jotka kaikki pystyvät tallettamaan samaa tyyppiä olevaa tietoa.

Johdatus verkkoteoriaan luento Netspace

Luento 5: Suurten lineaaristen yhtälöryhmien ratkaiseminen iteratiivisilla menetelmillä

lähtokohta: kahden O(h) korkuisen keon yhdistäminen uudella juurella vie O(h) operaatiota vrt. RemoveMinElem() keossa

Mat Lineaarinen ohjelmointi

2. Perustietorakenteet

Numeropelissä 3x3-ruudukko sisältää luvut 1, 2,, 9. Tehtäväsi on järjestää ruudukko näin:

Sisältö. 2. Taulukot. Yleistä. Yleistä

Sisällys. 18. Abstraktit tietotyypit. Johdanto. Johdanto

Transkriptio:

Simplex-menetelm menetelmän laskennalliset tekniikat 3. luento: Suuret LP-tehtävät sekä operaatiot harvoilla vektoreilla ja matriiseilla Matemaattisten algoritmien ohjelmointi Kevät 28 / 1 Suuret LP-teht tehtävät sekä operaatiot harvoilla vektoreilla ja matriiseilla Suuret LP-tehtävät Harvat vektorit Harvat matriisit Linkitetty lista Matemaattisten algoritmien ohjelmointi Kevät 28 / 2 1

Suuret LP-teht tehtävät Realistiset ongelmat helposti suuria Suuri muuttunut ajan kuluessa: Nykyään > 1 rajoitetta 196-luvulla muutama sata rajoitetta 195-luvulla suuri TSP 49 kaupunkia Algoritmisuunnittelun haaste: luotettavuus ja tehokkuus Suuret LP-tehtävät ajaneet ratkaisumenetelmien kehitystä eteenpäin Matemaattisten algoritmien ohjelmointi Kevät 28 / 3 LP-teht tehtävän n muistintarve LP-tehtävän koko matriisin A mukaan: mn Tyypillisesti matriisin alkiot tallennetaan 8 tavun (64 bitin) liukulukuina Matriisin A tallentamiseen tarvitaan 8mn tavua Jos A:ssa 1 riviä ja 2 saraketta, muistia tarvitaan 1.6 GB! Matemaattisten algoritmien ohjelmointi Kevät 28 / 4 2

Harvuus Tyypillisesti vain muutamia nollasta poikkeavia alkioita (keskimäärin 5-1 saraketta kohden) Merkitään: ν = nollasta poikkeavien alkioiden lukumäärä Matriisin (vektorin) tiheys: ( A) ν A ρ = mn 1 rajoitetta => tiheys <.1% Super harvuus: nollasta poikkeavilla alkioilla ainoastaan muutamia arvoja, esim. ±1 Matemaattisten algoritmien ohjelmointi Kevät 28 / 5 Adlittle.mps (56 riviä,, 97 saraketta) Nonzero pattern of Adlittle (56 rows, 97 columns) Column 1 2 3 4 5 6 7 8 9 1 1 2 Row 3 4 5 6 Matemaattisten algoritmien ohjelmointi Kevät 28 / 6 3

Greenpea.mps (2392 riviä,, 545 saraketta) Nonzero pattern of Greenbea (2392 rows, 545 columns) Column 5 1 15 2 25 3 35 4 45 5 55 5 1 Row 15 2 25 3 Matemaattisten algoritmien ohjelmointi Kevät 28 / 7 Kannan kääk äänteismatriisin päivittp ivittäminen Kannan vaihdon yhteydessä matriisi A kerrotaan matriisilla E (Elementary Transformation Matrix) Suurissa tehtävissä harvat matriisit, mutta näillä on taipumus täyttyä 1 O 1 η M p η M m η O a M a M a 1 p m 1 a 1 + a pη M = p a pη M m am + a pη Matemaattisten algoritmien ohjelmointi Kevät 28 / 8 4

Täyttyminen p x = η a Matemaattisten algoritmien ohjelmointi Kevät 28 / 9 Numeeriset ongelmat Liukulukujen tarkkuudesta voi seurata numeerisia ongelmia: pyöristysvirheet virheet matriisin/vektorin alkioiden kumoutumisessa Seurauksia: Epätarkka ratkaisu Väärä optimaalinen kanta Väärä vastaus koko tehtävään Singulaarinen kanta Käyvästä ratkaisusta epäkäypään Matemaattisten algoritmien ohjelmointi Kevät 28 / 1 5

Numeeristen ongelmien ratkaisuja Kannan käänteismatriisi lasketaan ajoittain uudestaan Kannan käänteismatriisin esitys: tulomuodossa (PFI) LU-hajotelmana Kaikki suuret LP-tehtävät eivät ole numeerisesti ongelmallisia! Matemaattisten algoritmien ohjelmointi Kevät 28 / 11 Simplexin tietorakenteet Harvojen vektorien ja matriisien tallennus ja käyttö ratkaisee Simplex-toteutuksen onnistumisen Staattiset tietorakenteet: Tarvittava muistin määrä tiedetään etukäteen Tieto ei muutu Esim. matriisi A Dynaamiset tietorakenteet: Koko ja tiedot muuttuvat jatkuvasti Muistin määrää ei voi ennustaa Esim. kannan kääntäminen tai hajottaminen Matemaattisten algoritmien ohjelmointi Kevät 28 / 12 6

Harvojen vektorien tallentaminen Voidaan tallentaa täysimittaisina vektoreina Pakattu muoto: tallennetaan ainoastaan nollasta poikkeavat alkiot (indeksi, arvo)-pareina: ( i, vi ), i Ζ Erilliset kokonaisluku- ja liukulukutaulukot T Esim. v = [ 1,,, 3,1 ] Ζ = { 1,4,5 }, Ζ = 3 Length 3 Index 1 4 5 Value 1, -3, 1, Tietorakenne voi olla järjestetty tai järjestämätön Matemaattisten algoritmien ohjelmointi Kevät 28 / 13 Perusoperaatiot harvoilla vektoreilla Kokoaminen (gather): täysimittainen (eksplisiittinen) vektori kootaan pakattuun muotoon Hajottaminen (scatter): pakattu vektori puretaan eksplisiittiseen muotoon Yleensä yksi harva vektori hajautetaan väliaikaiseen työtaulukkoon w w:n alkiot alustetaan nolliksi vain kerran w:n nollasta poikkeavat alkiot palautetaan operaation suorittamisen jälkeen nolliksi Siis: vältetään suurten työtaulukoiden alustamista! Matemaattisten algoritmien ohjelmointi Kevät 28 / 14 7

Harvan vektorin kerryttäminen Tyypillinen operaatio Simplex-menetelmässä: m u : = u + λv, u, v R Operaatio voitaisiin suorittaa suoraan järjestämättömillä pakatuilla vektoreilla Tehokkaampaa on hajottaa toinen vektori työtaulukkoon w Oletetaan täysimittainen työtaulukko alustettuna nollaksi m w R w:n alkioita muutetaan operaation aikana, mutta lopuksi se palautetaan nollaksi Matemaattisten algoritmien ohjelmointi Kevät 28 / 15 Harvojen vektorien kerryttäminen: menetelmä 1 1. Hajota vektori v työtaulukkoon w. 2. Jokaiselle u:n nollasta poikkeavalle u i :lle, tarkista vastaava w i. Jos wi poikkeaa nollasta, päivitä u i := u i + λw i. Aseta w i =. 3. Jokaiselle v:n nollasta poikkeavalle v i :lle, tarkista vastaava w i. Jos w i poikkeaa nollasta, u i := λv i. Lisää uusi alkio u:n tietorakenteeseen. Aseta w i =. Matemaattisten algoritmien ohjelmointi Kevät 28 / 16 8

Harvojen vektorien kerryttäminen: menetelmä 2 1. Hajota vektori u työtaulukkoon w. 2. Jokaiselle v:n nollasta poikkeavalle v i :lle, tarkista w i. Jos w i poikkeaa nollasta, päivitä w i := w i + λv i, muuten aseta w i := λv i. Lisää i u:n tietorakenteeseen. 3. Käy läpi muuttunut u:n tietorakenne ja aseta u i := w i. Aseta w i =. Matemaattisten algoritmien ohjelmointi Kevät 28 / 17 Menetelmien vertailua Jos vektorit ovat järjestetyssä tietorakenteessa, näiden skannaus voidaan tehdä ilman hajotusta Tällöin uuden alkion lisääminen vektoriin u voi tuhota järjestyksen Menetelmä 1 on tehokkaampi kuin menetelmä 2, jos vektoriin u lisätään vain yksi vektori Menetelmä 2 on tehokkaampi, jos vektoriin u lisätään useita vektoreita Operaatioiden lukumäärä riippuu vain nollasta poikkeavien alkioiden lukumäärästä, ei vektoreiden todellisesta koosta (m)! Matemaattisten algoritmien ohjelmointi Kevät 28 / 18 9

Pistetulo harvoilla vektoreilla Kahden vektorin u ja v pistetulo: u Oletetaan jälleen nollaksi alustettu työtaulukko w Alustetaan tulos dotprod := 1. Hajota vektori u työtaulukkoon w. 2. Jokaiselle vektorin v nollasta poikkeavalle alkiolle v i, päivitä dotprod := dotprod + v i w i. 3. Jokaiselle vektorin u nollasta poikkeavalle alkiolle u i, aseta w i =. T v = m i= 1 u v i i Matemaattisten algoritmien ohjelmointi Kevät 28 / 19 Harvojen matriisien tallentaminen Helppo tapa: kokoelma harvoja pysty- (tai vaaka-) vektoreita Sarakkeiden nollasta poikkeavat alkiot tallennetaan samaan taulukkoon peräkkäin Jokaisen sarakkeen alkukohta tallennetaan erikseen Jos sarakkeita ei tallenneta peräkkäin, pitää jokaisen sarakkeen pituus tallentaa erikseen Staattinen tietorakenne, pääasiallinen käyttökohde matriisin A tallentaminen (vain rakenteelliset muuttujat!) Matemaattisten algoritmien ohjelmointi Kevät 28 / 2 1

Esimerkki harvan matriisin tallentamisesta 1 A = 1 1 1 2 4 3 2 1 1 Index 1 2 3 4 5 6 7 8 9 1 Column begin 1 3 4 5 8 Column length 2 1 1 3 3 Row index 3 1 3 2 4 1 5 3 4 5 Value 1, -1, -1, -1, 4, 2, -3, 2, -1, 1, Matemaattisten algoritmien ohjelmointi Kevät 28 / 21 Linkitetty lista Dynaaminen tietorakenne Tarkoituksena välttää turhat etsimisoperaatiot Jokaiseen listan alkioon liitetään linkki (tai osoitin) seuraavaan alkioon Listan viimeisestä alkiosta lähtevä linkki on väärä Linkki listan alkuun (header) tallennetaan erikseen Matriisi voidaan tallentaa harvojen linkitettyjen pystyvektorien kokoelmana Matemaattisten algoritmien ohjelmointi Kevät 28 / 22 11

Esimerkki linkitetystä listasta 1 A = 1 1 1 2 4 3 2 1 1 Index 1 2 3 4 5 6 7 8 9 1 Column header 9 1 1 2 7 Row index 3 1 5 4 3 4 3 5 1 2 Value -1, 2, -3, 4, 1, -1, 2, 1, -1, -1, Row link 4 3 8 6 5 Matemaattisten algoritmien ohjelmointi Kevät 28 / 23 Alkion lisää ääminen linkitettyyn listaan Vektori v = [3,,, 7,, 4, 2,, ] T, muutetaan v 9 = 3 Index 1 2 3 4 Header 1 Row index 4 6 1 7 Value 7, 4, 3, 2, Row link 3 4 2 Index 1 2 3 4 5 6 Header 6 Row index 4 6 1 7 * 9 Value 7, 4, 3, 2, * 3, Row link 3 4 2 * 1 Matemaattisten algoritmien ohjelmointi Kevät 28 / 24 12

Alkion poistaminen linkitetystä listasta Vektori v = [3,,, 7,, 4, 2,, 3] T, muutetaan v 1 = Index 1 2 3 4 5 6 Header 6 Row index 4 6 1 7 * 9 Value 7, 4, 3, 2, * 3, Row link 3 4 2 * 1 Index 1 2 3 4 5 6 Header 6 Row index 4 6 * 7 * 9 Value 7, 4, * 2, * 3, Row link 2 4 * * 1 Matemaattisten algoritmien ohjelmointi Kevät 28 / 25 Kahteen suuntaan linkitetty lista 1 A = 1 1 1 3 2 1 1 Index 1 2 3 4 5 6 7 8 9 1 CF header 9 1 1 2 7 CB header 5 1 1 3 8 Row index 3 1 5 4 3 4 3 5 1 2 Value -1, 2, -3, 4, 1, -1, 2, 1, -1, -1, RF link 4 3 8 6 5 RB link 4 2 9 7 6 2 4 Matemaattisten algoritmien ohjelmointi Kevät 28 / 26 13

Kun pystyvektorit eivät t riitä Esim. kannan kääntämisessä pitää tietää vaakavektorit, joissa on yhtä monta nollasta poikkeavaa alkiota Kannan kääntäminen hidastuu, jos joudutaan tutkimaan koko matriisi Tarvitaan siis tietorakenne, joka linkittää matriisin A vaakavektorit sopivasti toisiinsa Matemaattisten algoritmien ohjelmointi Kevät 28 / 27 Vaakavektoreiden joukot Muodostetaan joukot vaakavektoreista, joilla sama määrä nollasta poikkeavia alkioita Jokaiselle joukolle muodostetaan oma linkitetty lista Vaakavektoreiden linkitettyjen listojen kokonaispituus voi olla enintään m Kaikki linkitetyt listat samaan taulukkoon Osoittimet erottelevat listat toisistaan Matemaattisten algoritmien ohjelmointi Kevät 28 / 28 14

Eteen- ja taaksepäin linkitetty lista Olkoon n nollasta poikkeavien alkioiden maksimimäärä riviä kohden Matriisissa on m riviä, jotka täytyy jakaa listoihin Muodostetaan kaksi taulukkoa kooltaan m+n, sekä eteen- että taaksepäin linkeille Ensimmäiset m paikkaa taulukossa on varattu vaakavektoreiden linkeille Paikat m+1 n ovat vaakavektorilistojen alkuosat Listaan m+i linkitetään kaikki vaakavektorit, joissa i kpl nollasta poikkeavia alkioita, m+1 m+i m+ n Matemaattisten algoritmien ohjelmointi Kevät 28 / 29 Listan alustus Kaikkien listojen alkuosat osoittavat itseensä Tyhjät rivit on poistettu flink blink Matemaattisten algoritmien ohjelmointi Kevät 28 / 3 15

Alkion lisäys listaan Aluksi vaakavektori 7 lisätään listaan 5, eli vaakavektorissa 7 on 5 nollasta poikkeavaa alkiota flink blink Matemaattisten algoritmien ohjelmointi Kevät 28 / 31 Toisen alkion lisäys listaan Vaaka vektori 1 lisätään listaan 5 flink blink Matemaattisten algoritmien ohjelmointi Kevät 28 / 32 16

Alkion poistaminen listasta Poistetaan vaakavektori 7 flink blink Matemaattisten algoritmien ohjelmointi Kevät 28 / 33 Paluu alkutilaan Poistetaan vaakavektori 1 Nyt kaikkien listojen alkuosat osoittavat itseensä flink blink Matemaattisten algoritmien ohjelmointi Kevät 28 / 34 17

Yhteenveto Tietorakenteiden suunnittelussa joskus kannattaa säästää muistia ja joskus tuhlata Minkä tahansa algoritmin tärkein ominaisuus harvoilla matriiseilla ja vektoreilla: laskentaoperaatioiden lukumäärä ei riipu matriisin tai vektorin todellisesta koosta vaan nollasta poikkeavien alkioiden lukumäärästä. Linkitettyä listaa voidaan käyttää useisiin eri tarkoituksiin Simplexissä: Matriisin/vektorin tallennus staattisesti/dynaamisesti Nollasta poikkeavien alkioiden määrä rivillä nopeasti Matemaattisten algoritmien ohjelmointi Kevät 28 / 35 Kirjallisuutta Adler, I. et al (1989). Data Structures and Programming Techniques for the Implementation of Karmarkar s Algorithm. ORSA Journal on Computing 1, 84-16. Duff, I. et al (1986). Direct Methods for Sparse Matrices. Oxford Science Publications. Clarendon Press, Oxford. Gay, D. (1985). Electronic mail distribution of linear programming test problems. COAL Newsletter 13, 1-12. http://www.netlib.org Matemaattisten algoritmien ohjelmointi Kevät 28 / 36 18

Kirjallisuutta George, A. and Liu, W.-H. (1981). Computing Solution of Large Sparse Positive Definite Systems. Prentice-Hall, Englewood Cliffs, N.J. Greenberg, H., editor (1978). Design and Implementation of Optimization Software, NATO ASI. Sijthoff and Nordhoff. Gustavson, F. (1972). Some basic techniques for solving sparse systems of linear equations, in Sparse Matrices and Their Applications, Plenum Press. Kalan, J. (1971). Aspects of Large-Scale In-Core Linear Programming, in Proceedings of the 1971 annual conference of the ACM, pp. 34-313. ACM. Matemaattisten algoritmien ohjelmointi Kevät 28 / 37 19