Metoda Branch_and_Bound (ramifică şimărgineşte) seaseamănă cu metoda Back_Tracking, însă diferă în primul rând prin ordinea de parcurgere a spaţiului

Similar documents
Titlul lucrării propuse pentru participarea la concursul pe tema securității informatice

C_13 / Metoda Greedy. 3. Metoda Back Tracking 4. Metoda Programării Dinamice. 6. Metode. Euristice 1/35/35

Reflexia şi refracţia luminii. Aplicaţii. Valerica Baban

D în această ordine a.î. AB 4 cm, AC 10 cm, BD 15cm

Subiecte Clasa a VI-a

Metrici LPR interfatare cu Barix Barionet 50 -

Olimpiad«Estonia, 2003

2. Setări configurare acces la o cameră web conectată într-un router ZTE H218N sau H298N

Semnale şi sisteme. Facultatea de Electronică şi Telecomunicaţii Departamentul de Comunicaţii (TC)

Procesarea Imaginilor

Structura și Organizarea Calculatoarelor. Titular: BĂRBULESCU Lucian-Florentin

Modalitǎţi de clasificare a datelor cantitative

The First TST for the JBMO Satu Mare, April 6, 2018

GHID DE TERMENI MEDIA

Ghid identificare versiune AWP, instalare AWP şi verificare importare certificat în Store-ul de Windows

Metoda de programare BACKTRACKING

Textul si imaginile din acest document sunt licentiate. Codul sursa din acest document este licentiat. Attribution-NonCommercial-NoDerivs CC BY-NC-ND

Versionare - GIT ALIN ZAMFIROIU

Metoda BACKTRACKING. prof. Jiduc Gabriel

Arbori. Figura 1. struct ANOD { int val; ANOD* st; ANOD* dr; }; #include <stdio.h> #include <conio.h> struct ANOD { int val; ANOD* st; ANOD* dr; }

Grafuri bipartite. Lecție de probă, informatică clasa a XI-a. Mihai Bărbulescu Facultatea de Automatică și Calculatoare, UPB

REVISTA NAŢIONALĂ DE INFORMATICĂ APLICATĂ INFO-PRACTIC

La fereastra de autentificare trebuie executati urmatorii pasi: 1. Introduceti urmatoarele date: Utilizator: - <numarul dvs de carnet> (ex: "9",

ARBORI AVL. (denumiti dupa Adelson-Velskii si Landis, 1962)

Mecanismul de decontare a cererilor de plata

ISBN-13:

MS POWER POINT. s.l.dr.ing.ciprian-bogdan Chirila

CHAMPIONS LEAGUE 2017 SPONSOR:

Mods euro truck simulator 2 harta romaniei by elyxir. Mods euro truck simulator 2 harta romaniei by elyxir.zip

Dispozitive Electronice şi Electronică Analogică Suport curs 02 Metode de analiză a circuitelor electrice. Divizoare rezistive.

Lucrarea de laborator nr. 4

Auditul financiar la IMM-uri: de la limitare la oportunitate

Class D Power Amplifiers

2. In the pattern below, which number belongs in the box? 0,5,4,9,8,13,12,17,16, A 15 B 19 C 20 D 21

Aspecte controversate în Procedura Insolvenţei şi posibile soluţii

În continuare vom prezenta unele dintre problemele de calcul ale numerelor Fibonacci.

Baze de date distribuite și mobile

3. Metoda Back Tracking 4. Metoda Programării Dinamice 5. Metoda Branch and Bound 6. Metode. Euristice 7. Algoritmi Genetici

Curs 11. Probleme de IA şi rezolvarea lor

Nume şi Apelativ prenume Adresa Număr telefon Tip cont Dobânda Monetar iniţial final

INFORMAȚII DESPRE PRODUS. FLEXIMARK Stainless steel FCC. Informații Included in FLEXIMARK sample bag (article no. M )

2. Setări configurare acces la o cameră web conectată într-un echipament HG8121H cu funcție activă de router

Update firmware aparat foto

F. Radulescu. Curs: Utilizarea bazelor de date, anul IV C5.

Printesa fluture. Мобильный портал WAP версия: wap.altmaster.ru

ACTA TECHNICA NAPOCENSIS

Documentaţie Tehnică

Vizualizarea documentelor xml

CAIETUL DE SARCINI Organizare evenimente. VS/2014/0442 Euro network supporting innovation for green jobs GREENET

HEAPSORT I. CONSIDERAŢII TEORETICE

9. Memoria. Procesorul are o memorie cu o arhitectură pe două niveluri pentru memoria de program și de date.

Candlesticks. 14 Martie Lector : Alexandru Preda, CFTe

DE CE SĂ DEPOZITAŢI LA NOI?

Prima. Evadare. Ac9vity Report. The biggest MTB marathon from Eastern Europe. 7th edi9on

Updating the Nomographical Diagrams for Dimensioning the Concrete Slabs

CERERI SELECT PE O TABELA

Ce pot face pe hi5? Organizare si facilitati. Pagina de Home

Managementul referinţelor cu

The driving force for your business.

KAJOT V.RO BLACK PLANET JOC DE NOROC CU RISC LIMITAT

INSTRUMENTE DE MARKETING ÎN PRACTICĂ:

SAG MITTIGATION TECHNICS USING DSTATCOMS

manivelă blocare a oglinzii ajustare înclinare

A Die-Linked Sequence of Dacian Denarii

Mircea Merca 1) Articol dedicat Prof. Dr. Ioan Tomescu la a 70-a aniversare

