Informatica Deel II & III: les 5 Von Neumann, basis- & slimme algoritmen Jan Lemeire Informatica deel II & III februari mei 2015 Parallel Systems: Introduction
Institute for Advanced Studies, New Jersey, USA
Hoofdstuk 4: Computerarchitectuur Jan Lemeire Pag. 3 / 61
De ivoren toren van IAS Institute for Advanced Studies (IAS) Voor de grote denkers/wetenschappers, maar niet ingenieurs Op de schoot bij Einstein (op de foto met Gödel, Bekend logicus) Informatica II: les 4 Jan Lemeire Pag. 4 / 61
John Von Neumann wilt een computer bouwen beter dan de ENIAC John Von Neumann Dit is echter tegen de statuten van het IAS, waar je enkel betaald wordt om te denken, niet om experimenten uit te voeren of iets te bouwen. Mede Informatica door II: zijn les 4 warme persoonlijkheid en populariteit mocht hij er toch aan beginnen in één van de kelders. Jan Lemeire Pag. 5 / 61
Programmeren = draadjes versteken, oftewel de hardware veranderen Informatica II: les 4 Jan Lemeire Pag. 6 / 61
Von Neumann verbetert: 1. Stored-program computer Een programma beschrijft wat de machine moet doen Programma ook opslaan in het geheugen (de software) Is ook input van de computer en data 2. Een architectuur voor de logische opdeling van de centrale verwerkingseenheid: de "Central Processing Unit" of CPU. De CPU is het hart van de computer. 3. De instructies van het programma worden één voor één uitgevoerd Informatica II: les 4 Jan Lemeire Pag. 7 / 61
Waarmaken van Leibniz s droom (9) Artificiële intelligentie (8) Communicatie & internet (7) Operating system (6) Computatietheorie & Software (5) Efficiënt productieproces (4) Hardware architectuur Electronica: (2) relais -schakeling, (3)geheugen (1) Digitaal & binair (0) Het idee Informatica deel III: technologie, historiek en economische aspecten
De Von Neumann-architectuur Jan Lemeire Pag. 9 / 61
Programma = sequentie van instructies Elke processorcyclus: uitvoeren van 1 instructie Inwendig aangegeven door kloksignaal Klokfrekwentie bepaalt aantal instructies/second (bvb 4GHz) Interne verloop voltages kloksignaal Informatica II: les 4 Jan Lemeire Pag. 10 / 61
Von Neumann-elementen Input Interface: binnenkomende gegevens Voorbeelden: toetsenbord, muis, barcodelezer, internet, Sensoren laten toe fysische grootheden binnen het meetbereik van computers te brengen Vbn: camera s, fotocellen, bewegingssensoren (cf Ipad, WII),... Interrupt ( java-event) vertelt control unit dat er input is Output Interface: uitgaande gegevens Voorbeelden: scherm, printer, internet, kassa, Actuatoren geven aan computers de mogelijkheid rechtstreeks hun fysische omgeving te beïnvloeden Vbn: motoren, elketromagneten, verwarmingselementen,... Informatica II: les 4 Jan Lemeire Pag. 11 / 61
Von Neumann-elementen Data Memory: geheugencellen voor binaire getallen. Elke cel van 1 byte (8 bits) krijgt een adres. Program Memory: opslag van programma. In de praktijk: deel van datageheugen Vroeger: ponskaarten, Toegang tot datageheugen: tot elk vakje, gegevens onmiddellijk beschikbaar Geheugen is een soort van schoolbord (scratchpad) waar de tussenresultaten van de berekeningen worden bijgehouden Voor bewerking wordt data uitgelezen en na bewerking geof overschreven Informatica II: les 4 Jan Lemeire Pag. 12 / 61
Data- en programmageheugen In veel computers vindt men maar één enkel geheugen: het programma- en het gegevensgeheugen zijn fysisch samengesmolten. Beide gaan immers om het bijhouden van bytes, een programma is ook een collectie bytes. Deze samensmelting laat toe om met éénzelfde type van computer zowel grote programma's met maar weinig gegevens, als kleine programma's met veel gegevens te verwerken. Vanzelfsprekend blijven beide geheugens logisch gescheiden: de ene wordt enkel gebruikt voor data, de andere enkel voor het opslaan van het programma. Er wordt voor gezorgd dat er geen data in het programmagedeelte geschreven kan worden en omgekeerd. Dit zou namelijk de bestaande inhoud (verkeerdelijk) overschrijven. Informatica II: les 4 Jan Lemeire Pag. 13 / 61
Von Neumann-elementen Arithmetic and Logical Unit (ALU) voert bewerkingen uit Op data van het geheugen Schrijft resultaten (ook data) terug naar het geheugen De ALU is het apparaat dat instaat voor de feitelijke verwerking van de informatie. Het is in staat rekenkundige bewerkingen uit te voeren, getallen te vergelijken, enz. De ALU krijgt de operanden (de te bewerken gegevens) uit het Informatica II: les 4 gegevensgeheugen en plaatst de resultaten van de bewerkingen er terug in. Jan Lemeire Pag. 14 / 61
Von Neumann-elementen Control unit houdt bij waar we zitten in het programma (Program Counter) for/while/methodes zorgen ervoor dat een deel van je programma meermaals uitgevoerd kan worden (iteraties) If maakt het mogelijk dat een deel niet uitgevoerd wordt De stuureenheid leest één voor één instructies uit het programmageheugen, decodeert ze en zendt de nodige stuursignalen naar de verschillende onderdelen van de computer om de uitvoering van de instructies te verzekeren. Zo wordt de operatie samen met de adressen van de operanden en het resultaat aan de ALU doorgegeven. De ALU leest de data uit het geheugen (adhv de opgegeven adressen), voert de berekening uit en schrijft Informatica II: les 4 het resultaat terug in het geheugen. Jan Lemeire Pag. 15 / 61
Voorbeeld: de machten van x Volgend programma wordt in het instructiegeheugen geladen. De Program Counter wordt op 23 gezet, de eerste lijn van het programma. De computer start met het uitvoeren van het programma en voert elke klok-tick 1 instructie uit. Elke variabele krijgt een plaats (adres) in het datageheugen. Jan Lemeire Pag. 16 / 61
Stap 1: laden van programma Jan Lemeire Pag. 17 / 61
Stap 2: lees toetsenbord 23 Jan Lemeire Pag. 18 / 61
Stap 3: initaliseer variabele Jan Lemeire Pag. 19 / 61
Stap 4: initaliseer variabele t Jan Lemeire Pag. 20 / 61
Stap 5: schrijf waarde Jan Lemeire Pag. 21 / 61
Stap 6: bereken product Jan Lemeire Pag. 22 / 61
Stap 7: verhoog teller Jan Lemeire Pag. 23 / 61
Stap 8: check condities Jan Lemeire Pag. 24 / 61
Herhaal stappen tot eindconditie Geheugen m = 7 ; t = 1 m = 49 ; t = 2 m = 343 ; t = 3 m = 2401 ; t = 4 m = 16807 ; t = 5 Op scherm 7 49 343 2401 Jan Lemeire Pag. 25 / 61
Vandaag 1. Von Neumann-architectuur 2. Newton s algoritme 3. Interfaces en abstracte klasses 4. Basisalgoritmen 5. Slimme algoritmen 6. Het Project
Basisalgoritmen Hoofdstuk 4
p. 56-7 Recursive Halving Informatica II: les 5 Jan Lemeire Pag. 28 / 61
Nulpunten zoeken: Newton s algoritme p. 59 (x 0, y 0 ): eerste gok y 0?y y 1 a x r x 1?x x 0 Informatica II: les 5 Jan Lemeire Pag. 30 / 61
Afgeleide van functie kennen interface Functie { /** geeft functiewaarde in opgegeven punt */ double f(double x); } interface FunctieMetAfgeleide extends Functie { /** geeft waarde van de afgeleide in opgegeven punt */ double afgeleide(double x); } Informatica II: les 5 Jan Lemeire Pag. 31 / 61
static int nbriteraties=0; public static double vindnulpuntmetnewton(functiemetafgeleide functie, int eerstegok){ final int MAX_ITERATIES = 150; final double PRECISIE = 0.001; double nulpunt = eerstegok; double fx = functie.f(nulpunt); nbriteraties=0; while (Math.abs(fx) > PRECISIE && nbriteraties < MAX_ITERATIES){ double dfx = functie.afgeleide(nulpunt); if (dfx == 0) throw new RuntimeException("Nulpunt met Newton: Afgeleide in "+nulpunt+" is nul waardoor Newton faalt."); System.out.println("["+nbrIteraties+"] Current = "+nulpunt+" fx="+fx+" dfx="+dfx+" => new = "+(nulpunt - fx/dfx)); nulpunt = nulpunt - fx/dfx; fx = functie.f(nulpunt); nbriteraties++; } if (nbriteraties >= MAX_ITERATIES) throw new RuntimeException("Nulpunt met Newton: convergeert niet, te veel iteraties, beste punt tot nu toe heeft waarde "+functie.f(nulpunt)+"!"); System.out.println("Newton nulpunt = "+nulpunt+" met fx="+fx); return nulpunt; } Informatica II: les 5 Jan Lemeire Pag. 32 / 61
p. 61 Mogelijke problemen Geen of trage convergentie Gradiënt geeft niet noodzakelijk de juiste richting aan Crash Afgeleide die nul is Informatica II: les 5 Jan Lemeire Pag. 33 / 61
Niet in cursus InterfaceOefening1 Informatica II: les 5 Jan Lemeire Pag. 34 / 61
Abstracte klasses en Interfaces p. 4 zijn abstract
KlasseOefening3 (package p. 28 testoefeningen): 1. Teken klassehiërarchie. 2. Welke overerving is niet mogelijk? 3. Duidt aan welke de concrete klassen zijn en welke de abstracte. Is er een abstracte klasse die een interface zou kunnen zijn? 4. Welke objecten kan ik dus niet aanmaken? 5. Bij het aanmaken van de objecten, duidt de constructors aan die opgeroepen worden. Per object kunnen dit meerdere constructors zijn! 6. Voor welke klasses mag je de default constructor oproepen? 7. Welke klasse heeft een foute constructor: roept geen geldige constructor van zijn superklasse op? 8. Welke implementatie wordt uitgevoerd bij het oproepen van de methoden f, g, en j? 9. Welke methodes moet ik zeker implementeren als ik een concrete klasse met superklasse K3 en interface K2 wil maken? Informatica II: les 5 Jan Lemeire Pag. 36 / 61
abstract class K1 { int a; K1(int a){ this.a=a; } void f(){ } abstract void j(); } interface class K2 { void g(); } abstract class K3 extends K1 { K3(int a){ super(a); } void f(){ } } class K4 extends K3 implements K2 { int x; K4(int x){ this.x = x; } public void g(){ } } class K5 extends K1 implements K2 { Informatica II: les 5 void j(){ } public static void main(string[] args) { K1 o1 = new K1(); K2 o2 = new K2(); K3 o3 = new K3(7); K4 o4 = new K4(); K5 o5 = new K5(); o4.f(); o4.g(); o5.j(); } Jan Lemeire Pag. 37 / 61
Basisalgoritmen vervolg Hoofdstuk 4
p. 62 Discrete simulaties $$$$$$$$$$ Informatica II: les 5 Jan Lemeire Pag. 39 / 61
Uitbreiden Alle fysische dingen: MovingObject klasse Informatica II: les 5 Jan Lemeire Pag. 40 / 61
p. 63 Regressie of curve fitting functie fout distance = 122 + 12.2 angle - 0.166 angle 2 + 0.00015 angle 3 187 distance = 142 + 10.95 angle - 0.14 angle 2 188 distance = 522-4.58 angle 267 distance = 0.042 angle 2 311 distance = 0.00046 angle 3 314 Je berekent welke vergelijking het best past ( fit ) op de data Informatica II: les 5 Jan Lemeire Pag. 41 / 61
NP-complete problemen
NP-compleet: traveling p. 64 salesman problem Meest efficiënte volgorde om alle steden af te lopen? 15! = 1.307.674.368.000 mogelijke volgorden Informatica II: les 5 Jan Lemeire Pag. 43 / 61
NP-compleet Klasse van problemen Voor optimale oplossing: je moet alle mogelijkheden afgaan Er bestaan geen shortcuts! Informatica II: les 5 Jan Lemeire Pag. 44 / 61
Een goede oplossing Maar niet te bewijzen dat optimaal zie http://ai4r.rubyforge.org/geneticalgorithms.html Informatica II: les 5 Jan Lemeire Pag. 45 / 61
Project
Projectonderwerp Voldoende programmatorische complexiteit Klassen & objecten Spelelement wordt meestal gekozen Mag: Creativiteit! Artificiële Intelligentie (A.I.): slim algoritme Hoofdstuk 5 Groepjes van 2-3 Informatica II: les 5 Jan Lemeire Pag. 47 / 61
Project: doelstellingen Programmeren Programmatorische complexiteit, gestructureerd programmeren Projectwerk, teamwork Creativiteit, ingenieuziteit Plezier Ontwikkelen probleemoplossende vaardigheden Informatica II: les 5 Jan Lemeire Pag. 48 / 61
Project: uitvoering Voor paasvakantie: keuze groep & onderwerp oefeningen o.a. GUI vrije sessies om aan project te werken Paasvakantie start keuze groep & onderwerp tussentijdse verdediging deadline projectverdediging Verplicht!! Informatica II: les 5 Jan Lemeire Pag. 49 / 61
Evaluatie Programmatorische complexiteit Correctheid Logische opdeling van code in klassen Gestructureerd programmeren 1 regel: geen redundantie 'Properheid' van code: Gebruik van zinvolle namen voor variabelen en functies Logische structuur van code documenteer vooral niet-triviale dingen Creativiteit Mondelinge verdediging Bonus voor excellentie, als het af is Informatica II: les 5 - Constantes - Functies/methodes - Parameterizatie Jan Lemeire Pag. 50 / 61
Laatste tips Ingenieur = efficiëntie Anderzijds: excellentie vergt net dat tikkeltje extra Probleemoplossende vaardigheden (debuggen) Als je probleem niet kan oplossen: VRAAG Blijf er niet bij zitten!! Referenties en gebruikte code opgeven! Anders: plagiaat Informatica II: les 5 Jan Lemeire Pag. 51 / 61
Slimme algoritmen Hoofdstuk 5
Beslissingsalgoritme Doel bereiken Aantal acties ter beschikking Actiesequentie bedenken om doel te bereiken Informatica II: les 5 Jan Lemeire Pag. 53 / 61
p. 66 Indeling volgens oplossingsmethode Type 1: De oplossing kan berekend worden met een formule (analytisch). Type 2: Je kunt de oplossing gericht zoeken of construeren (rechttoe-rechtaan). Type 3: Je gaat alle mogelijke actiesequenties af om een oplossing te vinden. Type 4: Door slimme keuzes (heuristieken) te maken, kan je verschillende actiesequenties uitsluiten. Type 5: Je leert al doende welke de juiste keuzes zijn. Informatica II: les 5 Jan Lemeire Pag. 54 / 61
Type 1: analytisch 1. Je kan oplossing berekenen met formule Analytisch Voorbeeld: nulpunten van kwadratische vergelijking Informatica II: les 5 Jan Lemeire Pag. 55 / 61
Type 2: gerichte constructie Je kan oplossing gericht zoeken met quasi-zekerheid om te arriveren Voorbeelden: nulpunt van een functie zoeken met benaderingsalgoritme priemgetallen met zeef van Erathosteness Berekening grootst-gemene deler Informatica II: les 5 Jan Lemeire Pag. 56 / 61
p. 67 De schuifpuzzel? Staat van puzzel: posities van stukjes Mogelijke acties: LEFT, UP, RIGHT, DOWN Niet alle 4 steeds mogelijk Informatica II: les 5 Jan Lemeire Pag. 57 / 61
Type 3: Alle mogelijkheden afgaan Je weet niet in welke richting de oplossing ligt. Voor sommige problemen is men er vrijwel zeker van dat je alle mogelijkheden af moet lopen (NP-complete problemen, zie later) Je genereert alle mogelijke sequenties van akties en kijkt welke tot een oplossing of tot de beste oplossing leidt. het scannen van de volledige zoekruimte is nodig... Informatica II: les 5 Jan Lemeire Pag. 58 / 61
Zoekruimte = zoekboom Initial UP LEFT UP LEFT DOWN UP LEFT RIGHT LEFT DOWN... DOWN LEFT RIGHT Informatica II: les 5 Jan Lemeire Pag. 59 / 61
p. 68 Doorploeteren zoekboom = Brute-force search 2 mogelijkheden: depth-first : a-b-e-j-k-c-f-g-l-m-n-d-h-o-p-i-q = backtracking breadth-first: a-b-c-d-e-f-g-h-i-j-k-l-m-n-o-p-q Informatica II: les 5 Jan Lemeire Pag. 60 / 61
Sudoku met backtracking Niet in cursus http://en.wikipedia.org/wiki/backtracking Informatica II: les 5 Jan Lemeire Pag. 61 / 61