Trolleri med villkorsprogrammering. Mats Carlsson matsc@sics.se www.sics.se/~matsc



Relevanta dokument
Föreläsning 1 & 2 INTRODUKTION

Grundläggande programmering med matematikdidaktisk inriktning för lärare som undervisar i gy eller komvux gy nivå, 7,5 hp

Kandidatprogram, informations- och kommunikationsteknik Bachelor's Programme in Information and Communication Technology 180,0 högskolepoäng

13 1MA302 Automatateori DV1 4 A D, M 1TD442 Algoritmer och datastrukturer DV1 6 A D

Big Data för Fordon och Transport! Vår Digitala Framtid, Trafikverket!! Björn Bjurling, SICS Swedish ICT, !

Kandidatprogrammet i matematik

Föreläsning 1 & 2 INTRODUKTION

IT OCH PROGRAMMERING I SKOLAN. Jan Erik Moström Peter Vinnervik

Combinare necesse est

Programmering A. Johan Eliasson

JavaScript del 3 If, Operatorer och Confirm

Imperativ programmering

Tentamen i. TDDC67 Funktionell programmering och Lisp

Program & programmering

Datastrukturer och algoritmer. Föreläsning 4 Test, Stack och Kö

Operativsystem ID2200 Tentamen TEN1 3.8 hp :00-18:00

PROGRAMMERING. Ämnets syfte. Kurser i ämnet

Operativsystem ID2206 Tentamen TEN1 4.5 hp :00-18:00

Viktiga egenskaper hos ett program (Meyer): Objektorienterad programmering, allmänt. Vilka egenskaper vill vi att våra program ska ha?

Objektorienterad programmering, allmänt

TDDC74 PROGRAMMERING: ABSTRAKTION OCH MODELLERING VT 2017

IT för personligt arbete F6

7, Diskreta strukturer

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

DD1361 Programmeringsparadigm HT15

Fuzzy Logic. När oskarpa definitioner blir kristallklara. Åsa Svensson. Linköpings Universitet. Linköping

Förutom högskoleförordningens krav på kandidatexamen gäller följande: För kandidatexamen i informations- och kommunikationsteknik skall studenten:

Samråd har skett med utbildningsledare vid akademin för innovation, design och teknik för de kurser de ansvarar för.

PROGRAMMERING. Ämnets syfte. Kurser i ämnet

729G75: Programmering och algoritmiskt tänkande. Tema 1. Föreläsning 1 Jody Foo

Turingmaskiner och oavgörbarhet. Turingmaskinen. Den maximalt förenklade modell för beräkning vi kommer använda är turingmaskinen.

SKOLFS. beslutade den -- maj 2015.

Kurser inom profilen Teknisk matematik (Y)

Komponentvisa operationer,.-notation Multiplikation (*), division (/) och upphöj till (ˆ) av vektorer följer vanliga vektoralgebraiska

T1-modulen Lektionerna Radioamatörkurs OH6AG OH6AG. Bearbetning och översättning: Thomas Anderssén, OH6NT Heikki Lahtivirta, OH2LH

Föreläsning 9: Turingmaskiner och oavgörbarhet. Turingmaskinen. Den maximalt förenklade modell för beräkning vi kommer använda är turingmaskinen.

Probabilistisk logik 2

Klassdeklaration. Metoddeklaration. Parameteröverföring

Kursval! Programinfo (här, nu) Info om masterprogram. Om valet Programmets innehåll Några goda råd. Det finns länkar på valinformationssidan

PROGRAMMERING. Ämnets syfte. Kurser i ämnet

DD1361 Programmeringsparadigm HT15

729G74 IT och programmering, grundkurs. Tema 2. Föreläsning 3 Jody Foo,

Optimeringslara = matematik som syftar till att analysera och. Optimeringslara ar en gren av den tillampade matematiken.

Bakgrund. Bakgrund. Bakgrund. Håkan Jonsson Institutionen för systemteknik Luleå tekniska universitet Luleå, Sverige

Visuell GUI Testning

Tentamen ID1004 Objektorienterad programmering October 29, 2013

Varför är logik viktig för datavetare?