Laborator 1. Programare declarativă. Programare logică. Prolog. SWI-Prolog

Strategii pentru jocul de dame Dame Inteligente

Propuneri pentru teme de licență

Universitatea Babeş-Bolyai, Cluj-Napoca Facultatea de Matematică şi Informatică

Procesarea Imaginilor - Laborator 5: Etichetarea componentelor conexe 1

Behavioral design patterns (comportamentale) ALIN ZAMFIROIU

INTELIGENŢĂ ARTIFICIALĂ

ANTICOLLISION ALGORITHM FOR V2V AUTONOMUOS AGRICULTURAL MACHINES ALGORITM ANTICOLIZIUNE PENTRU MASINI AGRICOLE AUTONOME TIP V2V (VEHICLE-TO-VEHICLE)

A NOVEL ACTIVE INDUCTOR WITH VOLTAGE CONTROLLED QUALITY FACTOR AND SELF-RESONANT FREQUENCY

MODELUL UNUI COMUTATOR STATIC DE SURSE DE ENERGIE ELECTRICĂ FĂRĂ ÎNTRERUPEREA ALIMENTĂRII SARCINII

TRAJECTORIES GENERATED BY THE R-R-RRT MECHANISM TRAIECTORII GENERATE DE MECANISMUL R-R-RRT

Reţele Neuronale Artificiale în MATLAB

Capete terminale şi adaptoare pentru cabluri de medie tensiune. Fabricaţie Südkabel Germania

X-Fit S Manual de utilizare

INTEROGĂRI ÎN SQL SERVER

Capitolul 7. Data mining. F. Radulescu. Curs: Utilizarea bazelor de date, anul IV C5.

CERERI SELECT PE MAI MULTE TABELE

LINEAR VOLTAGE-TO-CURRENT CONVERTER WITH SMALL AREA

I. STRATEGII ÎN REZOLVAREA PROBLEMELOR

PROCEDURA PRIVIND DECONTURILE. 2. Domeniu de aplicare Procedura se aplică în cadrul Universităţii Tehnice Cluj-Napoca

Interogarea (query), este operaţia prin care se obţin datele

Structuri de date: ARBORI

Itemi Sisteme de Operare

ACTA TECHNICA NAPOCENSIS

Evoluția pieței de capital din România. 09 iunie 2018

REZOLVAREA NUMERICĂ A ECUAŢIILOR CU DERIVATE PARŢIALE FOLOSIND METODA LINIILOR

Vol.I ALGORITMI GENETICI LUȚĂ COSTINA CLAUDIA ALGORITMI GENETICI VOL.I ISBN

5.3 OSCILATOARE SINUSOIDALE

