Obligatorisk uppgift: Simulering av köer i ett trafiksystem

Relevanta dokument
Obligatorisk uppgift: Simulering av köer i ett trafiksystem

Obligatorisk uppgift: Simulering av köer i ett trafiksystem

Presentation av obligatoriska uppgiften trafiksimulering. Ett större program med flera klasser

Presentation av trafiksimuleringsprojektet

Presentation av trafiksimuleringsprojektet

trafiksimulering Intro OU5 trafiksimulering

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Tentamen i Programmeringsteknik I

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Del A (obligatorisk för alla)

TENTAMEN I PROGRAMMERING. På tentamen ges graderade betyg:. 3:a 24 poäng, 4:a 36 poäng och 5:a 48 poäng

Det är principer och idéer som är viktiga. Skriv så att du övertygar rättaren om att du har förstått dessa även om detaljer kan vara felaktiga.

PROGRAMMERINGSTEKNIK TIN212

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten?

Redovisning av inlämningsuppgifter

Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

AVR 5. Styrning av trafikljus. Digitala system 15 p

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Variabler som hör till enskilda objekt. Deklareras på översta nivån i klassen och i regel som private.

1 Uppgift 1. a) Skapar ett Company-objekt med hjälp av den överlagrade konstruktorn. Du kan själv välja värden på instansvariablerna.

Området Vårvik med ny bro i Trollhättan Kompletterande simuleringar

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Tentamen, Algoritmer och datastrukturer

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Tentamen TEN1 HI

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Laboration 2. returnerar true om det är omöjligt för roboten att göra move() utan att. exekveringsfel erhålls, annars returnera false.

Övning 3. Datateknik A, Java I, 5 poäng

Att prova på en enkel Applet och att lära sig olika sätt att hämta data från tangentbordet. Du får även prova på att skapa din första riktiga klass.

1 Uppgift 1. a) Skapar ett Company-objekt med hjälp av den överlagrade konstruktorn. Du kan själv välja värden på instansvariablerna.

Trafiklots förbi vägarbete. Verktyg för att ta fram förlängd restid och kötid för vägarbeten med olika längd och trafikmängd

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 2

Del A (obligatorisk för alla)

Design av en klass BankAccount som representerar ett bankkonto

Laborationsanvisning. Digital väckarklocka. Steg 2, laborationsuppgift 2. Författare: Mats Loock Kurs: Inledande programmering med C# Kurskod:1DV402

TUTORIAL: SAMLING & KONSOLL

PROGRAMMERING AV MCU LABORATION6. Laborationens syfte

Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp

Laboration 3, uppgift En klass för en räknare

Malmö högskola 2007/2008 Teknik och samhälle

KARLSTADS UNIVERSITET 12/8/09 informatik & datavetenskap Johan Öfverberg, Kerstin Andersson Laboration 4, ISG A04 och DVG A08 HT-09

ÖSTRAND BIORAFFINADERI. Trafikutredning avseende ANSLUTNING TILL JÄRNVÄGSGATAN. 1 Bakgrund. 2 Förutsättningar, trafik. Innehåll:

if (n==null) { return null; } else { return new Node(n.data, copy(n.next));

Föreläsning 4. Kö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö

Tentamen i Programmeringsteknik I

HI1024, Programmering, grundkurs, 8hp KTH STH TENTAMEN. HI1024:TEN2 - Praktisk tentamen Tid: Fredagen den 21 oktober 2011,

Tentamen i Programmeringsteknik I

Objektorienterad programmering D2

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

HI1024 Programmering, grundkurs TEN

Skolan för Datavetenskap och kommunikation. Programmeringsteknik. Föreläsning 16

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

Sweco TransportSystem AB Org.nr Styrelsens säte: Stockholm. En del av Sweco-koncernen

Programmeringsteknik II

Uppgiften är att beskriva en kvadrat i ett Java program. En första version av programmet skulle kunna se ut så här:

Tentamen TEN1 HI

Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista

Abstrakta datatyper Laboration 2 GruDat, DD1344

2D1311 Programmeringsteknik för Bio1 och Bio2, vt 2003 Fiktivt prov På flervalsfrågorna är endast ett svar rätt om inget annat anges i frågan! Det rik

Tentamen TEN1 HI

Det är principer och idéer som är viktiga. Skriv så att du övertygar examinatorn om att du har förstått dessa även om detaljer kan vara felaktiga.

Subklasser och arv Inledning till grafik (JFrame och JPanel). Något om interface. Objektorienterad programvaruutveckling GU (DIT011) Subklasser

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

Tentamen FYTA11 Javaprogrammering

3FrontOffice Statistik Direkt

Uppsala kommun, plan- och byggnadsnämnden. Dnr PBN , VATTENFALLS FRAMTIDA ANGÖRING FRÅN STÅLGATAN. Trafikutredning

TENTAMEN I. OBJEKTORIENTERAD PROGRAMMERING för Z1. På tentamen ges graderade betyg:. 3:a 24 poäng, 4:a 36 poäng och 5:a 48 poäng

Tentamen i. Programmering i språket C

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 1

Linköpings Tekniska Högskola Instutitionen för Datavetenskap (IDA) Torbjörn Jonsson, Erik Nilsson Lab 2: Underprogram

kl Tentaupplägg

Föreläsning 5-6 Innehåll. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser

Föreläsning 5-6 Innehåll

Samlingar, Gränssitt och Programkonstruktion! Förelasning 11!! TDA540 Objektorienterad Programmering!

Dagens föreläsning. Arrayer och klasser. Medan ni väntar: Gå till m.voto.se/prog11 och svara på några gamla tentamensfrågor! (26 januari 2018 F3 1 )

Övningsuppgifter till föreläsning 2 Variabler och uttryck

Tentamen. 2D4135 vt 2004 Objektorienterad programmering, design och analys med Java Torsdagen den 3 juni 2004 kl

Del A (obligatorisk för alla)

LyckaTill önskar Anna

Tentamen i Grundläggande Programvaruutveckling, TDA548

Lab5 för prgmedcl04 Grafik

Uppgift 1 (vadå sortering?)

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

TENTAMEN OOP

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Eclipse. Avsikt. Nu ska ett fönster liknande figuren till höger synas.

Tentaupplägg denna gång

LABORATIONSINSTRUKTION

Tentamen i Programmeringsteknik I, ES,

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

Tentamen i Objektorienterad programmering

Projekt i programmering 1 (ver 2)... 2 Projektidé... 2 Planering... 2 Genomförande... 2 Testning och buggar... 3 Utvärdering... 3 Planering...

Teoretisk del. Facit Tentamen TDDC (6)

Laboration 1 - Grunderna för OOP i Java

Transkript:

Programmeringsteknik I, ht2016 Obligatorisk uppgift: Simulering av köer i ett trafiksystem Moment: Centrala begrepp som klasser, objekt, metoder. (Uppgiften kommer att diskuteras ingående på föreläsningstid). Gatukontoret i Uppsala har konstaterat att det blir mycket köer i en korsning av följande typ: Korsningen kontrolleras alltså av de fyra ljussignalerna s1, s2, s3 och s4. En betydande mängd av trafiken som kommer från E till höger i figuren vill svänga vänster mot S i korsningen och deras framfart är ofta blockerad av fordon som kommer från W. För att lösa problemet avser man att bygga svängfiler för fordon som kommer från E respektive W och som skall vänster i korsningen dvs man vill ha en korsning av detta utseende: Denna korsning har alltså svängfiler kontrollerade av signalerna s2 och s5. För att avgöra hur långa svängfilerna skall göras vill gatukontoret ha ett program som simulerar vad som händer i korsningen 1

vid olika längder på svängfilen, olika trafikintensitet och olika ljusintervall på signalerna. För detta ändamål räcker det med att studera trafikflödet i en riktning, dvs i ett system med följande utseende: Eftersom trafik från E både mot N och W kontrolleras av samma signal (s1 ) behöver vi inte särskilja dessa utan betrakta denna trafik som gående mot W. Vi behöver inte heller följa fordonen när de har passerat ljussignalerna. Exempel i praktiken Dag Hammarskjölds väg från rondellen utanför Polacksbacken (E) söderut till korsningen med Vårdsätravägen Kungsängsleden. Sträckan tar cirka cirka 40 sekunder att köra. Den befintliga svängfilen rymmer ca 10 bilar. Det finns ytterligare en fil i verkligheten men den abstraherar vi bort. (Väderstrecken stämmer inte heller.) Datormodell Programmet skall ha följande klasser: Vehicle: Ett fordon Light: En trafiksignal Lane: En fil TrafficSystem: Ett trafiksystem med filer och signaler Simulation: Innehåller en globalt tillgänglig klocka (Simulation.getTime()) och en main-metod som driver simuleringen. VehicleGenerator: Producerar fordon enligt givna sannolikheter. Klasserna Simulation och VehicleGenerator är givna och skall användas. Klasserna Vehicle, Light och Lane skall vara utformade så att de kan sättas samman till andra trafiksystem än de som beskrivs i denna uppgift. Se specifikationen av klasserna, (http://www.it.uu.se/edu/course/homepage/prog1/ht16/lessons/le10/tostudents/doc/) Använd en array för att representera ett Lane-objekt. Varje plats antingen är tom eller rymmer ett fordon (alla fordon betraktas alltså som lika stora). Trafiksystemet ska bestå av tre filer (lane, lanewest och lanesouth) och ljussignalerna lightwest och lightsouth (tidigare kallade s1 och s2 ): 2

Filerna har en fix längd dvs de rymmer högst ett angivet antal fordon. Vid punkten E finns det en kö (ej utritad) som lämpligen implementeras med hjälp av en ArrayList. Se kursens minilektion om ArrayList och/eller Javadoc om klassen ArrayList. Om kön växer i längd betyder det att systemet överhuvud taget inte kan svälja den angivna trafikvolymen. Vid ett tidssteg kan en eller flera av följande saker hända: ett fordon passerar en signal (om den är grön), ett fordon avancerar ett steg i en fil (om platsen framför är ledig) ett fordon omedelbart framför X (dvs i position 0 på filen lane) flyttas till lanewest eller lanesouth beroende på dess destination (W eller S), ett fordon anländer till systemet vid punkten E och ställs i kön, om sista platsen i lane är ledig och det finns fordon i kön tas första från kön till sista platsen i lane, den ena eller båda signalerna skiftar färg. En simulering består alltså av en tidsstegning där ovanstående saker händer. Det är lämpligt att momenten, precis som i verkligheten, utförs i den ordning de står i ovan. Trafikljusens funktion En signal är grön eller röd (ingen gul färg behövs). Signaler karakteriseras av två parametar: en period dvs antalet tidssteg det är från början av ett grönt intervall till början av nästa gröna intervall och en grönperiod dvs antalet tidssteg som den är grön. Dessa parametrar ges när signalen byggs (dvs som parametrar till konstruktorn). En signal behöver också en intern klocka som tickas upp av en step-metod. Det är lämpligt (men inte nödvändigt) att låta klockan gå cirkulärt dvs när den kommit till sista klockslaget i perioden börjar den om från 0. Det behövs också en metod som avgör om signalen är grön eller ej. De båda signalerna skall ha samma period och starta som gröna. Exempel: Om perioden är 7 och grönperioden för lightwest är 3 och för lightsouth är 2 så visar nedanstående tabell hur den interna klockan skall ticka och vilken färg de skall ha Tidssteg: 0 1 2 3 4 5 6 7 8 9 10... Intern klocka: 0 1 2 3 4 5 6 0 1 2 3... Färg lightwest: G G G R R R R G G G R... Färg lightsouth: G G R R R R R G G R R... Indata till en simulering Programmet styrs av följande indata a) längderna på filerna, b) ljussignalernas karakteristik, dvs period och grönperiod, c) ankomstintensitet dvs sannolikheten att ett fordon dyker upp vi E vid ett tidssteg och d) sannolikheten att ett skapat fordon skall svänga dvs ha S som destination. Konstruktorn i TrafficSystem definierar a) och b) samt konstruktorn i VehicleGenerator definierar c) och d) genom att dessa värden är hårdkodade (dvs har fixa värden). 3

