1.13k likes | 1.3k Views
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
E N D
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 10:30 – 11:30 F2: PM Studio (1), indledende modellering, simple variabler og regler 11:30 – 12:00 Ø2: Formalisering af regler 12:00 – 13:00 Frokost 13:00 – 13:30 F3: PM Studio (2), projekter, præsentationslag 13:30 – 14:45 Ø3: Kaffe og PC konfigurator 14:45 – 15:00 Pause 15:00 – 15:30 F4: Control Manager 15:30 – 16:00 F5: Manglende emner & what’s next… (Ø3.2: PM konfigurator) Model based programming
Intro:Configit og konfigurering Kursusprogram
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
F1: ConfigIts teknologi NP-fuld. NP-fuld. P 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
Øvelse 1:Installation og T-shirt konfigurator Kursusprogram
Ø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
Forelæsning 2:PM Studio (1) Kursusprogram
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
Øvelse 2:Formalisering af regler Kursusprogram
Ø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
Forelæsning 3:PM Studio (2) Kursusprogram