Programare în limbaj de asamblare 16. Formatul instrucţiunilor (codificare, moduri de adresare).

NELINIARITATE ŞI AUTOORGANIZARE ÎN SISTEMELE CU PLASMĂ

R O M Â N I A CURTEA CONSTITUŢIONALĂ

Funcţii grup şi clauzele GROUP BY, HAVING. Operatorii ROLLUP şi CUBE.

MINTE, CONȘTIINȚĂ LIBERUL ARBITRU.

LIDER ÎN AMBALAJE EXPERT ÎN SISTEMUL BRAILLE

Legea aplicabilă contractelor transfrontaliere

Transcription:

Sem. 13 / 6.01.2014 11. Metode de elaborare a algoritmilor 1. Metoda Greedy 2. Metoda Divide et Impera 3. Metoda Back Tracking 4. Metoda Programării Dinamice 5. Metoda Branch and Bound 6. Metode Euristice 7. Algoritmi Genetici 1/17

11.5. Metoda Branch_and_Bound Metoda Branch_and_Bound (ramifică şimărgineşte) seaseamănă cu metoda Back_Tracking, însă diferă în primul rând prin ordinea de parcurgere a spaţiului soluţiilor posibile (a spaţiului stărilor). Am văzut că la metoda Back_Tracking mulţimile ce compun spaţiul stărilor posibile trebuie să fie finite şi de asemenea componentele vectorului X căutat iau valori fără nici o prioritate (preferinţă). La metoda Branch_and_Bound, spaţiul stărilor este parcurs într-un mod mai inteligent, algoritmul fiind capabil să simtă soluţia, să se îndrepte spre aceasta, şi în plus metoda Branch_and_Bound nu poate conduce la un ciclu infinit, dacă problema are soluţie, chiar dacă spaţiul stărilor este infinit. În continuare vom încerca să descriem această metodă, apoi algoritmul general de rezolvare a unei probleme prin aceasta. 2/17

Metoda Branch_and_Bound Fie S={s 1,s 2,...,s n }omulţimedestări posibile, care conţine o stare iniţială s p cunoscută (precizată) şii o stare finală s f cunoscută (dată) sau care poate fi recunoscută (admisă ca stare finală) după anumite cerinţe (condiţii sau caracteristici precizate în problemă). Pot exista mai multe stări finale F S. Dintr-o stare si se poate trece (ramifica) în mai multe stări s i1,s i2,...s ij, printr-o transformare (dată de problema concretă pe care o avem de rezolvat) de forma : T : S P(S), T(s i )={s i1,s i2,...s ij }, pentru i=1,2,,n. j Se cere să determinăm o succesiune de stări începând cu starea iniţială s p până la starea finală s f aplicând succesiv transformarea T. Aceasta înseamnă că va trebui să determinăm şirul stărilor de forma s k1,s k2,...s km, pentru care: s k1 =s p, s k2 =T(s k1 ),, s ki =T(s ki-1 ),, s km =T(s km-1 )=s f F. Pentru că în general putem avea mai multe soluţii (chiar o infinitate), se poate cere să determinăm cea mai scurtă secvenţăţ rezultat, adică cea pentru care m este minim. 3/17

Metoda Branch_and_Bound Pentru a ajunge la starea finală vom utiliza o mulţime de stări active (posibile pentru continuare spre starea finală) din care vom alege acea stare care este cât mai aproape de starea iniţială şidestareafinală (distanţa delastareainiţială + distanţa până la starea finală este minimă). Distanţa faţă de starea iniţială se poate uşor măsura (determina) fiind numărul de transformări aplicate stării iniţiale pentru a obţine acea stare: d 1 :S N, d 1 (s) = k dacă s T k (s p ). Distanţa delaostares i la starea finală s f, în general este greu de calculat, de cele mai multe ori nu se poate determina doar după ce am rezolvat problema în sine. Din această cauză va trebui să căutăm o aproximantă a acesteia, care poate fi uşor calculată pentru problema concretă dată. Această distanţă va fi de forma : d 2 : S R +, iar d 2 (s f )=0. Criteriul de alegere din mulţimea stărilor active constă în determinarea acelei stări care realizează minimul sumei distanţelor d 1 şid 2. Aceasta înseamnă că dacă la un moment dat, mulţimea stărilor active este S a ={s a1,...,s al }, atunci se alege starea s aj, pentru care : d 1 (s aj )+d 2 (s aj ) = min { d 1 (s ai )+d 2 (s ai ) / s ai Sa }. 4/17