FÖRELÄSNING 1 PERSONAL TDDC74 PROGRAMMERING: ABSTRAKTION OCH MODELLERING VT 2017 SYFTE EXAMINATION ORGANISATION

Hitta k största bland n element. Föreläsning 13 Innehåll. Histogramproblemet

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

729G75: Programmering och algoritmiskt tänkande. Tema 1, föreläsning 1 Jody Foo

Pythons standardbibliotek

Sätt att skriva ut binärträd

Logik. Boolesk algebra. Logik. Operationer. Boolesk algebra

Deklarativt programmeringsparadigm

Programschema för Kandidatprogram i teknisk matematik, 180 hp Gäller för läsåret 2019/2020 Om programschemat

729G04 Programmering och diskret matematik. Python 2: Villkorssatser, sanningsvärden och logiska operatorer

Kandidatprogram, informations- och kommunikationsteknik Bachelor's Programme in Information and Communication Technology 180,0 högskolepoäng

Föreläsningsanteckningar, Introduktion till datavetenskap HT S4 Datastrukturer. Tobias Wrigstad

Computer Science, masterprogram

Föreläsning 3-4 Innehåll

Introduktionsmöte Innehåll

Efternamn förnamn pnr årskurs

de var svåra att implementera och var väldigt ineffektiva.

Matematisk statistik 9hp Föreläsning 5: Summor och väntevärden

Universitetet i Linköping Institutionen för datavetenskap Anders Haraldsson

Introduktion till programmering. Programspråk och paradigmer

Till detta finns specifika tillägg för de olika inriktningarna, se bilaga 2.

Planering i matematik 5 för NA11 och ITT11. V Datum Kapitel Moment Anmärkning. Tis Övning 11:30-12: 40

7, Diskreta strukturer

Programschema för Datavetenskapliga programmet, 180 hp. Gäller för läsåret 2018/2019. Programschema för 2018/2019.

Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt

Dagens föreläsning Programmering i Lisp Fö 7. Sammanfattning funktionell programmering Exempel på funktionella programspråk

Universe Engine Rapport

Föreläsning 9: NP-fullständighet

MATLAB. Python. Det finns flera andra program som liknar MATLAB. Sage, Octave, Maple och...

TNK049 Optimeringslära

Programdesign. Dokumentera. Dokumentera

Objektorienterad programmering

Funktionell programmering

Programdesign. minnesutrymme storlek på indata. DA2001 (Föreläsning 15) Datalogi 1 Hösten / 20

Dugga Datastrukturer (DAT036)

Variabler, värden och typer

Civilingenjörsprogrammet i industriell ekonomi

Matematikerprogrammet, 180 högskolepoäng Applied Mathematics Programme, 180 credits

Major Release 3.1. Vad innebär Major Release 3.1 för svenska användare?

Programmering I Tobias Wrigstad fredag, 2009 augusti 28

Kursinformation Grundkurs i programmering med Python

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 11 Jonas Lindgren, Institutionen för Datavetenskap, LiU

12. Relationer och funktioner

Bilaga 1: GPS-teknik, en liten ordlista

Innehåll. Mina målsättningar. Vad krävs för att nå dit? Obligatoriska uppgifter. Websajten. Datastrukturer och algoritmer

Programvaruteknik, hp

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

Objekt-orienterad utveckling. Objektorienterad analys och design. Objekt-orienterad programutveckling. Objekt-orienterad analys och design: Litteratur

SKOLFS. beslutade den XXX 2017.

Föreläsning 9 i programmeringsparadigm. Paradigmöversikt, paradigmhistoria, paradigmgeografi. Se även föreläsning 1.

Om matematikämnet på CLGYM. Obligatoriska kurser och förslag på valbara kurser. Inför

Bearbetning och Presentation

Syntaktisk parsning (Jurafsky & Martin kapitel 13)

Transkript:

Trolleri med villkorsprogrammering Mats Carlsson matsc@sics.se www.sics.se/~matsc

I ett nötskal Programmera vad, inte hur Effektiva algoritmer paketerade som återanvändbara mjukvarukomponenter Komponenterna kommunicerar via delade variabler - propagering Variablerna tar diskreta värden