Resultat av en körning 1. Statistik innehållande a) genomsnittliga och maximala tider (antal tidssteg) för fordon att passera ljussignalen lightwest respektive lightsouth, b) andel tidssteg som kön framför vardera signalen varit längre än längden på lanewest och lanesouth dvs den tid som fildelningen vid X varit blockerad av kö samt c) andel tidssteg som det funnits fordon i kön vid entrypunkten (E). Samla tiderna för fordon som lämnar systemet i två Measurements-objekt (nätlektion 7), ett för vardera utgång, och använd dessa för att ta fram statistiken till punkt a). (Komplettera klassen Measurements med en metod för att returnera maxvärdet om du inte redan har gjort det.) Statistiken skall skrivas ut av metoden printstatistics i TrafficSystem. Metoden skall kunna anropas när som helst under simuleringen. Exempel på utskrift: Statistics after 1000 time steps Exit west Number: 219 Mean : 26.6 Max : 47 Exit south Number: 244 Mean : 34.3 Max : 64 Percent time step with block: 11.0 Percent time step with queue: 5.5 I 11 procent av tidsstegen har man ej kunnat flyttat ett fordon i position noll i filen lane vid fildelningen X. I 5.5 procent av tidsstegen har det funnits fordon i kön vid entrypunkten E. 2. En enkel ögonblicksbild av systemet vid ett visst tidssteg, där filerna är åtta element långa. lanewest har 5 st fordon, lanesouth 6 st, lane 5 st, kön vid entrypunkten E har inga fordon. Båda trafikljusen är gröna. (G) <WW-W-W-W> <WSW-S-W-> Queue: [] (G) <SSSS-S-S> Denna utskrift skall göras av metoden print som anropas i varje tidssteg från Simulation. Nu kan fordon först i lanesouth och lanewest lämna korsningen. Fordon flyttas framåt i alla filer. Fordonet först i lane flyttas till lanewest. Ett nytt fordon S kommer till korsningen och placeras sist i lane.ögonblicksbilder av systemet vid de tre följande tidsstegen: (G) <W-W-W-WW> <SW-S-W-S> Queue: [] (R) <SSS-S-S-> (R) <W-W-WW--> <W-S-W-S-> Queue: [] (R) <SSSS-S-S> (R) <WW-WW--W> <-S-W-S-W> Queue: [] (R) <SSSSS-S-> I föregående tidssteg var lightwest grön, dvs det första fordonet i lanewest har därmed lämnat korsningen. Fordon har flyttats framåt i filerna där det så går. Ett fordon i lane har flyttats till lanesouth. I föregående tidssteg var båda trafikljusen röda. Fordon har flyttats framåt i filerna där det så går. Ett fordon i lane har flyttats till lanewest. Ett nytt fordon W har placerats i lane. I en annan programkörning där indata till simuleringen (t.ex. mer frekvent röda ljus) medför att det köar fordon längst till höger. Det röda fordonet är det senaste som kommit in i korsningen: (R) <W WWWW W> <SWWWWSWS> Queue: [SWWWS] (R) <SSSS SSS> 4