Metoda Branch_and_Bound Strategia Branch_and_Bound este următoarea : iniţial S a ={s p }, iar pentru o mulţime de stări active obţinută la un moment dat se alege o stare curentă sc (o stare de continuare, aşa cum am arătat mai sus) iar în locul ei se depune în mulţimea stărilor active acele stări care se ramifică din ea ( S a :=S a \ {s c } T(s c )). Dacă printr-o astfel de transformare (ramificare) am ajuns la o stare finală s f F problema este rezolvată. Pentru ca într-o problemă să putem aplica metoda Branch_and_Bound, and Bound va trebui să ne asigurăm că problema are soluţie, altfel strategia prezentată poate conduce la un ciclu infinit. Cele două distanţe (d 1 şid 2 ) nu ne vor permite să ne îndepărtăm preamultde starea iniţială (d 1 ) şi deasemeneadacă d 2 este mărginită ( k N :d 2 (s) k, s S), atunci metoda nu admite o abatere de la calea corectă (spre soluţie) decât cu cel mult k paşi(mărginirea posibilităţilor). Pentru a putea reconstitui drumul parcurs de la starea iniţială la starea finală vom reţine pentru fiecare stare care rezultată dintr-o ramificaţie starea care se transformă. Dacă T(s)={s 1,s 2,...,s t }, atunci Pred(s i ):=s, pentru fiecare i=1,2,,t sau mai simplu, ceeea ce este suficient pentru a reconstitui calea inversă. 5/17

Algoritmul general de tip Branch_and_Bound este următorul: Metoda Branch_and_Bound Algoritmul Branch_and_Bound Este : Date sp,f; { Citeşte starea iniţialăşi starile finale } Sa:={sp}; { starea iniţială sp este prima stare activă } Repetă ă sc:=aleg(sa); { starea curentă realizează min d1+d2 } Dacă sc F Atunci { starea curentă este stare finală?} Sa:=Sa\{sc}; { starea eleasă devie pasivă } St:=T(sc); { ramifică starea curentă (caută noi stări) } Pentru s St Execută s.pred:=sc ; { reţine calea de întoarcere } Sa:=Sa St Până_Când Sa= sau sc F; { Nu există soluţie sau am găsit o stare finală } Dacă sc F Atunci sk:=sc; Tipăreşte sk; { parcurge calea inversă } Repetă sk:= :=Pred(sk); Tipăreşte sk {de la starea fianlă la starea iniţială} Până_Când sk=sp Altfel Tipăreşte "Problema nu are soluţie" Sf_Algoritm. 6/17

Metoda Branch_and_Bound Pentru rezolvarea unei probleme de tip Branch_and_Bound, vom utiliza o listă înlănţuită ordonată crescător după suma distanţelor d 1 şi d 2 care va conţine toate toate stările generate (plecând de la starea iniţială), atât cele active (care urmează să fie alese) cât şi celepasive (care au fost deja alese, păstrate pentru a da rezultatul), diferenţiereaţ acestora fâcându-se prin câmpul numit Tip {Activă, Pasivă}. } În acest mod, alegerea se va efectua simplu, deoarece starea aleasă va fi prima stare activă din listă. Adăugarea în listă se va efectua în aşa fel încât lista să rămână ordonată. Elementele listei vor conţine pe lângă câmpul ce caracterizează ostare s S (configuraţia) şi cheia de ordonare egală cu d 1 (s)+d 2 (s). De asemenea, pentru a determina cât mai rapid distanţa d1 a unei stări faţă de starea iniţială, sevareţine şi această distanţă pentru fiecare stare (element al listei), deci d 1 (s):=d 1 (Sc)+1. Pentru a putea reconstitui i calea parcursăă de la starea iiţi iniţială până ă la starea finală, vom reţine şi adresastării din care s-a produs transformarea stării curente (Pred). Elementele listei înlânţuite (prin Leg) vor avea structura următoare: Cheie Informaţiile stării Adr. urm. Element d1+d2 Configuraţia d1 Pred Dacă ostareactivă este aleasă ca stare curentă, eadevinepasivă pentru a nu va maifialeasă. Mai precizăm că este de preferat ca o stare nouă să nu o adăugăm în listă dacă ea are acceaşi configuraţie cu o altă staredejaexistentă (activă sau pasivă). Tip Leg. 7/17