Problemklasser Hårdvarudesign Kompilering Layout och placering Tillklippning Platsallokering Frekvensplanering Konfigurering Schemaläggning: Industriella processer Underhåll I skolan Sportturneringar Skift och personal Dyr utrustning (teleskop, satelliter, )

Villkorsteknik Villkor Ett logiskt samband mellan obekanta (variabler) Villkorsprogramming (CP) Beräkningssystem som baseras på villkor CP över ändliga domäner (CP(FD)) Varje obekant har en ändlig, diskret domän

Vad är ett villkor? Några exempel. Kodningen börjar när specifikationen är klar Möten får inte överlappa i tiden Efter två nattskift krävs ett dygns vila

Exempel på villkorsprogram top :- [X1,X2,X3] in 1..4, X1+X2 #< X3, labeling([x1,x2,x3]).

Exempel på villkorsprogram top :- [X1,X2,X3] in 1..4, domändeklaration X1+X2 #< X3, labeling([x1,x2,x3]).

Exempel på villkorsprogram top :- [X1,X2,X3] in 1..4, domändeklaration X1+X2 #< X3, labeling([x1,x2,x3]). X1:1..4 X2:1..4 X3:1..4

Exempel på villkorsprogram top :- [X1,X2,X3] in 1..4, X1+X2 #< X3, ställa ett villkor labeling([x1,x2,x3]).

Exempel på villkorsprogram top :- [X1,X2,X3] in 1..4, X1+X2 #< X3, labeling([x1,x2,x3]). ställa ett villkor X1:1..2 X2:1..2 X3:3..4

Exempel på villkorsprogram top :- [X1,X2,X3] in 1..4, X1+X2 #< X3, labeling([x1,x2,x3]). sökning

Exempel på villkorsprogram top :- [X1,X2,X3] in 1..4, X1+X2 #< X3, labeling([x1,x2,x3]). sökning [1,1,3] [1,1,4] [1,2,4] [2,1,4]

Domändeklaration [X1,X2,X3] in 1..4 X1 in 1..4 Normalt innan några villkor ställs på X1, X2, X3 Designbeslut: Vilka är variablerna i mitt problem? Vilka är värdena i mitt problem?

Att ställa ett villkor X1+X2 #< X3 Som ett proceduranrop Designbeslut: Hur ska villkoret bäst uttryckas? Logiskt ekvivalenta varianter kan bete sig operationellt olika.

Exempel på propagering mellan villkor

Exempel på propagering mellan villkor

Exempel på propagering mellan villkor

Exempel på propagering mellan villkor

Exempel på propagering mellan villkor

Exempel på propagering mellan villkor

Exempel på propagering mellan villkor

Villkor från operationellt perspektiv Programkod använd som korutin for att: (1) Testa om villkoret är definitivt falskt backtracking (2) Testa om villkoret är definitivt sant deaktivering (3) Ta bort variablers värden som skulle göra villkoret definitivt falskt suspendering man måste söka Vanligen polynomiella men inkompletta algoritmer

Testa om villkoret är definitivt falskt [X1,X2,X3] in 1..4, X1+X2 #< X3 (1) Beräkna minimum av X1+X2 min(x1+x2)=min(x1)+min(x2)=1+1=2 (2) Beräkna maximum av X3 max(x3)=4 (3) Jämför: eftersom minimum av X1+X2 inte är större än maximum av X3 så är X1+X2 #< X3 inte definitivt falskt

Testa om villkoret är definitivt sant [X1,X2,X3] in 1..4, X1+X2 #< X3 (1) Beräkna maximum av X1+X2 max(x1+x2)=max(x1)+max(x2)=4+4=8 (2) Beräkna minimum av X3 min(x3)=1 (3) Jämför: eftersom maximum av X1+X2 inte är mindre än minimum av X3 så är X1+X2 #< X3 inte definitivt sant

Ta bort värden [X1,X2,X3] in 1..4, X1+X2 #< X3 (1) Beräkna nytt maximum av X1,X2 max(x1) max(x3)-min(x2)=4-1-1=2 max(x2) max(x3)-min(x1)=4-1-1=2 (2) Beräkna nytt minimum av X3 min(x3) min(x1)+min(x2)=1+1+1=3 X1:1..2 X2:1..2 X3:3..4