Lämplig arbetsgång Implementera klasserna Vehicle, Light och Lane. Förse var och en av dessa med en mainmetod som testar och demonstrerar att klasserna fungerar. 1. Först ett enklare system Börja med att i klassen TrafficSystem implementera ett enklare system bestående av EN ljussignal, EN fil och EN kö: Använd den nedladdade klassen VehicleGenerator för att skapa fordon. Den nedladdade klassen Simulation innehåller bl a en main-metod som sätter upp trafiksystemet, driver simuleringen och anropar print-metoder. Dessa två klasser ska användas i oförändrat skick (se dock frivillig modifiering nedan). Tips: Låt ljussignalen vara grön hela tiden först för att testa att flödet av fordon passerar kontinuerligt utan köbildning. När du ser att det fungerar ändra ljussignalen så att den omväxlande visar grönt oftast och ibland rött och testkör. Ändra och testa med att öka andelen rött så att köbildningen ökar. 2. Bygg sedan på med svängfil Implementera sedan systemet med en svängfil. Endast klassen TrafficSystem ska behöva modifieras. Test enligt samma tips som ovan, genom att börja med att båda ljusen visar grönt hela tiden. För att bli godkänd på uppgiften måste 1. programmet fungera enligt specifikation i detta dokument och Javadoc specifikationen (http://www.it.uu.se/edu/course/homepage/prog1/ht16/lessons/le10/tostudents/doc/) för klasserna Light, Lane och Vehicle, 2. koden uppfylla kodstandarden, 3. du kunna förklara hur programmet fungerar och 4. du kunna rita en figur som beskriver hur objekten hänger samman i en konkret situation. Frivilliga modifieringar för att få ett mer flexibelt program 1. Längden på filerna och ljussignalernas karakteristik är ju hårdkodade (har fixa värden) i konstruktorn för TrafficSystem (utan parametrar). Skriv en annan konstruktor i TrafficSystem som har en textfil som parameter och som läser denna som innehåller längerna på filerna enligt följande exempel: 20 lanelength 8 lanewslength 14 lightperiod 6 lightwestgreen 4 lightsouthgreen Dessa rader sätter längden av den första filen (20), längden av filerna framför signalerna (8), signalernas period (14) och signalernas gröntid (6 respektive 4). 5

2. Ankomstintensitet dvs sannolikheten att ett fordon dyker upp vid E vid ett tidssteg och sannolikheten att ett skapat fordon skall svänga, dvs ha S som destination är hårdkodade (har fixa värden) i den givna konstruktorn till VehicleGenerator. Skriv en annan konstruktor i VehicleGenerator som har en textfil som parameter och som läser dessa värden från filen. Exempel på filinnehåll: 30 0.2 0.3 Night 10 0.8 0.8 Morning rush rush 30 0.5 0.5 Day 10 0.7 0.6 Afternoon rush 20 0.6 0.4 Evening Förklaring: Dygnet har fem periodiciteter och sammanlagt 30+10+30+10+20=100 tidssteg. Nattperioden består av 30 tidssteg då är ankomstsannolikheten för ett fordon 20% och svängsannolikheten 30%. Låt den alternativa konstruktorn i TrafficSystem (med parameter) du skrev i ovan uppgift anropa denna alternativa konstruktor i VehicleGenerator. Därmed kommer programmet till fullo bestämmas av data som läses från filer och inte ha några hårdkodade värden. 3. Simuleringen tidstegas av main-metoden i den nedladdade klassen Simulation. Vart hundrade tidsteg skriver metoden ut statistik och frågar användaren om den ska fortsätta. Snyggare vore att i stället använda en dialogruta, exvis så här: Just denna ruta är producerad av koden int ans = JOptionPane.showOptionDialog(null, "What now?","done " + time + " steps", JOptionPane.DEFAULT_OPTION, JOptionPane.PLAIN_MESSAGE, null, alternatives, alternatives[2]); där alternatives är definierad som String[] alternatives = {"Quit", "Continue", "Statistics"}; Variabeln ans kommer innehålla index för valt alternativ. För åtkomst till klassen JoptionPane måste man i klassen Simulation göra import javax.swing.*; 6