Model Based Programming . Spring 2004 København, den 3. maj 2004 Henrik Hulgaard. Plan. 09:00 – 10:00 F1 : Intro til Configit og konfigurering 10:00 – 10:15 Ø1 : Installation og T-shirt konfigurator 10:15 – 10:30 Pause
Une image / un lien ci-dessous est fourni (tel quel) pour télécharger la présentation
Politique de téléchargement : le contenu du site vous est fourni TEL QUEL pour votre information et votre usage personnel ; il ne peut être vendu, concédé sous licence ni partagé sur d’autres sites sans l’accord de son auteur.Le contenu vous est fourni TEL QUEL, pour votre information et votre usage personnel uniquement.Téléchargez la présentation en cliquant sur ce lien.Lors du téléchargement, si vous ne parvenez pas à télécharger une présentation, l’éditeur a peut-être supprimé le fichier de son serveur.Pendant le téléchargement, si vous ne parvenez pas à obtenir une présentation, le fichier a peut-être été supprimé par l’éditeur.
Om Configit • Lidt om Configit Software A/S: • Baggrund fra forskningsmiljøet på IT-højskolen, DTU og Århus Universitet • 50% af ansatte har ph.d. grad eller mere end én videregående uddannelse • 2 hovedforretningsområder: salgs- og produktionsstøtte-software, og setup- og installationssoftware • Pt. 18 ansatte • Patent-anmeldt kerneteknologi • Kapitaltilførsel fra ACR Capital/Slottsbacken • Referencer: Danfoss, Psion Teklogix, NetTest, Vestas, Novenco, Intentia, Wirsbo, Uponor, Lindab Model based programming
Kursusformål • Undervisning og øvelser i PM Studio og Control Manager: • Modellering: parametre, komponenter, regler, sandhedstabeller • Konfigurering: VT filer, projektfiler, præsentationslag, ordningsfiler • Validering: simulering af parametermodel • Applikationsudvikling: Java API til VT fil • Dækker ikke: • DB Studio • ERP og Excel connectors • DB integration • Web integration Model based programming
F1: Indhold • Parameteropsætning • Produktmodellering og konfigurering • Hvorfor er konfigurering svært? • Configits software suite • Gennemgang af konfigurationsteknologier • Fordele ved Configits konfigurationsteknologi Model based programming
Alle gyldige konfigurationer Alle mulige konfigurationer • En (interaktiv) konfigurator skal: • Sikre man ender med en gyldig konfiguration • Guide brugeren frem mod målet F1: Hvad er konfigurering? Model based programming
F1: Hvad er produktmodellering? En produktmodel består af: x1 , ... , xn parametre / variable D1 , ... , Dn værdier / domæner r1 , ... , rm regler / formler Svarer til een stor formel φ( x1 , ... , xn ) som angiver de gyldige konfigurationer En bruger vælger en parameter og en (gyldig) værdi: x = v Konfiguratoren svarer med de gyldige værdier V1 , ... , Vn for alle parametrene Model based programming
F1: Mærkelige T-shirts color: [ black, white, red, blue ]; size: [ S, M, L, XL ]; print: [ MiB, StW ]; if print = MiB then color = black; if print = StW then size = L or size = XL; [ ] black [ ] S [ ] MiB [ ] white [ ] M [ ] StW [ ] red [ ] L [ ] blue [ ] XL Model based programming
F1: Mærkelige T-shirts color: [ black, white, red, blue ]; size: [ S, M, L, XL ]; print: [ MiB, StW ]; if print = MiB then color = black; if print = StW then size = L or size = XL; [ ] black [ ] S [ ] MiB [√] white [ ] M [ ] StW [ ] red [ ] L [ ] blue [ ] XL Bruger vælger: color = white Model based programming
F1: Mærkelige T-shirts color: [ black, white, red, blue ]; size: [ S, M, L, XL ]; print: [ MiB, StW ]; if print = MiB then color = black; if print = StW then size = L or size = XL; [ ] black [-] S [-] MiB [√] white [-] M [√] StW [ ] red [ ] L [ ] blue [ ] XL Bruger vælger: color = white, konfiguratoren konkluderer... Model based programming
F1: Mærkelige T-shirts color: [ black, white, red, blue ]; size: [ S, M, L, XL ]; print: [ MiB, StW ]; if print = MiB then color = black; if print = StW then size = L or size = XL; [ ] black [√] S [ ] MiB [ ] white [ ] M [ ] StW [ ] red [ ] L [ ] blue [ ] XL Bruger vælger: size = S Model based programming
F1: Mærkelige T-shirts color: [ black, white, red, blue ]; size: [ S, M, L, XL ]; print: [ MiB, StW ]; if print = MiB then color = black; if print = StW then size = L or size = XL; [√] black [√] S [√] MiB [-] white [ ] M [-] StW [-] red [ ] L [-] blue [ ] XL Bruger vælger: size = S, konfiguratoren konkluderer... Model based programming
F1: Hvor svært er konfigurering? Lad os antage værdierne kun er boolske {0,1} og regler kun kan angives ud fra variable, not, og and SAT-problemet: ”Findes x1 , ... , xn så φ( x1 , ... , xn ) er sand?” er NP-fuldstændigt (Cook 1972). Essensen er: • Det er nemt at checke en løsning • Det er svært at finde en løsning Når en bruger har valgt x1,...,xk skal man beregne de gyldige værdier for xk+1, ... , xn. Det svarer til et SAT-problem for hver mulig værdi xi = v. Model based programming
F1: Hvor svært er konfigurering? Nogle konfiguratorer undgår at løse SAT-problemer, ved • Kun at tillade valg i fast rækkefølge • At begrænse regler så de kun taler om værdier der er kendte • Kun at evaluere om en konfiguration er gyldig • Kun at beregne gyldige værdier for xk+1 Det giver dog problemer med anvendeligheden: • Dead-ends kan ikke undgås • Svært at lave og vedligeholde produktmodellen • Fasttrådet rækkefølge giver dårlig brugergrænseflade Model based programming
F1: Hvor svært er konfigurering? Datalogisk naturlov: Der findes ingen algoritme som altid løser SAT effektivt! Alle algoritmerne kan tage eksponentiel tid. Det er ubehageligt! 2n vokser hurtigt: n=10: 2n=1024 n=40: 2n=1 billion n=600: 2n=antal elementarpartikler i universet Man må anvende algoritmer som "oftest" virker godt: Ad hoc Constraint propagation Virtual Tabulation Model based programming
Produktmodel: Formalisering af produktets parametre og deres afhængigheder; dvs. en specifikation af de gyldige produktkombinationer F1: Configits softwaresuite Den virtuelle tabel bruges af Control Manager til at afgøre, hvilke værdier der kan tildeles en parameter. Kompakt, lineære svartider Produktmodel oversættes til et kompakt, patent-anmeldt format, som hedder en virtuel tabel Model based programming
Ø1: Installation og T-shirt konfigurator • Installér Configit Developer og Control Manager for Java • Start PMStudio og åbn filen tshirt.cws workspacet • Gennemgå eksemplet og bliv fortrolig med reglerne • Check at filen er syntaktisk korrekt • Oversæt filen til en VT fil og kør den i PMView • Vælg color=red. Forklar hvad sker der med size og neck. • Vælg istedet color=blue. Forklar hvad sker der med size, material og itches? • Start forfra ved at trykke Reset. • Vælg size=Large.Forklar hvad der sker med color. • Vælg color=yellow. Forklar hvad der sker med material og itches. • Hvor mange løsninger kan der maksimalt være, hvis der ingen regler er? Model based programming
F2: Indhold • Variable • Identifiers • Simple typer: boolean, enumeration, integers, floats, records • Bruger-definerede typer • Regler • Arrays, optionals, kvantorer Model based programming
F2: Produkt model En produkt model består af • Parametre (kaldet variabler i PM) • Værdier for parametrene (kaldet variablens domæne) • Regler over variablerne og deres værdier En PM-fils struktur: type (Beskrives senere) ... variable ... rule ... Model based programming
F2: Eksempel på PM fil variable color: [ red, black ]; frame: [ carbon, standard_female, standard_male, off_road ]; wheel: [ rough, slick ]; rule /* the off_road frame is red */ if (frame = off_road) then (color = red); /* the wheels are rough if the frame is off_road,and vice versa */ (wheel = rough) <-> (frame = off_road); Model based programming
F2: Identifiers • Identifiers bruges til at navngive variabler, typer, labels m.m. • Enten som i C++ og Java:x11 rubber_duck color _007 • Eller i dobbelt-quotes:”bike color” ”7seas” ”18\”” ”color” Model based programming
F2: Simple typer Der er følgende simple typer i PM: • Booleanmetalic_paint: boolean; • Enumerationcolor: [ red, green, “light blue”]; • Rangesperson_age: [0..100]; • Integersconcentration: integer; • Floatstemperature: float; • Strukturerede typerCPU: { model: [ Pentium, PentiumII, AMD_K6 ]; freq: [ “500 MHz”, “750 MHz”, “1 GH” ]; }; Model based programming
F2: Variabler • Variable defineres med var_navn:var_type; • Eksempel:variable manual_transmission: boolean; chassis_color: [ red, green, blue ]; • private / public modifiers: variableprivate drive_shaft: [ xf29k, xf27j, y31i ];public chassis_color: [ red, green, blue ]; Model based programming
F2: Ang. Enumeration typer • Labels skal være unikke! • Jeg gentager, labels skal være unikke... variable shirt: [ red, green, blue ]; pants: [ red, yellow ]; /* Fejl: red erklæret 2 gange */ Model based programming
F2: Unikke labels • To måder at løse problemet på: • Brug en type:type Color : [red, green, blue, yellow ];variable shirt : Color; pants : Color; • Prefix: shirt:[ shirt_red, shirt_green, …];Hvis prefix har formen “{prefix}label” vil “{prefix}” ikke blive vist (f.eks. I PM View) Model based programming
F2: Ang. Ranges • Ranges skal være begrænsede og starte med 0: x: [0..9]; • Ranges kan indgå i aritmetiske udtryk:3*x < 13; • Brug Integers eller enumereringstyper hvis muligt. Fx. istedet for: frame_size: [0..60];brugframe_size: [ ”49 cm”, ”51 cm”, ”53 cm”, ”54 cm”, ”55 cm”, ”57 cm”, ”59 cm”, ”60 cm” ]; Model based programming
F2: Strukturerede typer • En struktureret type bruges til at gruppere et antal parametre: variable gear: { changer: [ torpedo_3, shimano_14 ]; foo: boolean; }; rule if gear.changer = torpedo_3 then gear.foo; Model based programming
F2: Type erklæringer • Man kan navngive sine egne typer:type Color: [ red, green, blue ]; variable shirt: Color; pants: Color;rule shirt <> pants; Model based programming
F2: Regler • Regler beskriver afhængigheder mellem variablerne og deres værdier:rule x > 3; • Regler er udtryk der altid skal være sande ruleshirt = red; • Kun konfigurationer, som overholder alle regler i en PM fil, er gyldige. Model based programming
F2: Konstruktion af regler • Kombinér variabler og deres værdier med operatorer: • Boolske operatorer: and, or, not, ->, =, <>, if-then-else • Range operatorer:+, -, *, <, >, <=, >=, =, <> • Integer og float operatorer:<, >, <=, >=, =, <> • Enumeration operatorer: =, <>, order() Model based programming
F2: Boolske operatorer • Eksempelvariable x : boolean; y : boolean; z : boolean;ruleif y then x else z; x and (y or not z); • Sandhedstabel: Model based programming
F2: Enumeration operatorer • Sammenligningsoperatorerne = og <>: type Color: [ red, blue, black ];variable shirt: Color; pants: Color; rule shirt = red; pants <> blue; shirt = pants; red <> black; Model based programming
F2: Regeltyper • Typiske regler: • Konflikt: not ( CPU=PentiumII and MB=ASUS ); • Altid: frequency > “200 MHz”; • Betinget: if CPU=PentiumII then MB=Intel; Model based programming
F2: Regler i strukturelle typer • Komponenter beskrevet ved strukturelle typer kan indeholde regler, der beskriver egenskaber for alle instanser af komponenten. type Gear : { name : [Acera, Sora, Torpedo, Ultega]; type : [InternalGear, ExternalGear]; rule if name = Acera then type = InternalGear; if name = Torpedo then type = ExternalGear; } Model based programming
F2: Arrays Ved flere instanser af samme type kan man benytte array typer type Wheels : array 2 of { diameter : [ ”23c”, ”25c” ]; tire : [ Racer, City ]; } • Et array indeholder et konstant antal elementer • Man kan oprette arrays af alle typer • Arrays er indekseret fra 0 Model based programming
F2: Arrays Array variabler indiceres vha. [] operatoren. variable x : array 4 ofarray 2 of [0..3]; rule x[1][1] = 3; x[2][3] = x[2][2]; /* Fejl: x[..][3] er ikke lovlig */ x[4][0] = x[4][1]; /* Fejl: x[4][..] er ikke lovlig */ Array variabler indiceres med konstanter eller range variabler constant LIMIT : 4; variable y : array LIMIT ofboolean; ruleif x[1][1] then y[LIMIT - 2] = y[LIMIT -1]; Model based programming
F2: Optionals Man kan modellere, at ikke alle komponenter altid er til stede. Eksempel: modelleret vha. ekstra variabel variable shoes : [Nike, Adidas]; have_shoes : boolean; Eksempel: modelleret vha. ekstra label variable shoes : [Nike, Adidas, NoShoes]; Model based programming
F2: Optionals Eksempel: modelleret vha. optionals variable shoes : optional [Nike, Adidas]; Optional variabler introducerer en ekstra variabel shoes : [NONE, SOME]; shoes.SOME : [Nike, Adidas]; Dette er f.eks. nyttigt ved strukturelle typer shoes : optional { brand : [Nike, Adidas]; size : [”40”, ”42”, ”44”]; }; Giver følgende variabler shoes : [NONE|SOME]; shoes.SOME.brand : [Nike|Adidas]; shoes.SOME.size : [”40”, ”42”, ”44”]; Model based programming
F2: Kvantorer Hvis man definerer array variabler, kan man benytte kvantorer til at udtrykke egenskaber ved alle elementer i arrayet. variable ram_slot : array 4 of boolean; Exist-operatoren udtrykker, at mindst et udtryk er sandt i et heltalligt interval: ruleexist i in [1..3] : ( ram_slot[i] ); /* ram_slot[1] or ram_slot[2] or ram_slot[3] */ Forall-udtrykker, at alle udtryk er sande: ruleforall i in [1..3] : ( ram_slot[i] ); /* ram_slot[1] and ram_slot[2] and ram_slot[3] */ Model based programming
F2: Kvantorer Der findes også kvantorer på range variabler: variable ram_size : array 4 of[0..127]; Sum-operatoren beregner summen af alle elementer i et interval: rulesum i in [1..3] : (ram_size[i]) > ram_capacity; /* ram_size[1] + ram_size[2] + ram_size[3] > ram_capacity; */ Product-operatoren beregner produktet af alle elementer i et interval: ruleproduct i in [1..3] : (i + LIMIT) > 42; /* (1 + LIMIT) * (2 + LIMIT) * (3 + LIMIT) > 42 */ Model based programming
F2: Kvantorer Kvantorer er kraftfulde. Her beskrives 8-queen problemet constant N : 8; variable public columns : array N of [0..N-1]; rule /* No queen can reach each other */ forall i in [0..N-2] : (forall j in [i+1 .. N-1] : /* On same row */ ((columns[i] <> columns[j]) and /* On diagonal NW - SE */ (i+columns[i]) <> (j+columns[j]) and /* On diagonal SW - NE */ (i+columns[j]) <> (j + columns[i]))); Model based programming
Ø2: Formalisering regler Udtryk følgende betingelser som PM regler: • A kræver B • A udelukker B • A medfører B • Ikke både A og B • B udelukker A • Enten A eller B • Enten A eller B, men ikke begge • Aldrig både A og B Antag fx, at A og B er boolske variabler. Model based programming
Løsningsforslag, Ø2 • A kræver B • if a then b • a -> b • not a or b • A udelukker B • if a then not b • a -> not b • not a or not b • not (a and b) • A medfører B • Det samme som A kræver B • Ikke både A og B • not (a and b) • Det samme som A udelukker B ! Model based programming
Løsningsforslag, Ø2 • B udelukker A • se A udelukker B, byt om på a og b • samme som A udelukker B ! • samme som ikke både A og B ! • Enten A eller B • a or b • Enten A eller B, men ikke begge • (a or b) and not (a and b) • (a or b) and (not a or not b) • not ( a <-> b) • a xor b • a <> b • Aldrig både A og B • samme som A udelukker B ! • samme som B udelukker A ! • samme som ikke både A og B ! Model based programming