Modelleren en Programmeren voor KI Practicumopdracht 4: SAT Solver

Slides:



Advertisements
Verwante presentaties

Advertisements

Van domeinklasse tot implementatie
Hoofdstuk 9 havo KWADRATEN EN LETTERS
Excel, zin in een potje Zeeslag?
Het type int Tekenen met Java operatoren
Klassen en objecten.
Balansmethode.
Hoofdstuk 6: Controle structuren
1 SOCS Hoofdstuk 1 Programmeertaal C. 2 Kenmerken van C Hogere programmeertaal  Grote verzameling types, strenge type controle  Zelf nieuwe types definiëren.
Fibonacci & Friends Met dank aan Gerard Tel.
Gebruiken.
T U Delft Parallel and Distributed Systems group PGS Fundamentele Informatica in345 Deel 2 College 5 Cees Witteveen.
T U Delft Parallel and Distributed Systems group PGS Fundamentele Informatica In3005 Deel 2 College 3 Cees Witteveen
Inleidend probleem Data structuur (hiërarchie van classes)
Hoofdstuk Strings en arrays. Primitieve types nint gehele getallen-17, -5, 0, 3, 178 ndouble reëele getallen3.141, 2.0, -1.5E8 nbool waarheidswaarden.
Verhoudingstabel Er is een voorraad laxeermiddel. Die oplossing bevat 15% natriumsulfaat. Dit betekent: 15 gram per 100 mL oplossing. Kinderen krijgen.
Consoletoepassing Variabelen Klassen
Algoritmiek Object-georiënteerd Programmeren
LauwersCollege Buitenpost Java Applet programma dat op een website zichtbaar is Java Application programma dat zelfstandig werkt Javascript Scripttaal.
Opgave 1a: void nvoid staat in de header van een methode die geen resultaatwaarde heeft nde aanroep van een void-methode is dan een opdracht i.p.v. een.
Inleiding in de statistiek voor de gedragswetenschappen
ABC formule Algemeen Voorbeeld: Herleid naar: Nu volgorde veranderen:
Scope. Scope van variaben/methoden Een variabele is te gebruiken binnen de { en } waarbinnen hij is aangemaakt. Hetzelfde geld voor een methode { int.
Instructie Programmeren Task 4 5JJ70. Task 4.1: Iteratief proces Het doel van de opdracht is de uitgangsspanning van een transistor te bepalen met de.
Java Objectgeoriënteerd Programmeren in Java met BlueJ
Java Objectgeoriënteerd Programmeren in Java met BlueJ Hoofdstuk 8: Gebruikersinterface © 2014, Gertjan Laan, versie 2.
ANALYSE 3 INFANL01-3 WEEK CMI Informatica.
Programmeren met kinderen NWT-conferentie basisonderwijs SPANNING & SENSATIE.
 C++ heeft een inheritance mechanisme  Manier om functionaliteit te ‘erfen’ van een parrent class ◦ Polymorphisme ◦ Zoals we het ook in C# kennen.
Rekenen met variabelen. Variabele: rekenen met variabelen een variabele is een letter die een getal voorstelt. de letters a, b, c, n, p, q, x, y en z.
Soorten programma’s nConsole- applicatie. Soorten programma’s nConsole- applicatie nWindows- applicatie.
Gecijferdheid Les 2.1 Talstelsels.
Welkom! maandag 16 November 2015 Les B-2.
Codetuts Academy Les 6 Module 2a Php Fundamentals 1.
1 februari 2016 PHP expressie statement. 1 februari 2010 Titel van de presentatie 2 Boole logica? Definitie De booleaanse operatoren zijn genoemd naar.
Les 3 - Operators Workshop Php Basic. ICT Academy Php Basic Content Operators Wiskundig Toewijzing Vergelijking.
Loops en errors Array's Random try catch for loop while loop do while loop.
IF() ELSE() LES 4: VOORWAARDEN. BOOL Een variabele die slechts 2 mogelijke waarden kan hebben: true(waar) of false(niet waar) duid je aan met bool bool.
De definitie van een object. Een object is een verzameling van eigenschappen en bewerkingen. Veel voorkomende objecten zijn: D (display) Gui (user interface)
Informatie beoordelen If else Switch En Wiskunde.
Datastructuren voor grafen Algoritmiek. 2 Grafen Model van o.a.: –Wegennetwerk –Elektrische schakeling –Structuur van een programma –Computernetwerk –…
Robby de Robot. Javascript Tot nu toe gebruikt: – document.write(" Hello World "); – alert("tekst") – Toon een waarschuwingsvenster – prompt("tekst",
Kennismaking met programmeren
Programmeren met Reeksen
Gameprogrammeren: Objecten en geheugen
Gevorderde EV3 PROGRAMMEER LES
Gevorderde programmeer Les
Gameprogrammeren: Lists en interfaces
Kennismaking met programmeren
Gameprogrammeren: Overerving
Hoofdstuk 9.2 Strings.
Object georiënteerd programmeren
Gameprogrammeren: Expressies
Windows-applicatie using System.Windows.Forms; using System.Drawing;
Gameprogrammeren: Methoden
Gameprogrammeren: Herhalingen
Voorbeeld: Simulatie van bewegende deeltjes
Opdrachten herhalen public void tekenScherm (object o, PEA pea)
Kennismaking met programmeren
Gameprogrammeren: Klassen en objecten
Minimodules voor de 3e klas
3 vmbo-KGT Samenvatting Hoofdstuk 10
Implementatie Zoekboom
ASP.NET MVC Web Development
Ontwerp een buitenles Les 1 Les 4.
Hoofdstuk 4 - les 2 Elektrische energie.
Software Development fundamentals
Software Development fundamentals
Software Development fundamentals
Python – For loop + strings
Transcript van de presentatie:

Modelleren en Programmeren voor KI Practicumopdracht 4: SAT Solver Tomas Klos

Het SAT probleem

Parvulae Logicales: Propositielogica, Hoofdstuk 6 (Semantiek), p. 62:

((¬¬(p∧(q∨r))∧¬s)→¬t) Het SAT probleem Ik geef je een propositielogische formule F, jij moet zeggen of hij vervulbaar (SATisfiable) is. Hoe kun je daar achter komen? Hoe kun je dat zien aan de waarheidstabel van F? Is er (tenminste) één rij in de waarheidstabel van F, waar een 1 staat onder het hoofdvoegteken van F? Bijvoorbeeld: is deze formule vervulbaar? ((¬¬(p∧(q∨r))∧¬s)→¬t)

Waarom is SAT belangrijk?

Waarom is SAT belangrijk? Het SAT probleem modelleert vele praktijkproblemen Vrachtwagens routeren Treinroostering Productieplanning Zalenroostering Order picking in magazijnen Onderhoudsactiviteiten in werkplaatsen plannen Algemeen: Dit zijn allemaal (NP-)moelijke problemen Oplossingen zijn toekenningen van waarden aan variabelen

Aanpak (moeilijke) problemen Modelleren als propositielogische formule SAT solver ontwerpen en programmeren Is de formule vervulbaar (SATisfiable)? Ja, vervulbaar: zo’n valuatie is een oplossing voor het probleem Nee, niet vervulbaar: er is geen oplossing Het SAT probleem is NP-compleet (d.w.z. hoogstwaarschijnlijk heel moeilijk: we weten niks wezenlijk beters dan alle mogelijkheden proberen)

Assignment problemen 1 2 3 Simpel voorbeeld: Graafkleuren: Ken (precies) 1 van 2 kleuren uit {R, B} toe aan elke knoop Kanten zijn `constraints’: verbonden knopen moeten verschillende kleur krijgen (Dit is triviaal, maar denk aan het algemene geval.) Q: Hoe kunnen we dit probleem modelleren? A: We gebruiken binaire beslissingsvariabelen Constraints zijn ‘vergelijkingen’ (formules) Logische connectieven zijn de operatoren in die vergelijkingen Een oplossing is een vervullende toekenning (‘model’) 2 3 1

‘Assignment probleem’ model 2 3 1 Modelleren: Welke variabelen gebruiken we? xnc = 1 desda knoop n kleur c heeft Dus: welke variabelen? x1R, x1B, x2R, x2B, x3R, x3B

‘Assignment probleem’ model Wat zijn de constraints? Elke knoop krijgt een kleur (“r of b”) Geen knoop krijgt meerdere kleuren (niet “r en b” dus) Verbonden knopen krijgen verschillende kleuren Welke constraints? x1R ∨ x1B, x2R ∨ x2B, x3R ∨ x3B, ¬x1R ∨ ¬x1B, ¬x2R ∨ ¬x2B, ¬x3R ∨ ¬x3B, ¬x1R ∨ ¬x2R, ¬x1B ∨ ¬x2B, ¬x2R ∨ ¬x3R, ¬x2B ∨ ¬x3B, ¬x3R ∨ ¬x1R, ¬x3B ∨ ¬x1B 2 3 1

Generaliseren In zaalroostering, bijvoorbeeld: xvzhd = 1 desda vak v is geroosterd in zaal z tijdens uur h van dag d Voorbeeld van constraint: x KI1V13009_KBG-ATLAS_1_V ∨ x KI1V13009_KBG-ATLAS_3_V ∨ x KI1V13009_KBG-ATLAS_5_V ∨ … Q: Hoe ziet een oplossing eruit? A: Een toekenning van 0 of 1 aan alle variabelen, die alle constraints vervult.

Sudoku Welke variabelen? Hoeveel zijn dat er? xijk = 1 desda in rij i en kolom j getal k staat x111, x112, x113, x114, ..., X121, x122, x123, x124, ..., ... x991, x992, x993, ..., x999. Hoeveel zijn dat er? 93 = 729.

Sudoku constraints Elk 3x3 blok bevat elk getal: x111 ∨ x121 ∨ x131 ∨ ... etc. (ook voor de andere 3x3 blokken)

Sudoku constraints Elk getal één keer in een blok: ¬(x111 ∧ x112) ... ¬(x112 ∧ x113) ¬(x112 ∧ x114) ¬(x331 ∧ x332) ¬(x338 ∧ x339) etc. voor de andere 3x3 blokken

Sudoku constraints Elk getal in elke rij: x111 ∨ x121 ∨ ... ∨ 191 etc. (voor de overige rijen, en ook voor de kolommen)

Sudoku constraints Dit worden 8829 disjuncties: 81 9-aire 8748 binaire De gehele formule is de conjunctie van al deze disjuncties Wat ontbreekt er nou nog? x112 ∧ x133 ∧ x159 ∧ x196 ∧ x221 ∧ ... ∧ x986

En nou... oplossen! Nog een keer: hoe bepaal je of een formule vervulbaar is? Onze aanpak: Lees de formule in (‘parse’) Verzamel alle variabelen Beschouw de variabelen achter elkaar: x1, x2, x3, ... maak ze achtereenvolgens True en als nodig False. Check of de formule waar of onwaar kan zijn Vind je een valuatie die de formule waar maakt? “SAT” + valuatie Vind je niet zo’n valuatie? “UNSAT”

Parsen? Terug naar Logica voor KI

Voorbeeld van een formule Stel dat je dit inleest: (((a\/b)/\(-b\/c))/\-a) Wat is het hoofdvoegwoord? Conjunctie, met deze conjuncten (ook formules!) ((a ∨ b) ∧ (¬b ∨ c)) en ¬a Wat weet je dus over een valuatie die deze formule waar maakt (als hij bestaat?) Als a True is kan deze formule niet waar zijn! Zo gaan we het doen: kan een formule nog waar zijn, gegeven de toekenningen die ik al heb gedaan?

Voorbeeld van een formule (((a\/b)/\(-b\/c))/\-a) Hoe bepaal je de waarheidswaarde?

Voorbeeld van een formule F (((a\/b)/\(-b\/c))/\-a) Hoe bepaal je de waarheidswaarde? V(F) = min(V(((a ∨ b) ∧ (¬b ∨ c))), V(¬a)) De valuatiefunctie is recursief! We weten niet wát voor formules dit zijn, maar wel dát het formules zijn. Welke programmeerconcept gebruiken we dus hiervoor?

Interface Formule public interface Formule { // onder andere bijvoorbeeld: int MethodeA(String s); string ToString(); } Schrijf code voor deze methoden in de klassen die deze interface implementeren, bijvoorbeeld: public class Disjunctie : Formule { public MethodeA(String s) { //code voor deze methode hier. }

Handig, zo’n interface! Dan kun je in je Main programma dit doen: static Valuatie Vervulbaar(Formule formule) { // bepaal of formule vervulbaar is, zonder dat je weet // welk specifiek type formule dit is! // (negatie, conjunctie, ...) }