Exemple: Metoda Branch_and_Bound a) Problema Canibalilor Pe malul unui râu se află 2n băştinaşi dintre care n sunt canibali. Aceştia doresc să traverseze un râu utilizând o barcă, care poate transporta cel mult k oameni şi nu poate circula singură. Dacă pe unmalsauînbarcă vor fi mai mulţi canibali, atunci aceştia îi vor mânca pe ceilalţi. Cum reuşesc să treacă toţi pe malul opus? Configuraţia unei stări este (c,b,p), unde c şi breprezintă numărul canibalilor respectiv al băştinaşilor necanibali (de pe primul mal), iar p este poziţia bărcii (malulpecareseaflă). Configuraţia iniţială este (n,n,1) iar cea finală este (0,0,2). La p se poate renunţa deoarece p = d 1 Mod 2 + 1! Distanţa d 1 (a unei stări faţă de starea iniţială) reprezintă numărul de traversări cu barca. Distanţaţ d 2 (a unei stări faţăţ de soluţie) ţ este: d 2 2( (c,b)=c+b, reprezentând numărul de persoane care mai trebuie transportate (care nu sunt la locul lor!). Se observă că d 2 (sf)=0. Transformarea T (a unei stări sc=(c,b,d (,, 1 1)) este corectă prin transportul (i,j) {0,,n} 2 pentru care ((i+j) {1,,k}) şi ((i j) sau (j=0)), dacă (c'=c±i,b'=b±j) {0,,n} 2 şi ((c' b') sau (b'=0)) şi ((c' b') sau (b'= n)). 8/17

Metoda Branch_and_Bound b) Problema Ţăranului Pemalulaltuirâuseaflă un ţăran cu un lup, o capră, ovarzăşiobarcă. Cum reuşeşte ţăranul să transporte cu barca cele trei cadouri ştiind că nu poate pune în barcă decât unul sigur iar capra nesupravegheată poate fi atacată de lup sau poate să mănânce varza? Configuraţia unei stări este (l,c,v,ţ), unde l,c şi v malul pe careseaflă, iar ţ este (malul pe care se află ţăranul şi barca). Configuraţia iniţială este (1,1,1,1) iar cea finală este (2,2,2,2). 2 2 2) La ţ se poate renunţa deoarece ţ = d 1 Mod 2 + 1! Distanţa d 1 reprezintă numărul de traversări cu barca. Distanţa d 2 este: d 2 (l,c,v) =6-l-c-v, reprezentând numărul de cadouri care mai 2 2 trebuie transportate (sunt pe primul mal). Observăm că d 2 (s f )=0. Transformarea unei stări s c =(l,c,v,d 1 )estecorectă prin transportul unui cadou dacă acela se află pe malul curent iar capra este supravegheată sau rămâne singură. 9/17

Metoda Branch_and_Bound c) Perspico Fiind dată o configuraţie a tablei de perspico, se cere să se aşeze piesele într-o poziţie ţ indicată! Configuraţia unei stări este matricea de 4x4 cu numere de la 0 la 15 (0=spaţiu). Distanţaţ d 1 reprezintă numărul de mutări efectuate. Distanţa d 2 = numărul de piese care nu sunt la locul lor. Transformarea unei stări în alte 4 stări (cel mult) se poate face prin ocuparea spaţiului liber (0)decătre o piesă vecină (având 2, 3 sau 4 posibilităţi). 11 12 13 14 1 2 3 4 15 6 7 8 9 0 1 2 3 4 5 10? 5 6 7 8 9 10 11 12 13 14 15 0 10/17

