Programiranje ograni cenja sa primerima u programskom ... milena/msnr/2016/11/06_ProgramiranjeOgra...Programiranje ograni cenja sa primerima u programskom jeziku Python Seminarski rad u okviru kursa Metodologija stru cnog i nau cnog rada Matemati cki fakultet

Download Programiranje ograni cenja sa primerima u programskom ... milena/msnr/2016/11/06_ProgramiranjeOgra...Programiranje ograni cenja sa primerima u programskom jeziku Python Seminarski rad u okviru kursa Metodologija stru cnog i nau cnog rada Matemati cki fakultet

Post on 15-Feb-2018

219 views

Category:

Documents

6 download

TRANSCRIPT

Programiranje ogranicenja sa primerima uprogramskom jeziku PythonSeminarski rad u okviru kursaMetodologija strucnog i naucnog radaMatematicki fakultetSasa Bukurov, Marko Cupic92sale@live.com, markozcupic@outlook.com11. maj 2016SazetakCilj ovog rada je da predstavi paradigmu programiranja ogranicenja. Uradu su predstavljeni koncepti, definicije i vrste ogranicenja, kao i problemizadovoljivosti ogranicenja. Dalje, rad se osvrce na samu paradigmu, kakoi gde se primenjuje, kao i na dostupne tehnologije.Sadrzaj1 Uvod 22 Ogranicenja 22.1 Globalna ogranicenja . . . . . . . . . . . . . . . . . . . . . . 23 Problemi zadovoljivosti ogranicenja 34 Algoritmi za resavanje problema zadovoljivosti ogranicenja 44.1 Naivni algoritmi . . . . . . . . . . . . . . . . . . . . . . . . 44.2 Napredni algoritmi . . . . . . . . . . . . . . . . . . . . . . . 45 Programiranje ogranicenja 55.1 Primena programiranja ogranicenja . . . . . . . . . . . . . . 55.2 Podrska programiranja ogranicenja . . . . . . . . . . . . . . 66 Zakljucak 6Literatura 7A Dodatak 711 UvodProgramiranje ogranicenja (eng. constraint programming) je (dekla-rativna) programska paradigma gde su relacije medu promenljivama dateu obliku razlicitih ogranicenja. Za razliku od imperativne paradigme,gde je postupak pronalazenja resenja dat u koracima, kod programira-nja ogranicenja, nije dat postupak vec su postavljeni uslovi koje pro-menljive moraju da ispunjavaju. Ogranicenja mogu biti postavljena narazlicite nacine (vise o tome je napisanu u odeljku. Uopsteno, programi-ranje ogranicenja je alat za resavanje problema zadovoljivosti ogranicenja(odeljak 3).2 OgranicenjaOgranicenje c(x1, ..., xn) ukljucuje konacan broj promenljivih odlucivanjax1, ..., xn. Svaka promenljiva xj moze uzeti vrednost vi iz konacnog skupaDj , koji se naziva domen od xj . Ogranicenje c definise relaciju Rc D1 D2...Dn [2]. Zadovoljeno je ako (v1, ..., vn) Rc. Razlikuju searitmeticka i simbolicka ogranicenja. Aritmeticka ogranicenja se odnosena matematicka ogranicenja kao sto su jednako/razlicito ili manje/vece.Programiranje ogranicenja kao paradigma daje mogucnost da se raznaogranicenja mogu koristiti i ta ogranicenja nazivamo simbolickim ogranicenjima.Paradigma dozvoljava da se razne stvari predstave i koriste kao ogranicenja.Takva ogranicenja se nazivaju simbolicka ogranicenja. Simbolicko ogranicenjeje bilo koja relacija R D1 ...Dn, ali da bi bila korisna mora da imaefikasne algoritme filtriranja [2].Postoje i druge podele ogranicenja poput: aritmeticka ogranicenja i iz-razi, logicka ogranicenja, ogranicenja kompatibilnosti, ogranicenja rasporedivanja,specijalizovana ogranicenja. Primer logickih ogranicenja je prikazan u ta-beli 1.Simbol Znacenje&& Logicka konjukcija| | Logicka disjunkcija! Logicka negacija=> Implikacija!= Razlicito== EkvivalencijaTabela 1: Primer logickih ogranicenja2.1 Globalna ogranicenjaSimbolicka ogranicenja koja nastaju grupisanjem proizvoljnog brojajednostavnih ogranicenja, koja se odnose na nekoliko promenljivih, u novoogranicenje koje se odnosi na sve promenljive nazivaju se globalna ogranicenja.Dakle globalna ogranicenja su ogranicenja koja sadrze skup drugih ogranicenja.Postoji veliki broj razlicitih globalnih ogranicenja a daljem tekstu su iz-dvojena najpopularnija.Sve razlicite (eng. Alldifferent) - Ogranicenje po kom promenljive,x1,...,xn, treba da imaju razlicite vrednosti po parovima. Dakle xi 6= xj2za sve 1 i < j n [2].Ciklus (eng. Cycle) - Ogranicenje koje omogucava kreiranje ciklusakroz usmereni graf. Za svaki cvor u grafu je poznat opseg tog cvora, tj. skojim cvorovima je direktno povezan [2].Element - Element ogranicenja element(i, l, v) oznacava da i-ta pro-menljiva u listi promenljivih l=(x1,...,xn) uzima vrednost v, tj. xi=v [2].Sortiranost (eng. Sortedness) - Ogranicenje sort(x1, ..., xn, y1, ..., yn)naznacava da je n-torka (y1,...,yn) dobijena od n-torke (x1,...,n) sortira-njem u neopadajucem poretku [2].Kardinalnost (eng. Cardinality) - Ogranicenje kardinalosti odredujenajveci broj puta koji promenljiva sme da uzme istu vrednost [2].3 Problemi zadovoljivosti ogranicenjaDefinicija 3.1 Neka je:a = (a1,a2, ...,an) D,D = D1 D2 ...Dngde su D1, D2, ..., Dn neprazni skupovi sa konacno mnogo elemenata.Nad promenljivom a = (a1, a2, ..., an) se moze postaviti skup ogranicenjaC = (C1,C2, ...,Cm)gde su ogranicenja oblika: Ci(a1, a2, ..., an)Pronalazenje jedne vrednosti (ili svih) promenljive a koja ispunjava zadataogranicenja C se naziva problem zadovoljivosti ogranicenja (sa konacnimdomenom)[1] (eng. (finite domain) constraint satisfaction problem,CSP).Ogranicenja mogu predstavljena na razlicite nacine.Primer 3.1 Postavljanje ogranicenja jednacinama:{x + y + z = 5, x z = 2, x, y, z D,D = {1, 2, 3, 4}}Ovaj problem ima jedno resenje: (x, y, z) = (1, 3, 1).Jedna vrsta CSP-a je problem zadovoljivosti (SAT problem), odnosnoproblem u kome je potrebno utvrditi da li je skupu logickih promenljivihlogicke formule moguce dodeliti vrednosti tako da formula ima vrednosttacno.Primer 3.2 SAT problem (eng. Boolean Satisfiability Problem) Jovan moze da dode na sastanak u ponedeljak, sredu ili petak Katarina ne moze da dode na sastanak u sredu. Ana ne moze da dode na sastanak u petak. Petar ne moze da dode na sastanak u utorak i cetvrtak.Odgovor na pitanje kada svi mogu da dodu na sastanak se moze dobitiresavanjem formule:(ponedeljaksredapetak)(sreda)(petak)(utorakcetvrtak)satPrimer 3.3 Kriptaritmetika Kriptaritmetike su matematicke igre u ko-jima se resavaju jednacine kod kojih su cifre brojeva zamenjene odredenimslovima. U primeru na slici 1 je potrebno zameniti slova razlicitim ciframai pocetne cifre brojeva ne smeju biti 0.3Slika 1: KriptaritmetikaPrimer 3.4 Problem osam topovaPotrebno je rasporediti osam sahovskih figura topa na standardnu sahovskutablu, na taj nacin da se topovi medusobno ne napadaju.Iz prethodnih primera se moze uociti da su algoritmi koji resavaju ovakveprobleme velike slozenosti. SAT problem je prvi problem za koji je doka-zano da je NP-tezak problem [3] (pripada klasi problema koji se resavajuu nedeterministickom polinomijalnom vremenu) .4 Algoritmi za resavanje problema zado-voljivosti ogranicenjaBiblioteke programiranja ogranicenja mogu imati razlicite pristupe zaresavanje problema. Iako nije neophodno poznavanje algoritama kojeove biblioteke koriste, dobro je poznavati ih jer je najlakse procenitikoji problemi se mogu efikasno resiti programiranjem ogranicenja. Naj-jednostavniji algoritmi su laki za implementaciju, ali su lose vremenskeslozenosti. Njihovim unapredivanjem nastaju algoritmi koji mogu efika-sno da resavaju zadatke.4.1 Naivni algoritmiPrvi nacin da se pristupi resavanju problema je ispitivanjem za svakopotencijalno resenje da li ispunjava postavljena ogranicenja. U slucajuproblema osam topova, bile bi ispitane sve moguce postavke na kojima suti topovi postavljeni, i one postavke koje ispunjavaju ogranicenja bi biledodate u skup resenja.Iako u teoriji ovi algoritmi uvek pronalaze resenja, nije uvek moguceprimeniti ih jer je potrebno previse vremena za njihovo izvrsavanje. Uproblemu osam topova, topove je moguce rasporediti na(648)(4426165368nacina) dok je broj postavki koje ispunjavaju uslov 8!, odnosno 40320nacina. Naivan pristup se moze implementirati koriscenjem bektrekingpretrage (eng. backtracking). [4]4.2 Napredni algoritmiJedna optimizacija koju je moguce uneti u bektreking algoritme pre-trage je pretraga sa proverom unapred (eng. look ahead). Za razliku oduobicajenog bektreking algoritma, gde se ogranicenja proveravaju u od-nosu na prethodno postavljene promenljive i trenutnu promenljivu, bek-treking algoritmi sa proverom unapred ispituju i promenljive koje jos uveknisu dodeljene [4]. Algoritam pokusava da odbaci sve vrednosti promen-ljivih koje jos nisu postavljene, a koje ne bi ispunjavale ogranicenja po-stavljena u problemu. Ukoliko bi se odbacile sve vrednosti koje jednapromenljiva moze da ima, trenutno stanje u pretrazi bi bilo odbaceno i4nastavkom bektreking pretrage se nastavlja izvrsavanje algoritma. Naprimeru problema topova, nakon postavljanja topa u polje u prvoj vrsti iprvom redu bilo bi moguce odbaciti sva potencijalna resenja u kojima sedrugi top nalazi u prvoj vrsti ili prvom redu.5 Programiranje ogranicenjaProgramiranje ogranicenja je postupak pronalazenja izvodljivih resenjaiz velikog skupa kandidata resenja.[1] Problem je modelovan u odnosu naproizvoljna resenja. Bazira se na logickom programiranju i teoriji grafova.Model programiranja ogranicenja je deklarativnog tipa. Vecina problemase moze modelovati kao skup ogranicenja gde je cilj nalazenje izvodljivogresenja: zadati vrednosti promenljivama takve da je svako ogranicenjezadovoljeno. Problem koj resavamo mozemo predstaviti kao problem za-dovoljivosti ogranicenja. Formulisemo problem sa promenljivim na nekomkonkretnom skupu sa zadatim ogranicenjima, zatim biramo jezik u komecemo da predstavimo ogranicenja. Za resavanje problema koristimo me-todu specificnu za zadati domen ili neku opstu metodu, a mogu se kori-stiti oba pristupa. Cilj programiranja ogranicenja je da se eliminisu svenemoguce vrednosti, a zatim da se iz skupa mogucih vrednosti odaberunajbolja za dat problem [1].Programiranje ogranicenja je relativno novo ali ima siroku i aktivnuzajednicu sirom sveta sa posvecenim naucnim casopisima i konferencijama[5]. Uspesno se primenjuje u planiranju, zakazivanju i drugim oblastima saraznolikim ogranicenjima. Programiranje ogranicenja se javlja u mnogimnaucnim i inzenjerskim disciplinama. Termin programiranje je pogresnoiskoriscen jer se programiranje ne odnosi na pisanje koda vec postavljanjeokvira u kojim program radi [5].5.1 Primena programiranja ogranicenjaPrimena ove paradigme je veoma siroka, krece se od matematike prekohemije pa do svakodnevnog zivota. Neke od svetskih korporacija kojekoriste ovu paradigmu u sklopu organizacije [6]: British Airways, SAS,Swissair, French railway authority SNCF, Hong Kong International Ter-minals, Michelin, Dassault...Neki od problema koji se resavaju pomocu paradigme su [6] mozgalice N-kraljica Zebra (problem 5 kuca) ukrstene reci kritpoaritmetika bojenje grafa analiza i sinteza analognih kola sekvenciranje DNK planiranje lokacija skladista rasporedivanje saltera na aerodromu seca bolesnog drveca (eng. forest treatment scheduling)5 hipoteticko rezonovanje u hemiji (eng. chemical hypothetical reaso-ning) analiza poslovanja u posrednistvu (eng. option trading analysis) problem rasporedivanja posade (eng. crew rostering problem)5.2 Podrska programiranja ogranicenjaPre navodenja podrske u popularnim i modernim jezicima treba na-glasiti da je paradigma nastala u programskom jeziku Prolog.Poznate biblioteke za popularne programske jezike Artelys Lakis (C++, Java, Python) https://www.artelys.com/en/optimization-tools/kalis Cassowary (C++, Java, JavaScript, Ruby, Smalltalk, Python) https://constraints.cs.washington.edu/cassowary/ CHIP V5 (C++, C) http://www.cosytec.com/production_scheduling/chip/chip_technology.htm Choco (Java) http://choco-solver.org/ Cream (Java) http://bach.istc.kobe-u.ac.jp/cream/ Disolver (C++) http://research.microsoft.com/apps/pubs/default.aspx?id=64335 Gecode (C++, Python) http://www.gecode.org/ Google or-tools (Python, Java, C++, .NET) https://github.com/google/or-tools JaCoP (Java) http://jacop.osolpro.com/ JOpt (Java) http://jopt.sourceforge.net/ Numberjack (Python) http://numberjack.ucc.ie/ Minion (C++) http://constraintmodelling.org/minion/ python-constrains (Python) http://labix.org/python-constraint Z3 (C++, Java, Python, C, C#) https://github.com/Z3Prover/z3Jezici koji imaju direktnu podrsku za programiranje ogranicenja Claire http://www.claire-language.com/ Curry(zasnovan na Haskell-u) http://www-ps.informatik.uni-kiel.de/currywiki/ Kaleidoscope https://constraints.cs.washington.edu/cip/kaleidoscope-asi.html Oz http://strasheela.sourceforge.net/strasheela/doc/01-Basics.html Wolfram language https://www.wolfram.com/language/6 ZakljucakProblemi koji se resavaju programiranjem ogranicenja su obicno ve-oma slozeni za resavanje. Iako naivni pristupi resavanju problema dajutacna resenja, njih u praksi nije moguce koristi, jer takvi algoritmi suvelike vremenske slozenosti. Prednosti koje pruzaju jezici specijalizovaniza programiranje ogranicenja i biblioteke u jezicima opste namene (po-put jezika Python i Jave) su formalizacija procesa pronalazenja resenja idovoljno dobra optimizacija algoritama koje ovi alati pruzaju.6https://www.artelys.com/en/optimization-tools/kalishttps://www.artelys.com/en/optimization-tools/kalishttps://constraints.cs.washington.edu/cassowary/https://constraints.cs.washington.edu/cassowary/http://www.cosytec.com/production_scheduling/chip/chip_technology.htmhttp://www.cosytec.com/production_scheduling/chip/chip_technology.htmhttp://choco-solver.org/http://bach.istc.kobe-u.ac.jp/cream/http://research.microsoft.com/apps/pubs/default.aspx?id=64335http://research.microsoft.com/apps/pubs/default.aspx?id=64335http://www.gecode.org/https://github.com/google/or-toolshttps://github.com/google/or-toolshttp://jacop.osolpro.com/http://jopt.sourceforge.net/http://numberjack.ucc.ie/http://constraintmodelling.org/minion/http://labix.org/python-constrainthttps://github.com/Z3Prover/z3http://www.claire-language.com/http://www-ps.informatik.uni-kiel.de/currywiki/http://www-ps.informatik.uni-kiel.de/currywiki/https://constraints.cs.washington.edu/cip/kaleidoscope-asi.htmlhttps://constraints.cs.washington.edu/cip/kaleidoscope-asi.htmlhttp://strasheela.sourceforge.net/strasheela/doc/01-Basics.htmlhttp://strasheela.sourceforge.net/strasheela/doc/01-Basics.htmlhttps://www.wolfram.com/language/Literatura[1] Krzysztof R. Apt. Principles of Constraint Programming. CarnegieMellon University, 5000 Forbes Ave, Pittsburgh, PA 15213, UnitedStates, 1999.[2] Alexander Bockmayr and John N. Hooker. Constraint programming.Carnegie Mellon University, 5000 Forbes Ave, Pittsburgh, PA 15213,United States, 2003.[3] Stephen A Cook. The complexity of theorem-proving procedures. InProceedings of the third annual ACM symposium on Theory of com-puting, pages 151158. ACM, 1971.[4] Sally C. Brailsford et al. European Journal of Operational Research119 (1999) 557581.[5] Google. developer.google.com, 2013. on-line at: https://developers.google.com/optimization/cp//.[6] Karlov univerzitet u Pragu. Karlov univerzitet u Pragu, 2016. on-lineat: http://kti.mff.cuni.cz/~bartak/constraints/intro.html.A DodatakU datoteci ProgramiranjeOgranicenja.zip su dati primeri koriscenjabiblioteke python-constraint u programskom jeziku Python.Prvi program ilustruje pronalazenje Armstrong-ovih brojeva, daklebrojeva ciji je zbir kubova cifara jednak njemu samom. U programu jeilustrovan rad ogranicenja AllDIfferentConstraint koj yadaje da sve 3 cifremoraju biti razlicite.from con s t r a i n t import de f main ( ) :problem = Problem ( )problem . addVar iables ( abc , range (0 , 10 ) )problem . addConstraint ( A l lD i f f e r e n tCon s t r a i n t ( ) )# problem . addConstraint ( lambda a , b , c : a !=1)problem . g e tSo l u t i on s ( )f o r s o l u t i o n in problem . g e tSo l u t i on s ( ) :a = s o l u t i o n [ a ]b = so l u t i o n [ b ]c = s o l u t i o n [ c ]va lue = (100 a+10b+c ) 1 .0value2 = ( a3+b3+c 3) 1 .0i f va lue2 == 0 :value2 = 1 .0i f va lue / value2 == 1 . 0 :p r i n t s o l u t i o ni f name == main :main ( )7https://developers.google.com/optimization/cp//https://developers.google.com/optimization/cp//http://kti.mff.cuni.cz/~bartak/constraints/intro.htmlDrugi program je predstavlja pronalazenje broja trocifrenog broja Xtakvog da daje celobrojno resenje pri deljenju brojem X. X predstavljarazliku zbira cifara stotina i desetica i cifre jedinica. U tom kodu je ilu-strovano koriscenje proizvoljnih ogranicenja.from con s t r a i n t import de f main ( ) :problem = Problem ( )problem . addVar iables ( abc , range (1 , 10 ) )problem . addConstraint ( lambda a , b , c : a!=b)problem . addConstraint ( lambda a , b , c : a>c )problem . addConstraint ( lambda a , b , c : c !=b)problem . addConstraint ( A l lD i f f e r e n tCon s t r a i n t ( ) )problem . g e tSo l u t i on s ( )minvalue = 100minso lut ion = {}f o r s o l u t i o n in problem . g e tSo l u t i on s ( ) :a = s o l u t i o n [ a ]b = so l u t i o n [ b ]c = s o l u t i o n [ c ]b r o j i l a c = ( a100+b10+c )imen i l a c = ( a+bc )i f imen i l a c > 0 :va lue = b r o j i l a c 1 .0/ imen i l a c 1 .0value2 = b r o j i l a c / imen i l a ci f va lue < minvalue and value value2 ==0 :minso lut ion = so l u t i o nminvalue = value2p r i n t minvaluep r i n t minso lut ioni f name == main :main ( )8UvodOgranienjaGlobalna ogranienjaProblemi zadovoljivosti ogranienjaAlgoritmi za reavanje problema zadovoljivosti ogranienjaNaivni algoritmiNapredni algoritmiProgramiranje ogranienjaPrimena programiranja ogranienjaPodrka programiranja ogranienjaZakljuakLiteraturaDodatak

Recommended

View more >