Sökning Så länge inte alla villkor är deaktiverade kan man inte veta säkert om det finns någon lösning alltså Man måste söka värden för alla variabler

Optimering En sökning som fixerar alla variabler (också CostVar) minimize(goal, CostVar) Börja om varje gång en bättre lösning hittas

Globala villkor Verkar på en variabel-mängd i motsats till villkor mellan några få variabler Starka nödvändiga villkor OR, geometri, grafteori, flödesteori Komponenter generiska, multiple purpose, stark propagering

Villkoret alldifferent all_different(vars) List of dvar Alla Vars har olika värden. V1 in 1..3, V2 in 2..4, V3 in 1..2, all_different([v1,v2,v3]), labeling([v1,v2,v3]) [1,3,2] [1,4,2] [2,3,1] [2,4,1] [3,2,1] [3,4,1] [3,4,2]

Villkoret element element(index, Table, Value) dvar List of dvar dvar Table[Index] = Value. X in 1..5, Y in 1..6, element(x,[4,8,1,4,2,0],y), labeling([x,y]) [1,4] [3,1] [4,4] [5,2]

Villkoret cumulative cumulative(origins,durations,heights,limit) ListDvars ListDvars ListDvars Int quantity of resource duration Limit height task origin time

Exempel: cumulative O1 in 1..2, O2 in 3..3, D1 in 2..3, D2 in 2..2, H1 in 1..4, H2 in 2..3 cumulative([o1,o2],[d1,d2],[h1,h2],4), labeling([o1,d1,h1,o2,d2,h2]). [1,2,1,3,2,2] [1,3,1,3,2,3] [1,2,1,3,2,3] [1,3,2,3,2,2] [1,2,2,3,2,2] [2,2,1,3,2,2] [1,2,2,3,2,3] [2,2,1,3,2,3] [1,2,3,3,2,2] [2,2,2,3,2,2] [1,2,3,3,2,3] [2,3,1,3,2,2] [1,2,4,3,2,2] [2,3,1,3,2,3] [1,2,4,3,2,3] [2,3,2,3,2,2] [1,3,1,3,2,2]

Tillämpningar av cumulative Förnybar resurs disjunktiv schemaläggning 1 kumulativ schemaläggning Ej förnybar resurs producent-konsument Bin-packing 1 2 3 Placering

Producent-Konsument Produced Quantity P Producer task Stock Consumer task Final Stock Consumed Quantity C Initial Stock

Områden som bidragit Artificiell Intelligens villkorsnät, datadriven beräkning Logikprogrammering Prolog, icke-determinism Diskret Matematik grafteori, kombinatorik, gruppteori Optimeringslära flödesanalys, modelleringsspråk Algoritmer och datastrukturer datastrukturer, inkrementalitet

Historia ALICE (J.L.Laurière) 1976 CHIP (ECRC) 1987-1990 Industri (Bull, Cosytec, Ilog) 1990-1992 Bibliotek 1993-2003 Inbäddat i C++ Ilog, CHIP, Figaro Inbäddat i Java Koalog, JCL, MINERVA Inbäddat i Prolog SICStus, ECLiPSe, GNU, IF Inbäddat i CLAIRE ÉCLAIR, CHOCO Inbäddat i Oz Mozart Inbäddat i OCaml FaCiLe Inbäddat i Mercury HAL Inbäddat i Lisp, Python,

Villkorsteknik på SICS - tillämpningar Schemaläggning och resursallokering för järnvägar (SJ, Green Cargo) Optimering av IP-trafik (Telia) Automatisk handel (Trading Agents) DNA-sekvensanalys (Pyrosequencing) Analys av globalt genuttryck (Global Genomics) Styrprogram för bläckstråleskrivare (HP) Schemaläggning av valsverk (Ovako Steel) Frekvensplanering for basstationer (Ericsson)

Villkorsteknik på SICS - forskning Globala villkor Bra abstraktioner/komponenter Klassificering Fundamentala principer Algoritmer Debugging Modellering och metoder Beslutstödsystem för schemaläggning och planering Plattform: www.sics.se/sicstus