Teme: 1. Să se rezolve problema corespunzătoare jocului alăturat (configuraţia iniţială fiind cea din partea stângă iar cea finală cea din dreapta), prin mutări similare jocului anterior (perspico). Piesa mare trebuie adusă jos prin translaţiile pieselor.... Sem_13 / 6.01.2014 2. Fiind date două cercuri cu câte n bile (din care cele două din intersecţie sunt comune), se cere să se aducă bilele albastre pe cercul albastru, prin operaţii de rotire (vezi figura de mai jos pentru n=10) a celor două cercuri. 3. Cum trec două şiruri de câte n capre un pod fără să se ocolească, dacă vin din direcţii opuse şinusepoate sări decât peste o capră adversă? _ 11/17

3. Cum trec două şiruri de câte n capre un pod fără să se ocolească, dacă vin din direcţii opuse şi nu se poate sări decât peste o capră adversă? # Metoda Branch_and_Bound : class Stare: def init (self,config,d1=0,pred= self,config,d1=0,pred=-1,tip=true): 1,tip=True): # Tip: Activa/Pasiva self.config=config self.d1=d1 self.pred=pred self.tip=tip def lt lt ( (self,other): return self.d1+self.d2()<other.d1+other.d2() def eq eq ( (self,other): return self.config== ==other.config def ne (self,other self,other): return not self==other 12/17

def d2(self): f='<<< _ >>>'; k=0 for i in range(len(f)): if f[i]!= ]!=self.config[i]: k+=1 return k def Finala(self): return self.d2()==0 def Pasiva(self): self.tip=false def Activa(self): return self.tip def Exista(self,Sa self,sa): for s in Sa: if s.config== ==self.config: return True return False 13/17

def T(self,p,Sa): In=['> _ ',' _ <','>< _ ',' _ ><'] Fi=['_>','<_','_<>','<>_'] for i in range(len(in)): k=self.config.find(in[ (In[i]) if k>=0: s=stare(self.config[:k]+ [:k]+fi[i]+self.config[k+len(in[i]):],self.d1+1,p,true) if not s.exista(sa): Sa+=[s] def str (self): return self.config 14/17

def Aleg(Sa): p=0 while not Sa[p].Activa(): p+=1; for i in range(1,len(sa)): ( if Sa[i]. ].Activa() and Sa[i]<Sa[p]: p=i; return p def Print(s): print s,s.d1 def Len(S): k=0 for s in S: if sactiva(): s.activa(): k+=1 return k 15/17

print '*Start*' sp=stare('>>> >>>_<<< <<<') # Date sp,f; { starea initiala si finale ('<<<_>>>') } Sa=[sp] # Sa:={sp}; { starea initiala sp este prima stare activa } while Len(Sa)>0: # Repeta p=aleg(sa); sc=sa[p] # sc:=aleg Aleg(Sa); { starea curenta realizeaza min d1+d2 } if sc.finala(): # Daca sc not in F Atunci { starea curenta este stare finala?} break # sc.pasiva() # Sa:=Sa\{sc}; { starea eleasa devie pasiva } sc.t(p,sa) # St:=T(sc); { ramifica starea curenta (cauta noi stari) } # Pana_Cand Sa={} sau sc in F; { Nu are sol. sau este stare finala } if sc.finala(): # Daca sc in F Atunci sk=sc; Sol=[sk] # sk:=sc; while sk!=sp: # Repeta sk=sa[ =Sa[sk.Pred] # sk:= :=Pred Pred(sk sk); Sol=[sk]+Sol # Pana_Cand sk=sp {de la starea fianla la starea initiala} for s in Sol: Print(s) else: # Altfel print "Imposib." # Tipareste "Problema nu are solutie!" 16/17

*Start* >>>_<<< 0 >>_><<< ><<< 1 >><>_<< 2 >><><_< 3 >><_<>< <>< 4 >_<><>< 5 _><><>< 6 <>_><>< 7 <><>_>< 8 <><><>_ 9 <><><_> 10 <><_<>> 11 <_<><>> 12 <<_><>> 13 <<<>_>> >> 14 <<<_>>> 15 17/17