1 Anvendelser II Filkomprimering 2 Filkomprimering Principper Huffmans algoritme Generering af krydsreferencer Simulering Hændelsesbaseret simulering.

Slides:



Advertisements
Lignende præsentationer
Atomer Et programmeret forløb. En måde at lære på.
Advertisements

Niveauer af abstrakte maskiner
1 Frameworks. 2 Plan Frameworks • Kollektioner • Input/output Nyt designmønster: Decorator.
Perspektiverende Datalogi Internetalgoritmer MapReduce Gerth Stølting Brodal.
T1 – OPGAVE 14.2 LINETT & SABRINA Klasse Varer namespace Opgave_14._2 { class Varer { private string vare; private string farve; private double.
KONCEPT Klasser og objekter En klasse beskriver et World ArrayList
Symbolsk maskinsprog.
Datastrukturer Simple-type structs
Grundlæggende programmering Efterår 2001
Representations for Path Finding in Planar Environments.
Hvordan man skriver koden.
01 – Java platform for starters. 2 NOEA2009Java-kursus – Java Platform Introduktion til Java Baggrund Hvad er Java? Faciliteter i Java.
Begreber og Redskaber 8. Plan for idag Sortering fortsat Comparable Søgning –Lineær søgning –Binær søgning.
1 Dagens gang Repeter systemvalg Gennemgang af klasser og strukturer (kap. 3+4 OOA+D) Tavle opgave Gruppe opgave til næste gang.
GP5, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 5 Slides ligger på nettet. Du er velkommen til at printe dem nu. Vi begynder.
Pleje og Sundhed Gennemførte719 Inviterede895 Svarprocent80% FREDERICIA KOMMUNE MTU og Psykisk APV 2012 Rapportspecifikationer.
1 UNION-FIND. 2 inddata: en følge af heltalspar (p, q); betydning: p er “forbundet med” q uddata: intet, hvis p og q er forbundet, ellers (p, q) Eksempel.
FEN IntroJava AAU1 Opsamling: afvikling af Java-programmer Input fra keyboard og fil Fra en prompt Fra BlueJ Fra NetBeans.
1 Powerpointserie om In-line færdiggørelse ved Heatsettrykning Avisrotation Magasindybtryk Den Grafiske Højskole.
Induktion og rekursion
FEN IntroJava AAU1 Java grundelementer Variable og datatyper Sætninger og udtryk Metoder.
Algoritmer og Datastrukturer 1 Binære Søgetræer [CLRS, kapitel 12] Gerth Stølting Brodal.
Datastrukturer og Collections Rasmus D. Lehrmann DM
ETU 2008 | Elevtilfredshedsundersøgelse Erhvervsskolen Nordsjælland HTX (Teknisk Gymnasium) - Hillerød Baseret på 313 besvarelser.
MMP Model og Metode til Programudvikling – MMP 1 Kursusindhold: Modellering af postkontor Objekt Orienteret Programudvikling - OO* Unified Modelling.
1 Søgning I. 2 Plan Sekventiel søgning Binær søgning Binære søgetræer Balancerede binære søgetræer træer.
1 Sortering I elementære metoder. 2 Plan Terminologi Elementære metoder til sortering -sortering ved udvælgelse -sortering ved indsættelse -Shellsort.
Anvendelser I Leg og spil.
Begreber og Redskaber 2. Plan for idag Noget om bestanddelene i et programmeringssprog Syntaksbeskrivelse af java Næste gang: –Binære tal –Repræsentation.
Forelæsning 3.1 Collections Javas for-each løkke
Matematik B 1.
Claus Brabrand, ITU, Denmark Mar 10, 2009EFFECTIVE JAVA Effective Java Presentation Workshop Claus Brabrand [ ] ( “FÅP”: First-year Project.
1 Anvendelser II Filkomprimering 2 Filkomprimering Principper Huffmans algoritme Generering af krydsreferencer Simulering Hændelsesbaseret simulering.
1 Tråde 2 Plan Trådbegrebet Synkronisering Koordinering Eksempel: et flertrådet spil.
Grunde til at jeg elsker dig
1 Implementering af fundamentale datastrukturer. 2 Plan Stakke og køer Array-repræsentation Liste-repræsentation Hægtede lister Træer Terminologi Traversering.
1 Søgetræer. 2 Binære søgetræer Definition Operationer Balancerede binære søgetræer AVL-træer Rød-sort-træer (AA-træer) B-træer Plan.
Lektion 7 Læsestof: Kopier fra Caranno
Fundamentale datastrukturer
GP 8, 24/ Grundlæggende programmering Efterår 2001 Forelæsning 8 onsdag 24/ kl. 9:15 – 12:00.
1 Anvendelser III Grafer. 2 Terminologi Repræsentation Traversering Korteste vej Topologisk sortering Problemkompleksitet og afgørlighed Plan.
Grafalgoritmer II.
Algoritmer og Datastrukturer 1 Binære Søgetræer [CLRS, kapitel 12] Gerth Stølting Brodal.
1 Sortering. 2 Sortering ved fletning (merge-sort) 7 2 | 9 4  | 2  2 79 | 4   72  29  94  4.
1 Fundamentale datastrukturer. 2 Definitioner: abstrakt datatype, datastruktur Elementære datastrukturer og abstrakte datatyper: arrays, stakke, køer,
1 Fundamentale datastrukturer. 2 Definitioner: abstrakt datatype, datastruktur Elementære datastrukturer og abstrakte datatyper : arrays, stakke, køer,
1 Kursusafslutning. 2 Plan Opgaveseminar Kursusevaluering.
Procestræ under afvikling af cp init login shell cp cp src dest.
Begreber og Redskaber 7. Plan for idag Rekursive underprogrammer Rekursive datastrukturer Rekursion vs iteration Rekursivt: Flette sortering.
Algoritmer og Datastrukturer 1 Binære Søgetræer [CLRS, kapitel 12] Gerth Stølting Brodal Aarhus Universitet.
8 RÅD VEDRØRENDE GOD PROGRAMMERING Effective (brown) Java.
FEN IntroJava AAU1 Klasser og objekter Grundbegreber Student-Course.
1 Anvendelser III Grafer. 2 Terminologi Repræsentation Traversering af grafer Korteste vej Topologisk sortering Problemkompleksitet og afgørlighed Plan.
1 Implementering af fundamentale datastrukturer. 2 Stakke og køer Array-repræsentation Liste-repræsentation Hægtede lister Træer Terminologi Traversering.
KF04 GRAY Item 2, 12, 22, 32, 42, 52. Consider a builder when faced with many constructor parameters Item 2.
Anvendelser I Leg og spil.
03 – Udtryk og metoder. 2 NOEA2009Java-kursus – Udtryk og metoder Udtryk i Java Java har standard udtrykene… Værditildeling Subrutiner og funktionskald.
Længste plateau En klassisk problemstilling (Gries, 1981) - og her i Java!!! Denne opgave drejer sig om at bestemme længden af det længste plateau i en.
Begreber og Redskaber 11. Plan for idag Lidt afrunding: Collections Framework i Java Noget om oversættere og sprog Evaluering Sidste gang øvelser før.
Forelæsning 7.1 – repetition
Identitet vs lighed. Spørgsmål Hvad udskriver run metoden? 1.”Ens!” 2.”Forskellige!” 3.Ved ikke public class Driver{ public static void run(){ String.
Paradigmer i Programmering 3. Højere ordens funktioner Idag: Højere ordens funktioner Algebraiske datatyper Næste gang: I/O, Filer, interaktive programmer.
Effective Java Blå gruppe. Item 18: Interfaces frem for abstrakte klasser Kan implementeres i klasser der ikke nedarver Eksisterende klasser kan nemt.
Begreber og Redskaber 4. Plan for idag Om metoder, parametre, returværdier Et par ord om objekt-orientering Håndkøring af programmer.
Begreber og Redskaber 3. Plan for idag Om metoder, parametre, returværdier Overblik over klasser,objekter,nedarvning Et par ord om objekt-orientering.
I o p o DAIMI, AU, November 1999Programkonstruktion I9E.1 Konstruktion og brug af klasser – en stak og en HP-regnemaskine push pop.
 Michael E. Caspersen, 2000Introducerende objektorienteret programmering6A.1 Programmering med interfaces – en stak og en HP-regnemaskine push pop.
Programmering med interfaces Separering af specifikation, anvendelse og implementation.
Programmering med interfaces – en stak og en HP-regnemaskine push pop.
Programmering med interfaces – en stak og en HP-regnemaskine push pop.
Præsentationens transcript:

1 Anvendelser II Filkomprimering

2 Filkomprimering Principper Huffmans algoritme Generering af krydsreferencer Simulering Hændelsesbaseret simulering Procesbaseret simulering Plan

3 Filkomprimering Komprimering reducerer størrelsen af en fil for at spare plads ved lagring for at spare tid ved transmission Mange filer har et lavt informationsindhold. Komprimering benyttes til tekst:nogle bogstaver er hyppigere end andre grafik:store ensartede områder lyd:gentagne mønstre

4 Run-length encoding Komprimering ved tælling af gentagelser. Komprimering af tekst: Strengen AAAABBBAABBBBBCCCCCCCDABCBAAABBBBCCCD omkodes til 4A3BAA5B8CDABCB3A4B3CD Med escape-tegn (her ’ \ ’): \4A\3BAA\5B\8CDABCB\3A\4B\3CD Run-length encoding er normalt ikke særlig effektiv for tekstfiler.

5 Run-length encoding Komprimering af (sort-hvid raster) grafik: Besparelse: 19* *6 bit = 116 bit svarende til 23%

6 Fixed-length encoding Strengen ABRACADABRA (11 tegn) fylder 11 * 8 bit = 88 bit i byte-kode 11 * 5 bit = 55 biti 5-bit-kode 11 * 3 bit = 33 biti 3-bit-kode (kun 5 forskellige bogstaver) D forekommer kun 1 gang, mens A forekommer 5 gange. Vi kan forsøge at benytte korte koder for bogstaver, der forekommer hyppigt.

7 Variable-length encoding Hvis A = 0, B = 1, R = 01, C = 10 og D = 11, kan ABRACADABRA kodes som (kun 15 bit) Problemet skyldes, at nogle koder er præfiks for andre. For eksempel er A præfiks for R. Men denne kode kan kun afkodes (dekomprimeres), hvis der anvendes skilletegn (f.eks. et blanktegn).

8 Præfikskoder En præfikskode for tegnene A, B, C, D og R : A = 11, B = 00, C = 010, D = 10 og R = 011. Strengen ABRACADABRA kodes som (25 bit) En kode, hvor ingen tegnkode er præfiks for nogen anden tegnkode, kaldes en præfikskode. Strengen kan kun afkodes på én måde. Men den valgte præfikskode er ikke den optimale. Den kan bestemmes ved hjælp af Huffmans algoritme.

9 Tries Koden repræsenteres ved et træ, et såkaldt trie (udtales traj). A BRCD Tegnene er placeret i træets blade. En venstre gren svarer til 0. En højre gren svarer til 1. Kode: A = 0, B = 100, C = 110, D = 111 og R = 101. Strengen ABRACADABRA kodes som (23 bit)

10 Huffmans algoritme (Huffman, 1952) Beregn frekvenserne for de tegn, der indgår i meddelelsen (eller benyt en foruddefineret frekvenstabel). Tegn Frekvens A 5 B 2 C 1 D 1 R 2 Byg et trie ved successivt af kombinere de to mindste frekvenser.

11 Huffmans algoritme A 5 B 2 R 2 C 1 D Start med et træ for hvert tegn. Sålænge der er mere end ét træ: sammensæt de 2 “billigste” træer til 1 træ ved at tilføje en ny knude som rod. Træet er optimalt (minimerer ∑ dybde i* frevens i ), men ikke unikt

12 Implementering af Huffmans algoritme class HuffmanTree { HuffmanTree(Node r) { root = r; } Node root; } class Node {...} class Character extends Node {...} Repræsentation af træ:

13 class Node implements Comparable { Node(int w) { weight = w; } Node(int w, Node l, Node r) { weight = w; left = l; right = r; } public int compares(Comparable rhs) { Node n = (Node) rhs; return weight < n.weight ? -1 : weight == n.weight ? 0 : -1; } public boolean lessThan(Comparable rhs) { return weight < ((Node) rhs).weight; } int weight; Node left, right; } weight angiver summen af bladenes frekvenser i det træ, der har knuden som rod.

14 class Character extends Node { Character(char c, int w) { super(w); character = c; } char character; } Character-objekter udgør træets blade

15 HuffmanTree buildHuffmanTree(Vector list) { BinaryHeap priorityQueue = new BinaryHeap( new Node(Integer.MIN_VALUE)); Enumeration e = list.elements(); while (e.hasMoreElements()) priorityQueue.insert((Character) e.nextElement()); try { for (int size = list.size(); size >= 2; size--) { Node t1 = (Node) priorityQueue.deleteMin(); Node t2 = (Node) priorityQueue.deleteMin(); priorityQueue.insert(new Node(t1.weight + t2.weight, t1, t2)); } return new HuffmanTree((Node) priorityQueue.deleteMin()); } catch (Underflow e) { return null; } }

16 import java.io.*; import java.util.*; import DataStructures.*; import Supporting.*; import Exceptions.*; class HuffmanTree {...}; class Node implements Comparable {...}; class Character extends Node {...}; class CodeTable {...}; public class Huffman { static Vector readFrequencies(BufferedReader input) throws IOException {...}; static HuffmanTree buildHuffmanTree(Vector list) {...}; static CodeTable buildCodeTable(HuffmanTree tree) {...}; static void doCommands(BufferedReader input, HuffmanTree tree, CodeTable table) {...}; public static void main(String argv[]) {...}; }

17 CodeTable buildCodeTable(HuffmanTree tree) { CodeTable codeTable = new CodeTable(); codeTable.build(tree.root, ""); return codeTable; } class CodeTable { String[] code = new String[256]; void build(Node n, String prefix) { if (n instanceof Character) code[((Character) n).character] = prefix; else { build(n.left, prefix + "0"); build(n.right, prefix + "1"); }

18 Problemer for Huffmans algoritme Kodetræet skal medsendes (typisk 255 bytes) Beregningsmæssigt dyr To gennemløb af filen (frekvensbestemmelse + kodning) Typisk 25% pladsreduktion, men ikke optimal

19 LZW-komprimering (Lempel, Ziv og Welch, 1977) Opbyg successivt en ordbog i form af et trie. Eksempel: ABRACADABRA 0 A 1 B 2 R 3 C 4 D 5 B 6 A 7 Fixed-length encoding Kodning: ABR1C1D63A

20 Generering af krydsreferencer Udvikling af et program, der indlæser et Java-program og udskriver alle programmets navne i sorteret orden sammen med de linjenumre, hvori de forekommer. Navne, der kun forekommer i kommentarer, tekststrenge og tegnkonstanter, skal ikke medtages.

21 Eksempel /* Trivial application that displays a string */ public class TrivialApplication { public static void main(String args[]) { System.out.println("Hello World!"); } input:output: String: 3 System: 4 TrivialApplication: 2 args: 3 class: 2 main: 3 out: 4 println: 4 public: 2, 3 static: 3 void:

22 Algoritme Opbyg et binært søgetræ indeholdende de fundne navne. Hver knude indholder et navn og en kø af de linjenumre, hvori navnet forekommer. Udskriv til slut søgetræets indhold i sorteret orden. class IdNode implements Comparable { String word; Queue lines; IdNode(String theWord, int currentLine) { word = theWord; lines = new QueueAr(); lines.enqueue(new Integer(currentLine)); } public int compares(Comparable rhs) { return word.compareTo(((IdNode) rhs).word); } public boolean lessThan(Comparable rhs) { return word.compareTo(((IdNode) rhs).word) < 0; } }

23 public void generateCrossReference() { BinarySearchTree theIdentifiers = new BinarySearchTree(); // Insert identifiers into the search tree while (getNextID()) { try { IdNode id = (IdNode) theIdentifiers.find(currentIdNode); id.lines.enqueue(new Integer(currentLine)); } catch (ItemNotFound e) { try { theIdentifiers.insert( new IdNode(currentIdNode.word, currentLine)); } catch(DuplicateItem ex) {} // Cannot happen } //... print the cross reference... } Opbygning af binært søgetræ

24 Eksempel på binært søgetræ word: "TrivialApplication" lines: 2 word: "main" lines: 2 word: "public" lines: 2 3 word: "static" lines: 3 word: "void" lines: 3 word: "println" lines: 4 word: "out" lines: 4 word: "class" lines: 2 word: "System" lines: 4 word: "args" lines: 3 word: "String" lines: 3

25 // Iterate through search tree and output // identifiers and their line number try { InOrder itr = new InOrder(theIdentifiers); for (itr.first(); itr.isValid(); itr.advance()) { IdNode id = (IdNode) itr.retrieve(); System.out.print(id.word + ": " + (Integer) id.lines.dequeue()); while (!id.lines.isEmpty()) System.out.print(", " + (Integer) id.lines.dequeue()); System.out.println(); } catch (ItemNotFound e) {} // Empty tree catch (Underflow e) {} // Cannot happen Udskrivning af det binære søgetræ (ved hjælp af inorder-traversering)

26 Simulering Anvendelser II

27 Definitioner Simulering Simulering: Eksperimenter med modeller på en datamaskine Model Model: Repræsentation af et system System System: Et valgt udsnit af virkeligheden

28 Matematiske modeller Sproglige modeller Mundtlige og skriftlige beskrivelser Grafiske modeller Billeder, tegninger Skematiske modeller Diagrammer Ikke-matematiske modeller Symbolske modeller

29 Matematiske modeller Statisk: Repræsentation af et system i en given fast tilstand Dynamisk: Repræsentation af et systems adfærd over tid Analytisk: En model, hvor relevante spørgsmål alene kan besvares ud fra matematiske ræsonnementer Ikke-analytisk: En model, hvor relevante spørgsmål om modellen er matematisk uhåndterbare

30 Simulering (mulig indsnævring) Simulering er eksperimenter med dynamiske, ikke-analytiske modeller på en datamaskine

31 En god model er en model, der opfylder det formål, man har med den. Modeller er hverken falske eller sande, men kan være mere eller mindre hensigtsmæssige i forhold til deres formål. Første skridt i en modelleringsproces er en klargøring af, hvad man vil bruge modellen til. Abstraktion og aggregering benyttes som teknikker til at opnå “håndterbare” modeller. Modellering er formålsbestemt

32 Modellerings- og simuleringsprocessen teoretisk modelvalidering Model 2. Model- konstruktion Program program- verifikation 3. Model- kodning 1. System- identifikation System empirisk modelvalidering 4. Simulering Teori bekræftelse på teori

33 Kontinuerte: Modellens tilstand beskrives ved variable, som varierer kontinuert (“blødt” og uden spring). Modellen er typisk beskrevet ved differentialligninger Dynamiske modeltyper t f(t)

34 Diskrete: Modellens tilstand beskrives ved variable, som ændres i spring (forårsaget af hændelser). Eksempel: Et køsystem (kundebetjeningen i en bank, en lægekonsultation). f(t) t

35 Kombineret kontinuert og diskret: Modellens tilstand kan beskrives ved variable, som både varierer kontinuert og ændres i spring. Eksempel: et køleskab (varmeudvekslingen med omgivelserne er kontinuert, termostaten forårsager diskrete hændelser) f(t) t

36 Modelleringsperspektiver Kontinuert, diskret, eller kombineret kontinuert/diskret er egenskaber ved en model, ikke ved et system Eksempel: Trafikken på en vej Makroperspektiv: kontinuert strøm Mikroperspektiv: hændelser (f.eks. start og stop)

37 Begrundelser for at anvende simulering Systemet eksisterer ikke Eksperimenter med det virkelige system er for kostbare, for tidskrævende eller for farlige Eksperimenter med det virkelige system er praktisk umulige at foretage (havstrømme, solsystemet) Formål Beslutningstagen Indsigt

38 Begrænsninger ved simulering Kan være kostbar både i maskin- og menneskeressourcer Validering er vanskelig Indsamling af data samt analyse og fortolkning af resultater kræver sædvanligvis et godt kendskab til statistik

39 Waiting line Car washer Served car Tearoom Car washer Simulering af et bilvaskeri (car wash)

40 Systembeskrivelse (1) Bilerne ankommer til vaskeriet med gennemsnitligt 11 minutters mellemrum. (2) Der er ansat 2 bilvaskere. (3) Når en bil ankommer, bliver den vasket, hvis der er en ledig bilvasker. Ellers venter den i en kø. (4) Så længe der er biler, der venter, bliver de vasket efter tur. (5) En vask tager 10 minutter. (6) Når en bilvasker bliver ledig, venter han i testuen, indtil der ankommer en bil. (7) Vaskeriet holder åben 8 timer om dagen. (8) Biler, der ankommer før lukketid, bliver vasket.

41 Formål med simulering (er bestemmende for model) Formålet er at undersøge, hvor meget bilernes ventetid kan nedbringes ved at ansætte endnu en bilvasker. Modeltype En diskret hændelsesmodel.

42 Simuleringsparadigmer (1) Hændelsesbaseret (Eks. “Bil ankommer”, “Vask afsluttes”) (2) Aktivitetsbaseret (Eks. “En bil vaskes”) (3) Procesbaseret (Eks. “En bil”, “En bilvasker”)

43 Identifikation af hændelser (1) En bil ankommer( CarArrival ) (2) En bilvask påbegyndes( StartCarWashing ) (3) En bilvask afsluttes( StopCarWashing )

44 Pakken simulation.event public abstract class Event { protected abstract void actions(); public final void schedule(double evTime); public final void cancel(); public final static double time(); public final static void runSimulation(double period); public final static void stopSimulation(); } Hændelserne og deres tilknyttede handlinger beskrives i underklasser af klassen Event.

45 import simulation.event.*; import simset.*; import random.*; public class CarWashSimulation extends Simulation { int noOfCarWashers, noOfCustomers; double openPeriod = 8*60, throughTime; Head tearoom = new Head(), waitingLine = new Head(); Random random = new Random(7913); CarWashSimulation(int n) { noOfCarWashers = n;... } class CarWasher extends Link {} class Car extends Link { double entryTime = time(); } class CarArrival extends Event {...} class StartCarWashing extends Event {...} class StopCarWashing extends Event {...} public static void main(String args[]) { new CarWashSimulation(2); }

46 Konstruktøren i CarWashSimulation CarWashSimulation(int n) { noOfCarWashers = n; for (int i = 1; i <= noOfCarWashers; i++) new CarWasher().into(tearoom); new CarArrival().schedule(0); runSimulation(openPeriod ); report(); }

47 CarArrival class CarArrival extends Event { public void actions() { if (time() <= openPeriod) { new Car().into(waitingLine); if (!tearoom.empty()) new StartCarWashing().schedule(time()); new CarArrival().schedule(time() + random.negexp(1/11.0)); }

48 StartCarWashing class StartCarWashing extends Event { public void actions() { CarWasher theCarWasher = (CarWasher) tearoom.first(); theCarWasher.out(); Car theCar = (Car) waitingLine.first(); theCar.out(); new StopCarWashing(theCarWasher, theCar). schedule(time() + 10); }

49 StopCarWashing class StopCarWashing extends Event { CarWasher theCarWasher; Car theCar; StopCarWashing(CarWasher cw, Car c) { theCarWasher = cw; theCar = c; } public void actions() { theCarWasher.into(tearoom); if (!waitingLine.empty()) new StartCarWashing().schedule(time()); noOfCustomers++; throughTime += time() - theCar.entryTime; }

50 Metoden report void report() { System.out.println(noOfCarWashers + " car washer simulation"); System.out.println("No.of cars through the system = " + noOfCustomers); java.text.NumberFormat fmt = java.text.NumberFormat.getNumberInstance(); fmt.setMaximumFractionDigits(2); System.out.println("Av.elapsed time = " + fmt.format(throughTime/noOfCustomers)); }

51 2 car washer simulation No.of cars through the system = 43 Av.elapsed time = car washer simulation No.of cars through the system = 43 Av.elapsed time = Kørselsresultater

52 Planlagte hændelser opbevares i en cirkulær tovejs-liste, SQS, der er sorteret i stigende orden efter hændelsernes indtræffelsestidspunt. Implementering af pakken simulation.event SQS suc pred

53 public abstract class Event { protected abstract void actions();... private final static Event SQS = new Event() { { pred = suc = this; } protected void actions() {} }; private static double time = 0; private double eventTime; private Event pred, suc; }

54 public void schedule(final double evTime) { if (evTime < time) throw new RuntimeException ("attempt to schedule event in the past"); cancel(); eventTime = evTime; Event ev = SQS.pred; while (ev.eventTime > eventTime) ev = ev.pred; pred = ev; suc = ev.suc; ev.suc = suc.pred = this; } suc pred ev

55 public void cancel() { if (suc != null) { suc.pred = pred; pred.suc = suc; suc = pred = null; } suc pred ev

56 public static void runSimulation(double period) { while (SQS.suc != SQS) { Event ev = SQS.suc; time = ev.eventTime; if (time > period) break; ev.cancel(); ev.actions(); } stopSimulation(); } public static void stopSimulation() { while (SQS.suc != SQS) SQS.suc.cancel(); time = 0; }

57 Repræsentation af hændelseslisten (SQS) Hændelseslisten kan organiseres, således at indsættelse bliver mere effektiv. For eksempel ved brug af et splay-træ. [ Øvelsesopgave ]

58 Procesbaseret simulering En proces er systemkomponent, der udfører en sekvens af handlinger i simuleret tid. Hver handling sker i tilknytning til en hændelse. hændelse proces vent i kø bliv vasket aktivitet hændelse aktivitet tid

59 Identifikation af processerne (1) Bil( Car ) (2) Bilvasker( CarWasher ) (3) Bilgenerator( CarGenerator )

60 Processer og deres tilknyttede handlinger beskrives i underklasser af klassen Process. Pakken javaSimulation public abstract class Process extends Link { protected abstract void actions(); public static double time(); public static void activate(Process p); public static void hold(double t); public static void passivate(); public static void wait(Head q); }

61 import javaSimulation.*; import javaSimulation.Process; public class CarWashSimulation extends Process { int noOfCarWashers, noOfCustomers; double openPeriod = 8*60, throughTime; Head tearoom = new Head(), waitingLine = new Head(); Random random = new Random(7913); CarWashSimulation(int n) { noOfCarWashers = n; } public void actions() {...} class Car extends Process {...} class CarWasher extends Process {...} class CarGenerator extends Process {...} public static void main(String args[]) { activate(new CarWashSimulation(2)); }

62 public void actions() { for (int i = 1; i <= noOfCarWashers; i++) new CarWasher().into(tearoom); activate(new CarGenerator()); hold(openPeriod ); report(); } Hovedprocessens aktioner

63 class CarGenerator extends Process { public void actions() { while (time() <= openPeriod) { activate(new Car()); hold(random.negexp(1/11.0)); } class CarGenerator

64 class Car extends Process { public void actions() { double entryTime = time(); into(waitingLine); if (!tearoom.empty()) activate((CarWasher) tearoom.first()); passivate(); noOfCustomers++; throughTime += time() - entryTime; } class Car

65 class CarWasher extends Process { public void actions() { while (true) { out(); while (!waitingLine.empty()) { Car served = (Car) waitingLine.first(); served.out(); hold(10); activate(served); } wait(tearoom); } class CarWasher

66 Læs kapitel 14 i lærebogen (side ) Løs følgende opgaver 6-1. Opgave Se opgaven på næste side. Ugeseddel oktober oktober

67 Simuleringsopgave Pakken simulation.event, der kan hentes fra kursets hjemmeside, tilbyder faciliteter til hændelsesbaseret simulering. a. Benyt pakken til at simulere den modembank, der er beskrevet i kapitel 13 i lærebogen. b. Benyt et splay-træ til at implementere hændelseslisten. Denne datastruktur findes i pakken DataStructures. Vær opmærksom på, at metoden insert kaster en udtagelse, hvis der i forvejen findes en post med samme nøgle. Pakken javaSimulation, der også kan hentes fra kursets hjemmeside, tilbyder faciliteter til procesbaseret simulering. c. Benyt denne pakke til at simulere modembanken.