I.ELEMENTEDINTEORIAJOCURILORNON-COOPERATISTE…5 [622696]
2Cuprins:
Introducere……………………………………………………………………………………………………………………………3
I.ELEMENTEDINTEORIAJOCURILORNON-COOPERATISTE………………………………………..5
1.1.Elementedinteoriajocurilorstatice……………………………………………………………………………5
1.2.Elementedinteoriajocurilordinamice……………………………………………………………………….7
II.ELEMENTEDINTEORIAJOCURILORDINAMICEININFORMAȚIEINCOMPLETĂ…….13
2.1.Jocuriininformatieincompleta…………………………………………………………………………………13
2.2JocuriBayesiene…………………………………………………………………………………………………….15
III.UTILIZAREACLUSTERULUIUSMLADETERMINAREASOLUȚIILORJOCURILOR
BAYESIENEDINAMICE……………………………………………………………………………………………………24
3.1.ElementedebazadinprogramareMPI(MessagePassingInterface)……………………………….24
3.2.Algoritmulinducțieirecursive(backwardinduction)……………………………………………………38
Concluziișirecomandări:……………………………………………………………………………………………………..50
Bibliografie:………………………………………………………………………………………………………………………..51
Anexă…………………………………………………………………………………………………………………………………52
3Introducere
Înlumeaafacerilordeazicompetițiajoacăunrolfoarteimportant.Strategiileadoptate
deindivizisauorganizațiipotafectaprofundcursulșirezultatulpropriilornoastredecizii.
Înlumeaafacerilordeazinupotfiluatedeciziifărăconsiderarearăspunsuluicelorlalte
firmedepepiață.Teoriajoculuioferăoposibilitatedeanalizăaimpactuluideciziilor
celorlalțiasuprapropriilordeciziișirezultateleaferente.
UnJocesteunconcurscareimplicăparticipareaadoisaumaimulțiparticipanți,numiți
jucători,fiecaredintreeidorindsăcâștige.Teoriajoculuinearatăcumsăalegemstrategii
optimeîntr-unconflict.PioneriiacesteiteoriipotficonsiderațiJohnvonNeumannși
OscarMorgensternprinlucrarea”Theoryofgamesandeconomicbehavior”.Inițialteoria
joculuiafostutilizatăînplanificareastrategiilorînceldealdoilearăzboimondial.De
atunciTeoriaJoculuiafostfolosităînnumeroasesituațiiimplicândnegocierilesindicale,
deafacerisaudealtănatură..
TeoriiJoculuisepoateaplicaaproapeoricăruifenomensocial.Astfelîncâtseașteptădela
aceastăștiințarezolvareatuturorsituațiilorîncareoameniirealizeazăcărezultatulacțiunilor
lordepindenunumaideacestea,darșideacțiunilecelorlalțiparticipanțilaaceainteracțiune.
Deșinuasatisfăcuttoateacesteașteptări,teoriajocurilorși-agăsitnumeroaseaplicațiimai
alesîndomeniuleconomiei.Pentruaînțelegeunjocoarecareestenecesarămaiîntâi
cunoaștereareguliloracestuia,deoareceastfelsepoateaflacareacțiunisuntpermise(posibile)
launanumitmoment.Apoiestenecesarasecunoaștecumalegjucătoriioacțiunedin
mulțimeaacțiunilorposibile.
Încontinuarevomamintioclasificareajocurilorînraportcudiversecriterii:
a.înraportcumodulîncarecomunicajucătoriîntreeiavem:
jocuricooperative,suntacelejocuriîncarejucătoriicomunicăliberîntreeiînainte
deluareadeciziilorșipotfacepromisiuniînaintedealegereastrategiilor;
jocurinecooperative,suntjocurileîncarejucătoriinucomunicăîntreeiînaintede
luareadeciziilor.
b.înraportcudesfășurareaîntimpajocurilor:
jocuristatice,esteaceljocîncaredeciziilejucătorilorseiausimultan,dupăcare
joculiasfârșit;
jocuridinamice,esteaceljocîncaredeciziilejucătorilorsuntsecvențiale,adică
evolueazăîntimp.
c.înraportcunaturainformației:
jocuriîninformațiecompletă,esteaceljocîncaretoțijucătoricunoscnumărul
4celorlalțijucători,strategiilefiecăruia,funcțiiledecâștigalefiecăruia,precumșiregulile
jocului;
jocuriîninformațieincompletă,estejoculîncarecelpuținunuldintrejucătorinu
cunoașteunasaumaimultefuncțiidecâștigalecelorlalțijucători,restulelementelor
(numărulcelorlalțijucători,strategiilefiecăruiașiregulilejocului)fiindcunoscute.
d.încazuljocurilordinamice,înraportcutipulinformației:
jocuriîninformațieperfectă,estejoculdinamicîncarefiecaredintrejucători
cunoașteregulile,număruljucătorilor,strategiileacestora,precumșievoluțiaîntimpa
jocului(istoriajocului);
jocuriîninformațieimperfectă,estejoculdinamicîncaremăcarunuldintre
jucătorinucunoașteistoriajocului,cunoscândcelelalteelemente.
e.înraportcustructuracâștigurilor:
jocuridesumănulă,esteaceljocîncaresumacâștigurilorestezero;
jocuridesumănenulă,estejoculîncaresumacâștigurilorestediferitadezero.
f.înraportcunumăruldejucători:
jocuricudoijucători;
jocurimultipersoană;
jocuricontranaturii.
5I.ELEMENTEDINTEORIAJOCURILORNON-COOPERATISTE
1.1.Elementedinteoriajocurilorstatice
Descriereaoricăruijocconținespecificareaurmătoarelorcomponentealejocului:
1.determinarea(descrierea,enumerarea)participanțilorlaprocesuldecizional;
2.determinareamulțimilordeparametricaresuntgestionațidecătrefiecare
participantlaprocesuldecizional;
3.determinareaacelorreguli,cuajutorulcărorasevaface(decătrefiecare
participant)alegereaparametrilordinpunctul2.
4.determinareaacelorcriterii,cuajutorulcărorasevaestimaeficacitateaparametrilor
determinațiconformpunctului3,adicădeterminareaprincipiilordeoptimalitatepentrufiecare
participantdeterminatînpunctul1.
Defini¸tia1.1.1Prinjocnoncooperatistvomsubințelegeurmatorulcortej
IiiIiiHXI,, (1.1.1)
undeIesteomul¸timefinit˘a,elementelec˘arorasevornumijuc˘atori(nI,…,2,1).iX,Ii-
mul¸timiarbitrarecarenuseintersecteaz˘adou˘acˆatedou˘a,elementelec˘arorasevornumistrategii(le
vomnotaix).S¸iruldevaloriIiix,adic˘aelementedinprodusulcartezian
IiiXX (1.1.2)
sevanumistarea(situa¸tia,rezultatul)jocului.Func¸tiam˘arginit˘a
RXHi: (sau RXH
Iii i
: ) (1.1.3)
sevanumifunc¸tie-scop(decˆa¸stig)ajuc˘atoruluii,valoarea ),…,(1n ixxH sevanumicˆa¸stigul
juc˘atoruluiipentrustarea{x1,…,xn}.
Defini¸tiajocurilordetipul(1.1.1)sevanumi”defini¸tieˆınform˘anormal˘aajocurilor”.Pentru
definirea”real˘a”ajoculuitrebuies˘adetermin˘am(s˘afix˘am)modulˆıncarefiecarejuc˘atoralege
strategiaxi(descriereapunctului3¸siscopulfiec˘aruijuc˘ator(adic˘adeterminareaprincipiuluide
optimalitatealjuc˘atorilor).
Defini¸tia1.1.2Srategiaesteofunc¸tiepemul¸timeaparametrilorgestiona¸tidejuc˘atori,formac˘areia
depindedeniveluldeinformareajuc˘atorilor.Deexemplu,strategiajuc˘atoruluiipoatefi
6urm˘atoareaaplica¸tie
i
xnj ii Xxxxxx
i~),…,,….,(~
1
(1.1.4)
unde
ix-uncortejdevalorimxx,…,1ˆıncarenusecon¸tinevaloareaxi,X-mul¸timeatuturor
aplica¸tiilor:iiXX,unden j i XXXX ……1 ,ij(adic˘aˆınacestproduscarteziannu
figureaz˘aXi).Deexemplu:.1 2 211 …:),…,(~XXXxxxxn n .
Astfel,vomconsiderajoculˆınform˘anormal˘a(1.1.1)¸sivompresupunec˘a:
a)Juc˘atoriiac¸tioneaz˘aizolat,adic˘afiecarejuc˘atorˆı¸sialegestrategiaindependent,f˘ar˘aa¸tine
contdestrategiilecelorlal¸tijuc˘atori.
b)Nuarelocniciunschimbdeinforma¸tiiˆıntrejuc˘atori.Adic˘a,strategiilexiale
juc˘atoruluiinupotfifunc¸tiidealegerileconcretealestrategiilorjalecelorlal¸tijuc˘atori.
c)Vompresupunec˘afiecarejuc˘atoriˆı¸sicunoa¸steXi¸siHi¸sic˘aelpoates˘anudispun˘ade
informa¸tiadespreXj¸siHj,ji.
Acesteasuntprincipalele”componente”alejoculuinoncooperatist.
Clasedejocurinoncooperatiste:
Defini¸tia1.1.3(Ceamaisimpl˘aclas˘adejocurinoncooperatiste).Joculnoncooperatist(1.1.1)se
nume¸stefinitdac˘asuntfinitemul¸timileXi,pentrui1,…,n.Joculnoncooperatistfinitsenume¸ste
bimatricealdac˘amul¸timeaIconst˘anumaidindoijuc˘atori,adic˘a2,1I.
Defini¸tia1.1.4Joculnoncooperatist(1.1.1)senume¸stejoccusum˘aconstant˘a(fix˘a),dac˘apentru
oricesitua¸tie(stare) XxxIii}{vomobține:
cxH
Iii
)( (1.1.5)
Dac˘a0c,atuncijoculdindefini¸tia1.1.4senume¸stejoccusum˘anul˘a.Joculnoncooperatistcu
sum˘anul˘aˆıncareparticip˘anumaidoijuc˘atori,adic˘a2,1I senume¸stejocantagonist.Astfel,
ˆınoricejocantagonistcˆa¸stigulunuiadintrejuc˘atoriestenumericegalcupierdereaceluilalt:
),(),(212 211 xxHxxH .Dinacesteconsiderente,ˆınjocurileantagonisteseutilizeaz˘aosingur˘a
func¸tie-scop, ),(21xxH ,caresenume¸stefunc¸tiadecˆa¸stigajocului¸sidetermin˘anumeric
cˆa¸stiguljuc˘atorului1¸sipierdereajuc˘atorului2.
Defini¸tia1.1.5Joculantagonistbimatricealsenume¸stejocmatriceal.
Astfel,joculmatricealsedescrieprintr-osingur˘amatriceA-matriceadecˆa¸stiga
jocului.
Remarca1.1.1Nuexist˘auncriteriudeoptimalitatealjuc˘atorilorcares˘aasigure”celmaibun
7rezultat”.Iˆndependen¸t˘aderegulilejocului¸siinforma¸tiaposedat˘asealegeacelprincipiude
optimalitate,careasigur˘a”celmaibunrezultataljocului”.
Fiecarejuc˘ator,cunoscˆandnumaiformanormal˘aajocului,poatedeterminadesinest˘at˘ator
strategiasa(saucˆatevastrategii)¸tinˆandcontdeprincipiiledeoptimalitatemen¸tionate.
Defini¸tia1.1.6Vomspunec˘asitua¸tia(exodul)IiiIiixixxx }{)}(,{ injocul
IiHXIii,,, esteNashdeechilibru(situațieNE)ajocului,dac˘a
)).(,())(,(,, ixxHixyHXyIiii iiii (1.1.6)
Deci,dac˘a ),….,(* *
1*
nxxx estesitua¸tieNE,atuncipentrudeterminareaeitrebuies˘arezolv˘am
sistemuldeecua¸tii:
)).(,(max)(,* *ixxHxHIiiiXxi
ii (1.1.7)
Existen¸tasitua¸tiilordeechilibruˆınjocurilenoncooperatistedenot˘a¸sifaptulc˘aniciunjuc˘ator
ˆınmodunilateralnupoatem˘aricˆa¸stiguls˘auˆınjoc.Pentruamodificavaloareacˆa¸stigului,
trebuies˘a”ie¸sim”dincadrulcondi¸tiilorjocurilornoncooperatiste.
Vomeviden¸tiacˆatevaaspectenegativealesitua¸tiilorNE:
a)nuˆıntotdeaunaeleexist˘a,decipoatefiNE(Γ)=∅;
b)ˆıncazulcˆandsitua¸tiaNEnuesteunic˘a,nuexist˘aargument˘arilogicepentruaalege
unadintreele;
c)potexistaastfeldesitua¸tiiˆınjocul iiHXI,, ˆıncarevalorilecˆa¸stigurilor
pentrufiecarejuc˘atorsuntmaimaridecˆatˆınsitua¸tiaNE.
Punctula)poatefisolu¸tionatpozitivprinintroducereastrategiilormixte.
Teorema1.1.1(Nash)(CondițiilesuficientepentruexistențasituațiilorNE).Dac˘apentrujocurileΓde
tipul IiHXIii,,, severific˘aurm˘atoarelecondiții:
1)PentruoriceIimulțimiledestrategiiposibileiXsuntsubmulțimiconvexeși
compactealeunorspațiitopologicevectoriale.
2)PentruoriceIifunc¸tiileHi(x)suntcontinuepeX¸sipentruorice )()(iXix
func¸tiile)(,ixxHiisuntconcavedup˘aiiXx,atuncimul¸timeaNE(Γ)asitua¸tiilordeechilibru
Nashestenevid˘a¸sicompact˘a.
1.2.Elementedinteoriajocurilordinamice
8Jocuridinamiceˆıninforma¸tiecomplet˘a¸siperfect˘a.
Pentrujocuriledinamicesuntspecificatereguliledinpunctul3,conformcărorajucătoriivor
facepropriilealegeri.Unjocdinamicesteunjocîncarealegerilejucătorilorsuntefectuateîn
diversemomentedetimp.Deregulă,joculdinamicsedesfășoarăîncătevaetape,șijucătorii
potsăfacăcîtevaalegeriîndiferitemomentedetimppeparcursulderulăriijocului,pînăla
indeplinireacondițieideterminareajocului.Jocurileîninformațiecompletăsuntcaracterizate
prinfaptulcăjucătoriiposedăoinformațiecompletădespredescriereajocului,îndeosebi
desprepreferințelejucătorilor,desprefuncțiiledeutilitateșimulțimiledealternative.
Definiția1.2.1Vomnumi”istorieajocului”lamomentul1t(saulaetapa1t)secvențade
decizii(alternative)pecareauluat-ojucătoriiînceletetapeanterioarealejocului.
Definiția1.2.2Vomnumijocsubformăextinsăjoculdinamicîncaresecunosc:
a)mulțimeajucătorilor;
b)mulțimeadealternativealefiecăruijucător;
c)ordineaîncarejucătoriiiaudeciziile(alegalternativele);
d)funcțiiledecaștigalejucătorilor.
Reprezentareagraficăajucătorilorsubformaextinsăsefacesubformaunuigrafdetiparbore.
Înacestgrafvomaveaurmătoareleelemente:
nodurilegrafuluisuntmomentelelacarejucătoriialegostrategieposibilă;
arcelegrafuluireprezintăacțiunilealesealejucătorilor;
nodulinițialreprezintămomentuldeînceputaljocului;
nodurilefinaleindicăsfârșituljoculuișiîndreptullorsuntspecificatecâștigurile
jucătorilor.
Deexemplu,reprezentândsubformăextinsă”joculgrenadei”,ceconstăîn:
unindividcareareînmânăogrenadăîispuneunuialtindivid:dacănu-midai1milionde$,
voidetonagrenadașivommuriîmpreună”.Înacestecondițiicelălaltjucătorpoate,fiesă-i
deabanii,fiesănu-idea,riscândcacelălăltsădetonezegrenada.Înacestjocvedemcăexistă
treimomenteîncaresefacalegerilejucătorilor,șianume:amenințareaprimuluijucător,apoi
deciziaceluide-aldoileade”adabanii”saude”anudabanii”și,însfârșit,deciziaceluicu
grenada:de”aodetona”sau”anuodetona”obținemurmătorularbore:
9
Fig.1.2.1
Aicialegerile(alternativele)jucătorilorauurmătoareasemnificație:”P”semnificăfaptulcă
jucătorul2plătește,”NP”semnificăfaptulcăjucătorul2nuplătește,”D”semnificăfaptulcă
jucătorul1detoneazăgrenada,”ND”semnificăfaptulcăjucătorul1nudetoneazăgrenada.
Remarca!Vompresupunecăgrafulcedescrieformaextinsăajoculuinuconținecicluriși
dubleprecedențe;cualtecuvinte,sepoatedefiniorelațiedeordineparțialăpeacest
graf:”yx”,careînseamnă”nodulxesteînainteanoduluiy”.
Suntcazuriîncarestrategiileformeiextinsealeunuijocdinamicpotsăcreezeanumiteconfuzii.
Exemplul1.2.1ÎnjoculprezentatînFigura1.2.2pentrujucătorul1poateapăreaconfuzieîntre
alegerilesaleînanumitenodurișistrategiilelui.
Fig.1.2.2.Joccustrategiinerealizabile.
Rezolvare.Strategiaesteocombinațiedealegerialeunuijucător,careconduclarezultatul
final(într-unnodfinal).Spreexemplu,pentrujucătorul2strategiilevorcorespundealegerilor
{l,r}dincauzacăexisăunsingurnodîncarejucătorul2facealegerea.Pentrujucătorul1însă
mulțimeadestrategiinucoincidecuceaaalegerilor(alternativelor)sale.Mulțimeadealegeri
(alternative)pentrujucătorul1este{L,R,L`,R`},iarmuțimeadestrategiialesaleeste{L,LL`,
LR`,RL`,RR`},adicăacelecombinațiidealegeri(alternative)alesalecareconduclaunnod
final.Aicitrebuiederemarcatfaptulcădouădintrestrategiilesalenusuntrealizabilepentru
niciuncaz;acestestrategiisuntLL`șiLR`.AceastaseîntâmplădincauzacăalegereaLnu
10conducelacreareacondițiilordeaajungeînaltnodpentrujucătorul1,adicăînnodulîncare
jucătorul1săfacăunadintrealegerileL`,R`.
UnsetdestrategiiAaa, senumeștesituație.PentrufiecareXx,pentrusituația
datăµpoatefideterminatăprobabilitateap(x|µ)detrecereînpozițiax.Înacestcaz
probabilitateap(x0|µ)=1semnificăfaptulcăjocultottimpulîncepedinpozițiax0.
Încazgeneralprobabilitateadeanimeriînpozițiax,careestenemijlociturmătoareadupă
poziția ,,)(),( AaXxxa ,sedeterminădupăformula:
)),(|()|)(()|( xxpxpxp unde:
.//,0,))((/,1)),(|(
contrarcazinxx dacăxxpa
Dacăînsă0)(Xx ,adicăestepoziția”întâmplării”,atunci)(| ),(| xxpxxp este
datădecondițiilejocului.PentrufiecarejucătorAaestedeterminatăvaloareamediea
câștiguluixuxpxuEua a a | |)( ,pentruoricesituațieµ.
Definiția1.2.3Vomnumijocîninformațieperfectăaceljocîncaretoțijucătoriiștiula
oricemomenttcedeciziis-auluatlaetapaanterioară(lamomentult−1).
Pentrujocuriledinamiceîninformațiecompletășiperfectătoțijucătoriicunoscistoriajocului.
Astfel,fraza”informațieperfectă”reflectăfaptulcăjucătoriicunoscceacțiuni(alternative)au
fostalesedecătretoțiparteneriilaetapeleprecedenteetapeidealegere.
Definiția1.2.4Vomnumijoccumemorieperfectă(perfectrecall)aceljocîncaretoțijucătorii
știuistoriajoculuidelamomentul0panălamomentult.
Multesituațiiconflictualerealeauuncaracterdedurată.Participanțiilaacesteconflicte
acționeazăfrecventținandcontdeinformațiadespreevaluareaanterioarăaconflictului.Pentru
modelelecorespunzătoare,dincauzanumăruluimaredestrategiiposibile,teoremelecomune
despreexistențasoluțieipentrujocurileînformănormalănunepermitsăgăsim
comportamentuloptimal,saucelpuținsă-lconcretizăm.
Pentrusoluționareajocurilordinamicecuunnumărfinitdejucători,deseoriestecomodde
utilizatprezentareapoziționalăajocului.Ceamaisimplăclasădejocuripoziționaleo
reprezintăclasajocurilorpoziționalecuunnumărfinitdepașiîninformațiecompletă.Întrun
astfeldejoc,lafiecarepasaljoculuidoarunsingurjucătorvafacemișcarea,avandinformația
completădesprestareacurentă,despretoateacțiunileîntreprinse,precum¸sidesprestructura
generalăajocului.Aceastăpresupuneredeobiceiesteconsideratăinformațiecompletă.
Exemplebinecunoscutepentruastfeldejocurireprezintăjoculdedameșijoculdeșah.Mai
11josvafiprezentatăgeneralizareaacesteimetodedesoluționarepentruoricejocîninformație
completă.
Definiția1.2.5Formapoziționalăaunuijocdinamicîninformațiecompletășiperfectă
senumeșteurmătorulcortej:
,)(,0)|(, \;,),(),,(,1, ,0 0xxxxXxXXTXAaTxxuXAG
Aaa a
unde:
1.Aestemulțimeadejucători;
2.(X,σ)esteunarborefinitcuvarfulinițialx0șimulțimeavarfurilorfinaleT;
3.R={Xa,aA,X0}estedivizareamulțimiiX\Tînsubmulțimicarenuseintersecteazădouă
catedouă;
4.Xaestemulțimeapozițiilor(varfurilor),încarejucătorulAafacemișcarea,Xase
numește”mulțimeapozițiilorproprii”alejucătoruluia;
5.X0este”mulțimeapozițiilor”,încaremișcareavafiefectuatădejucătorul”Natura”,care
reprezintăfactorulaleator;
6.1:ETuaestefuncțiadecaștigajucătoruluia,E1estemulțimeanumerelorreale;
7.pentrufiecare0Xxsuntcunoscuteprobabilitățile0|'xxpdetreceredinpozițiaxîn
poziția )(1'xxși 1)|(
)(,
1,
xxp
xx.
Definiția1.2.6 AauAGaa ,,,)( senumeșteformanormalăajoculuipoziționalG.
Astfel,jocuriledinamicepotfireprezentatesubformănormală,prinintermediulformei
matriceale,adicăsereprezintăcajocmatricealîninformațiecompletă(jucătoriicunosc
mulțimiledestrategiișimatriceacâștigurilor)șiimperfectă(jucătoriinucunoscalegerile
partenerilor).Cumammenționatmaisus,jocuriledinamicepotfireprezentatesubformă
normală,prinintermediulformeimatriceale,dacăsevaconstruiunplancompletdeacțiuneîn
raportcustrategiilecarepotfijucatedecătreceilalțijucători.Acestplanesteconstruitex-ante,
adicăînaintedeînceputuljocului.
Exemplul1.2.2Seconsiderăurmătoruljocdescrissubformaextinsă:
12
Fig.1.2.3
Porninddelaformaextinsăvomconstruiformanormalăechivalentă:
Aceastaformănormalăseconstruieștecaunplancompletdeacțiuneposibilînraportcu
alegerilejucătorilor.(Deexemplu,dacăjucătorul1alegestrategiastânga(S),atuncijucătorul2
poatealegeS’sauD’,darneștiindceaalesjucătorul1,segândeștela4variantedecâștig
posibile,înraportcucearfipututjucaprimuljucător).Pentruaceastăformăputemdetermina
echilibrulprinalgoritmiidescrișiîncapitolulanterior.Astfel,joculdescrisareununicechilibru
înstrategiipure,șianume(D,D’).Acelașiechilibrurezultășiîncazulîncareaplicăm
algoritmulinducțieirecursive,desprecarevoivorbiincapitolul3.
13II.ELEMENTEDINTEORIAJOCURILORDINAMICEININFORMAȚIE
INCOMPLETĂ
2.1.Jocuriininformatieincompleta
Jocurileˆıninforma¸tieincomplet˘asuntcaracterizateprinfaptulc˘ajuc˘atoriinuposed˘ao
informa¸tiecomplet˘adespredescriereajocului,ˆındeosebidesprepreferin¸telejuc˘atorilor.
Maiexact,juc˘atoriinucunoscexactcumseformeaz˘acˆa¸stigul.Informațiaincompletă
semnificăcăjucătoriinuîșicunosccuexactitatefuncțiilesaledeutilitatesaumulțimilede
alternativeadmisibile.Acestejocurisemainumescbayesienedeoarecejucătoriiîșifac
presupuneridesprestructurafuncțiilorsaledeutilitateînbazaunorprobabilități
condiționatecaresedeterminăfolosindformulaBayes.
Vomanalizaurmătorulexemplu.
Exemplul2.1.1Într-unregataapărutundragoncaredevasteazălocalitățile.Regelea
promisunuiCavalercăîivadaojumătatedinregatdacăvaucidedragonul.Primultrebuiesă
decidăCavalerul.Dacăeldecidesăluptecudragonul,cusiguranțăvaînvinge.Dupăce
dragonulesteînvins,regeledecidedacăvadasaunujumătateadinregat.Aceastăformulare
corespundecazuluiinformațieicomplete.PresupunemcăCavalerulștiecăregiiîngeneralpot
fidedouătiputi:Oneștișineonești.Regelecinstitîșivaonorapromisiuneașivadajumătatea
deregat,dacăCavalerulvaînvinge.Cavaleruliadeciziaînlipsainformațieicompletedespre
faptulcăregeleestecinstitsaunu.Săsemodelezeaceastăsituațiefolosindjocuriledinamice.
Rezolvare.FormaextinsăajoculuiestedescrisăînFigura2.1.1
Fig.2.1.1
Înacestjoccâștigulregeluiestedeterminatdetipulsău(onest,neonest)șivafinotatprinx,
undex=0dacăregeleesteonestșix=2dacăregeleesteneonest.Similarjocurilorstaticeîn
informațieincompletă(jocurilorbayesiene),vompresupunecăCavalerulvaîntâlniunrege
onestcuprobabilitateap.Dacăaducemacestjoclaunjoc”bayesianstatic”,atuncivomobține
omatriceprezentatăîntabelulceurmează,undel→luptă,nl→nuluptă,pl→plătește,npl
→nuplătește.
14
Pentruaconstruiformanormalăajocului,trebuiesădeterminămvaloareamedieacâștigului
Cavaleruluiîndependențădestrategiaregeluicaredepindedetipulregelui.Dacăregiide
ambeletipuriplătesc,atuncivaloareamedieacâștiguluiCavaleruluieste1,iardacănuplătesc,
este−1.Dacăregeleonestplăteșteșicelneonestnuplătește,atuncivaloareamedieacâștigului
este )12()1(1 ppp .Similar,dacăregeleonestnuplăteșteșicelneonestplătește,atunci
valoareamedieacâștiguluieste pp p 211)1()1( .Înmomentulcândsefixează
valoareaprobabilitățiiavemdejaunjocîninformațiecompletăpentrucarestrategiile
jucătorilorsunt:pentruluptător:{l,nl};pentrurege{pl−pl,pl−npl,npl−pl,npl−npl}.
Formanormalăajoculuipentrup=0.75esteprezentatăîntabeluldemaijos,undeprimacifră
indicăcâștigulCavaleruluișiînparantezeseindicăcâștigulregeluipentrutipulonestșineonest.
ObservămcăînacestjocexistătreisituațiiNashdeechilibru:NE={[l,pl−npl],[nl,npl−pl],
[nl,npl−npl]}.Echilibrul[l,pl−npl]estefiresc:regeleonestplătește,celneonestnuplătește.
Următoareledouăsituațiideechilibrunusuntfirești.Excludereaacestorsituațiideechilibruse
facecașiîncazuljocurilorîninformațieperfectă,șianume:seanalizeazănudoarjoculintegral,
darșisubjocurileproprii.Formelenormalealesubjocurilorsunt:
ObservămcăînambeleacestesubjocuriechilibrulNashestesituația[l,pl−npl],decieaeste
15echilibruperfectșicelelaltesituațiipotfiomise.Dj.Harsanyiapropuscajocurileîninformație
incompletăsăfieinterpretatecajocuridinamicedejaîninformațiecompletășiimperfectădacă
sevaintroduceunnoujucătorNatura,careprimulfaceînmodaleatormișcarea.Faptulcă
jucătorulnucunoaștetipulcelorlalțijucători(înexempluldemaisusCavalerulnucunoaștedacă
regeleesteonestsauneonest)sevamanifestaprinfaptulcăel(jucătorul)nucunoaștecemișcare
afăcutNatura.Aceastaserealizează,prinintermediulmulțimilorinformaționale.Astfel,studiul
jocurilorîninformațieincompletăpoatefisubstituitprinstudiuljocurilorîninformațiecompletă
șiimperfectă.UtilizândunnoujucătorNatura,carealege(determină)probabilitateatipului
jucătorului(alregelui),joculdinexemplul2.1.1vaaveaformaextinsăprezentatăînFigura2.1.2
Fig.2.1.2
Aceastăreprezentareajoculuipermitedejautilizareaalgoritmuluiinducțieirecursive.
2.2JocuriBayesiene.
Echilibrulbayesianperfect(E.B.P)
PentruadefiniE.B.P.vomaplicaprincipiulHarsanyidesoluționareajocurilorîninformație
imcompletă.Astfel,introducemurmătoareleipoteze.
Ipoteza1.Pentrufiecaremulțimeinformaționalăjucătorulcaremută(joacă)trebuiesăaibă
anumitepresupuneridespreceeaces-ajucatpanăatunci.Pentruomulțimeinformaționalăce
nuesteunică,opresupunerevafiodistribuțiedeprobabilitateasupranodurilordinmulțimea
informațională(pentruomulțimeinformaționalădatăcunodunic,presupunerilejucătorului
voraveaprobabilitatea1).
Presupunemcătoțijucătoriiaualesstrategiilelor.Cumînbazasituațieicreatedeaceste
strategiisedeterminăsistemuldepreviziuniînmulțimiinformaționale?Vomexplicaacest
lucrupentrucazulstrategiilorpure.Presupunemcăînjocnuexistămișcărialeatoareale
Naturii.Considerămunjucătorșimulțimeainformaționalăîncaremișcareaaparțineacestui
16jucător.Carevorfiașteptărilejucătoruluiînmulțimeainformaționalădată?
ÎncalitatedeexempluvomconsiderajoculdinFigura2.2.1
Fig.2.2.1Determinareasistemuluidepreviziuniînmulțimiinformaționale.
Aceasta-iformaextinsăaunuijocstaticsimplu.Dacăjucătorul2vapresupunecăjucătorul1
vaalegestrategiaR(arculdindreapta),atuncielpoatesăseafleînnoduldindreaptaal
mulțimiisaleinformaționale.Astfel,reieșinddinaceastăpresupunere,strategiaoptimalăse
vaalegedinmulțimeaderăspunsurioptimalelaalegereadecătrejucătorul1astrategieiR
(înbazaacestuiprincipiușiseconstruiescsituațiileNashdeechilibru).Considerămjoculdin
Figura2.2.2
Fig.2.2.2Determinareasistemuluidepreviziuniînmulțimiinformaționale.
Fiejucătorul1utilizeazăstrategia(a:R,b:L,c:L).ÎnacestjocNaturafacemișcareasa
aleatoarealegândprobabilitățile0.3,0.5și0.2.Înacestcazprobabilitateacăsevaatingenodul
xeste0,noduly−0.5șinodulz−0.2.Probabilitateatotalăcăînjocsevaatingeunnoddin
mulțimeainformaționalăajucătorului2este0+0.5+0.2=0.7,carenuesteegalăcu1.Atunci,
pentruadeterminaprobabilitateadeaalegeunnodconcretdinmulțimeainformațională,adică
probabilitateacondiționatădeevenimentuldeaatingemulțimeainformațională,sevautiliza
formulaBayes.Astfel,presupunerilejucătorului2înmulțimeasainformaționalăare)72;75,0(.
17Ipoteza2.Pentrupresupuneriledatestrategiilejucătorilortrebuiesăfiesecvențialraționale
(cualtecuvinte,pentrufiecaremulțimeInformaționalădată,strategiajucătoruluitrebuiesăfie
optimală,înbazapresupunerilorpecareleareînaceastămulțimeinformațională).
Pentrujoculdescrisanterior,Ipoteza1presupunecăpentrufiecaremulțimedeinformații
nesingulară(ex.S,Mpentrujucătorul1),jucătorul2credecă1vajucaScuprobabilitateapși
Mcuprobabilitatea1-p.Datefiindacestepresupuneri,câștigurileașteptatedecatrejucatorul2,
dacăvajucaD′vorfi: pppDEu 1)1(10)'(2 ,iardacăvajucaS',vorfi
pppSEu 2)1(21)'(2 .Deoareace )()('
2'
2DEuSEu,pentruorice 10p,
rezultăcăjucătorul2nuvajucaniciodatăstrategiaD’.Ipoteza2vaeliminaposibilitateaca
jucătorul2săjoace(dinconsiderentederaționalitate).Deci,ipotezele1și2consistăînfaptul
căjucătoriifacpresupuneridespremodulîncarejoacăceilalțișidatefiindacestepresupuneri
fiecarejucătoracționeazarațional,adicăalegeacelestrategiicareîimaximizeazăcâștigul.
Definiția2.2.1Pentruunechilibrudatalunuijocînformăextinsă,omulțimeinformațională
este”pecaleadeechilibru”dacăîiesteasociatăoprobabilitatepozitivădeafijucatăși”în
afaracăiideechilibru”dacăestesigurcănuvafijucată(0p)decătrejucători
(aici”echilibrul”poatefioricaredinceledefiniteanterior).
Ipoteza3.Pentruomulțimeinformaționalăpecaleadeechilibru,presupunerilesunt
determinateprinregulaBayesșistrategiiledeechilibrualejucătorilor.
Deci,noțiuneadeechilibruBayesianperfectnuvaincludedoarstrategiilejucătorilor,ciși
presupunerilepecarelefacdesprestrategiilealesedeceilalți.Înmultecazuri,ipotezele1-3
constituiechiardefinițiaE.B.P.,darnoivommaiimpuneocondițiecevacăutasăelimine
strategiilecenusuntcredibile.VomexplicamaidetaliatIpoteza3.FieBjevenimentulcare
semnificăfaptulcăînjocs-aajunslaunnodj=1,…,m,șiAevenimentulcăînjocs-aajunsla
mulțimeainformațională,maiexact,lanoduljalmulțimiiinformaționale.Atunciprobabilitatea
realizăriievenimentuluijBîncondițiaevenimentuluiAeste
)()()/(APBPABPj
j,unde
)()(1m
kkBPAP .Vomexemplificacelespuse.
Exemplul2.2.1Determinareapresupunerilorjucătorilorînjocuriledinamiceîninformație
incompletă.
Rezolvare.ConsiderămjoculdinFigura2.2.3
18Fig.2.2.3Determin˘asistemuldepreviziuniˆınmul¸timiinformaționale.
Înbazaprobabilitățilorindicate,jucătorul3vaconsideracănodulcserealizează(atinge)în
procesuljoculuicuprobabilitatea0.4·0.5=0.2,iarnoduldcuprobabilitatea0.6.Astfel,în
bazareguliiBayes,jucătorul3trebuiesăpunăîncorespondențănoduluicprobabilitatea
25.06.02.02.0¸șinoduluidprobabilitatea 75.06.02.06.0.Darnuîntotdeaunasepoate
determinapresupunereaînbazaunuișirdeprobabilități.Considerămjoculdinfigura2.2.4.
Fig.2.2.4Imposibilitateadetermin˘ariipresupunerilorˆınbazaunui
¸sirdeprobabilit˘a¸ti.
Aicijucătorul3nupoateconstruipresupuneriînmulțimeasainformațională.Elpoateobțineo
mișcarenumaidacăjucătorii1și2vorfaceoeroare.Pentruechilibrulperfect(S,S`),jucătorul
2¸știecuprobabilitatea1căjucătorul1vajucaS.Înipoteza2ostrategiemixtăvaconducela
faptulcăjucătorul2credecăjucătorul1joacăScuprobabilitateaq1,Mcuprobabiliateaq2șiD
cuprobabiliatatea1−q1−q2.AtunciconformreguliiBayes,
211
qqqp.Deci,noțiuneade
echilibrubayesianperfectnuvaincludedoarstrategiilejucătorilor,cișipresupunerilepecare
lefacdesprestrategiilealesedeceilalți.Înmultecazuri,ipotezele1-3constituiechiardefiniția
E.B.P.,darnoivommaiimpuneocondițiecevacăutasăeliminestrategiilecarenusunt
credibile.
19Ipoteza4.Peomulțimeinformaționalădinafaracăiideechilibru,presupunerilesunt
determinatederegulaBayesșidestrategiiledeechilibrualejucătorilor,dacăesteposibil.
Definiția2.2.2Vomnumiechilibrubayesianperfect(EBP)pentrujocuriledinamiceîn
informațieincompletăomulțimedestrategiișipresupunericesatisfacIpotezele1-4.
Astfel,echilibrulbayesianperfectconstădindouăcomponente:
a)situațiaînjoccareconstădinstrategiilefiecăruijucător,
b)pentrufiecarejucător¸șifiecaremulțimeinformaționalăcareîiaparține,presupunerile
sale(probabilitățiledealegereanodurilordinmulțimeainformaționalădată).
Exemplul2.2.2Seconsiderăjoculdinamicîninformațieincompletădescrissubformă
extinsăînfigura2.2.5
Fig.2.2.5Determinareaechilibruluibayesianperfect.
ObservămcăuniculechilibruNashaljoculuieste(B,C,D′).Aceastăstrategieșipresupunereacă
p=1satisfacipotezele1-3,(deasemeneași4),deoarecenuexistăomulțimedeinformațiiîn
afaracăiideechilibru,deciesteechilibrubayesianperfect.Totuși,fiestrategia(A,C,S′)cup=0,
careesteunehilibruNashdeoareceniciunjucătornuestetentatsădeviezedelaea.Decinueste
suficientsăavemîndeplinitedoaripotezele1-3,deoareceacesteanugaranteazăceseîntâmplă
pentrumulțimiledeinformațiidinafaracăiideechilibru.Vommaiexemplificamodalitățilede
determinareaechilibruluibayesianperfectînjocuriledinamiceîninformațieincompletă.
Exemplul2.2.3ConsiderămjoculdinFigura2.2.6Săsedetermineechilibrulbayesianperfect
20înstrategiipure.
Rezolvare:cna−firma1coopereazăneagresiv,ca−firma1coopereazăargesiv.Presupunerile
jucătorului2înmulțimeasainformaționalăsuntdateprinprobabilitateaβcăsevaaflaînnodul
dinstângaalmulțimiiinformaționale.Înbazaacestorpresupunerilaalegereaalternativeia
valoareaașteptată(medie)acâștiguluivafi 2)2)(1()3( ,șilaalegerea
alternativeinavafi 433)1()1( .
Fig.2.2.6Jocul”Cooperareafirmelor”-determinareaE.B.P
Astfel,înbazapresupunerilorsale,Firma2vaalegealternativaadacă 422 ,adică
dacă.35Deoareceprobabilitateanupoatefistrictmaimareca1,Firma2vaalege
alternativanaindiferentdestrategiapecareovaalegeFirma1.RăspunsuloptimalFirmei1la
faptulcăFirma2vaalegena(nuvafiagresivă),vafialegereaalternativeicadeoareceînacest
cazcâștigulsăuestemaxim(3>−2și3>0).PentruaceastăstrategieaFirmei1,Firma2va
aveacertitudineacăsevaaflaînnoduldindreaptaalmulțimiiinformaționale,adicî0.
Astfel,amdeterminatechilibrulbayesianperfect:situația(ca,na)șipresupunereadeterminată
deprobabilitatea0.
Exemplul2.2.4Unstudentpoatesăsepregăteascăcătreexamensaunu.Examenulconstăîn
rezolvareauneiprobleme.Probabilitateadearezolvaproblemapentruunstudentpregătitde
exameneste0.9,pentruelnepregătit0.1.Dacăstudentuls-apregătitdeexamenșiarezolvat
problema,atuncivacâștiga1unitatecomvențională(u.c.),iarprofesorul2u.c.Dacăstudentul
s-apregătitdeexamenînsănuarezolvatproblema,atuncivacâștiga−1u.c.,iarprofesorul
−1u.c.Dacăstudentulnus-apregătitdeexamenșiarezolvatproblema,atuncivacâștiga2
u.c.,iarprofesorul0u.c.Dacăstudentulnus-apregătitdeexamenșinuarezolvatproblema,
atuncivacâștiga0u.c.,iarprofesorul1u.c.Săsedetermineechilibrulbayesianperfectîn
strategiimixte.
21Rezolvare.FormaextinsăaacestuijocesteprezentatăînFigura2.2.7.S-aufolositnotațiile:pr
−studentuls-apregătitdeexamen,npr−studentulnus-apregătitdeexamen,r−studentula
rezolvatproblema,nr−studentulnuarezolvatproblema,ex−studentulasusținutexamenul,
nex−studentulnuasusținutexamenul.Vomnotaprinπprobabilitateacăstudentuls-apregătit
deexamen,prinp−probabilitateacăprofesorulavalidatexamenulcândstudentularezolvat
problema,prinq−probabilitateacăprofesorulavalidatexamenulcândstudentulnuarezolvat
problema,prinλ−probabilitateacăstudentuls-apregătitdeexamencucondițiacăelarezolvat
problema,µ−probabilitateacăstudentuls-apregătitdeexamenîncondițiacăelnuarezolvat
problema.Probabilitățileλșiµreprezintăpresupunerileprofesoruluiînmulțimilesale
informaționale.
Fig.2.2.7Jocul”Preg˘atireadeexamen.”
Mulțimileinformaționalesuntnotateprincurbe.Dacăstudentuls-apregătitdeexemen,atunci
valoareaașteptatăacâștiguluieste 12.08.1)1)(1(11.0)1)(1(19.0 qp qq pp .
Dacăstudentulnus-apregătitdeexamen,atuncivaloareaașteptatăacâștiguluieste
qpqqpp 8.12.00)1(29.00)1(21.0 .Dacă85qp ,adică
qpqp 8.12.012.08.1 ,studentuluiîiesteindiferentpregătireasaunudeexamen,șiîn
acestcazelpoatealegeoricevaloare1,0.Dacă85qp,adicăatuncicândrezolvarea
problemeiinfluențeazăconsiderabilprobabilitateadeasusțineexamenul,studentuluiîiestemai
convenabilsăsepregăteascădeexamen(1).Dacă85qp,studentuluiîiestemai
convenabilsănusepregăteascădeexamen(π=0).Astfel,reacțiaoptimalăastudentuluieste
descrisădeegalitatea:
22,
.85,085],1,0[,85,1
),(
qpqpqp
qp
Analizămpresupunerileprofesoruluiînmulțimilesaleinformaționale.Probabilitateacă
studentuls-apregătitdeexamenșiarezolvatproblemaesteπ·0.9;probabilitateacăstudentul
nus-apregăttitdeexamenșiarezolvatproblemaeste:(1−π)·0.1.Probabilitateatotalăcă
studentularezolvatproblema(adicăprobabilitateacăjoculvaducespremulțimea
informaționalădinstânga)esteπ·0.9+(1−π)·0.1.Astfel,înmulțimeainformaționalădinstânga
probabilitateanoduluidinstânga(adicăprobabilitateacăstudentuls-apregătitdeexamenșia
rezolvatproblema)este
819
1.0)1(9.09.0)(
Inmodsimilarsedeterminăprobabilitateadeaajungeînnoduldinstângaalmuțimii
informaționaledindreapta(adică,probabilitateacăstudentuls-apregătitdeexamenșinua
rezolvatproblema):
899.0)1(1.01.0)(
Fiestudentularezolvatproblema(profesorulseaflăînmulțimeainformaționalădinstânga).
Pentrupresupuneriledate1,câștigulașteptat(mediu)deprofesor,dacăelvalidează
examenul,este 20)1(2 .Încazulîncareprofesorulnuvalideazăexamenul,atunci
câștigulașteptat(mediu)deprofesor,este 211)1()1( .Dacă 212,adică
41,atunciprofesoruluiîiesteindiferentsăvalidezesaunuexamenul.Dacă41
profesoruluiîiestemaiconvenabilsăvalidezeexamenul.Îngeneral,acțiunileoptimeale
profesoruluiauurmătoareformă:
,
.41,041],1,0[,41,1
)(
p
Inmodsimilar,dacăstudentulnuarezolvatproblema(adicăprofesorulseaflăînmulțimea
informaționalădindreapta),acțiunileoptimealeprofesoruluiauurmătoareaformă:
23
41,0,41],1,0[,41,1
)(
q
Astfel,amdescrissistemulderelațiicaredeterminăechilibrulbayesianperfect.Vommenționa
următoarele:
1.încazulE.B.P.ipotezele1și2suntechivalentecufaptulcănuexistăstrategiistrict
dominatepentruoricemuțimeinformațională;
2.ipoteza4aratăfaptulcăjucătoriinupotamenințacu”ajucastrategiistrictdominate”.
24III.UTILIZAREACLUSTERULUIUSMLADETERMINAREASOLUȚIILOR
JOCURILORBAYESIENEDINAMICE.
Clusterulreprezintăungrupdecalculatoareconectate,carefuncționeazăîmpreună,putândfi
văzutecaunsistemunitar.
3.1.ElementedebazadinprogramareMPI(MessagePassingInterface).
MPIesteunstandardpentrucomunicareaprinmesaje,elaboratdeMPIForum.Îndefinirealui
aufostutilizatecaracteristicilecelemaiimportantealeunorsistemeanterioare,bazatepe
comunicațiademesaje.AfostvalorificatăexperiențadelaIBM,Intel(NX/2)Express,nCUBE
(Vertex),PARMACS,Zipcode,Chimp,PVM,Chameleon,PICL.MPIarelabazămodelul
proceselorcomunicanteprinmesaje:uncalculesteocolecțiedeprocesesecvențialecare
coopereazăprincomunicaredemesaje.MPIesteobibliotecă,nuunlimbaj.Elspecifică
convențiideapelpentrumaimultelimbajedeprogramare:C,C++,FORTRAN.77,
FORTRAN90,Java.
ObiectiveleMPI:
•proiectareauneiinterfețedeprogramareaaplicațiilor;
•comunicareeficientă;
•săfieutilizabilînmediieterogene;
•portabilitate;
•interfațadecomunicaresăfiesigură(eroriletratatededesubt);
•apropieredepracticicurente(PVM,NX,Express,p4;
•semanticainterfețeisăfieindependentădelimbaj.
Astfel,MPIesteobibliotecădefuncții,carepermiterealizareainteracțiuniiproceselorparalele
prinmecanismuldetransmitereamesajelor.Esteobibliotecăcomplexă,formatădinaproximativ
130defuncțiicareinclud:
•funcțiideinițializareșiînchidere(lichidare)aproceselorMPI;
•funcțiicareimplementeazăoperațiuniledecomunicaredetip„proces-proces”;
•funcțiicareimplementeazăoperațiunilecolective;
•funcțiipentrulucrulcugrupurideproceseșicomunicatori;
•funcțiipentrulucrulcustructuridedate;
•funcțiacareimplementeazăgenerareadinamicăaproceselor;
•funcțiicareimplementeazăcomunicăriunidirecționaleîntreprocese(accesulla
distanțăamemoriei);
25•funcțiidelucrucufișierele.
FiecaredintrefuncțiileMPIestecaracterizatăprinmetodaderealizare(executare):
•funcțielocală–serealizeazăîncadrulprocesuluicarefaceapellaea,lafinalizareaei
nuestenevoiedetransmiteredemesaje;
•funcțienelocală–pentrufinalizareaeiestenecesarăutilizareaunorproceduriMPI,
executatedealteprocese;
•funcțieglobală–proceduratrebuiesăfieexecutatădetoateproceselegrupului;
•funcțiedeblocare;
•funcțiedenon-blocare.
FuncțiileMPIdebază
FuncțiaMPI_Init
Formageneralăafuncțieieste
intMPI_Init(int*argc,char***argv);
Carezultatalexecutăriiacesteifuncțiisecreeazăungrupdeprocese,încareseincludtoate
proceselegeneratedeutilitarulmpirun,șisecreeazăpentruacestgrupunmediuvirtualde
comunicaredescrisdecomunicatorulcunumeleMPI_COMM_WORLD.Proceseledingrup
suntnumerotatedela0lagroupsize-1,undegroupsizeesteegalcunumăruldeprocesedingrup.
LafelsecreeazăcomunicatorulcunumeleMPI_COMM_SELF,caredescriemediulde
comunicarepentrufiecareprocesînparte.
PerecheafuncțieideinițializareesteMPI_Finalize,caretrebuieexecutatădefiecareproces,
pentrua„închide”mediulMPI.Utilizatorultrebuiesăseasigurecătoatecomunicațiileîncursde
desfășurares-auterminatînaintedeapeluloperațieidefinalizare.DupăMPI_Finalize,nicio
altăoperațieMPInumaipoatefiexecutată(nicimăcarunadeinițializare)
FuncțiaMPI_Comm_size
ÎnlimbajulCfuncțiaareurmătorulprototip:
intMPI_Comm_size(MPI_Commcomm,int*size),
FuncțiareturneazănumăruldeproceseMPIalemediuluidecomunicarecunumelecomm.
Funcțiaestelocală.
FuncțiaMPI_Comm_rank
ÎnlimbajulCfuncțiaareurmătorulprototip:
intMPI_Comm_rank(MPI_Commcomm,int*rank)
Unprocespoateaflapozițiasaîngrupulasociatunuicomunicatorprinapelulfuncției
MPI_Comm_rank.Funcțiareturneazăunnumărdindiapazonul0,..,size-1,caresemnifică
identificatorulprocesuluiMPIcareaexecutataceastăfuncție.Astfelproceselorliseatribuieun
26numărînfuncțiedeordineaîncareafostexecutatăfuncția.Aceastăfuncțieestelocală.
Exemplul3.1.1.SăseelaborezeunprogramMPIîncarefiecareprocestipăreșterankulsăuși
numelenoduluiundeseexecută.
MaijosesteprezentatcodulprogramuluiînlimbajulC++încareserealizeazăcondițiile
enunțateînexemplu3.1.1.
Rezultateleposibilealeexecutăriiprogramului:
[ALBOT_Mihaela@hpc]$/opt/openmpi/bin/mpiCC-oExemplu_3_1_1.exeExemplu_3_1_1.cpp
ALBOT_Mihaela@hpc]$/opt/openmpi/bin/mpirun-n7-machinefile~/nodesExemplu_3_1_1.exe
=====REZULTATULPROGRAMULUI'Exemplu_3_1_1.exe'
==Aufostgenerate4MPIprocessespenodulcompute-0-0.local===
==Aufostgenerate3MPIprocessespenodulcompute-0-1.local===
==ProceselecomunicatoruluiMPI_COMM_WORLDaufost'distribuite'penoduriastfel:
Hello,Iamtheprocessnumber0(localrunk0)onthecomputehostnamecompute-0-0.local,fromtotal
numberofprocess7
Hello,Iamtheprocessnumber3(localrunk3)onthecomputehostnamecompute-0-0.local,fromtotal
numberofprocess7
Hello,Iamtheprocessnumber2(localrunk2)onthecomputehostnamecompute-0-0.local,fromtotal
numberofprocess7
Hello,Iamtheprocessnumber4(localrunk0)onthecomputehostnamecompute-0-1.local,fromtotal
numberofprocess7
Hello,Iamtheprocessnumber5(localrunk1)onthecomputehostnamecompute-0-1.local,fromtotal
numberofprocess7
Hello,Iamtheprocessnumber1(localrunk1)onthecomputehostnamecompute-0-0.local,fromtotal
numberofprocess7
Hello,Iamtheprocessnumber6(localrunk2)onthecomputehostnamecompute-0-1.local,fromtotal
numberofprocess7
Comunicareadetip„proces-proces”(punctlapunct)
Operațiiledebazăpentrucomunicareapunctlapunctsuntsendșireceive.
send(adresa,lungime,destinatie,tip)
27unde:
•adresaidentificăînceputuluneizonedememorieundeseaflămesajuldetransmis,
•lungimeestelungimeaînoctețiamesajului,
•destinatieesteidentificatorulprocesuluicăruiaisetrimitemesajul(uzualunnumărîntreg),
•tip(flag)esteunîntregne-negativcarerestricționeazărecepțiamesajului.Acestargument
permiteprogramatoruluisărearanjezemesajeleînordine,chiardacăelenusosescînsecvența
dorită.Acestsetdeparametriesteunbuncompromisîntreceeaceutilizatoruldoreșteșiceeace
sistemulpoatesăofere:transferuleficientaluneizonecontiguedememoriedelaunprocesla
altul.Înparticular,sistemuloferămecanismeledepăstrareîncoadăamesajelor,astfelcăo
operațiederecepțierecv(adresa,maxlung,sursa,tip,actlung)seexecutăcusuccesdoardacă
mesajularetipulcorect.Mesajelecarenucorespundașteaptăîncoadă.Încelemaimultesisteme,
sursaesteunargumentdeieșire,careindicăorigineamesajului.
FuncțiiMPIpentrutransmitereamesajelor
FuncțiaMPI_Send
ÎnlimbajulCaceastăfuncțieareurmătorulprototip,valorilereturnatereprezentândcoduri
deeroare:
intMPI_Send(void*buf,intcount,MPI_Datatypedatatype,intdest,inttag,MPI_Comm
comm)
undeparametriisunt:
INbuf adresainițialăatamponuluisursă;
INcountnumăruldeelemente(întregne-
negativ);
INdatatypetipulfiecăruielement;
INdest număruldeordinealdestinatarului
(întreg);
INtag tipulmesajului(întreg);
INcommcomunicatorulimplicat.
Astfel,procesuldinmediuldecomunicarecomm,careexecutăfuncțiaMPI_Send,
expediazăprocesuluidest,countdatedetipdatatypedinmemoriasaîncepândcuadresabuf.
Acestordateliseatribuieetichetatag.
FuncțiaMPI_Recv
PrototipulacesteifuncțiiînlimbajulCeste
intMPI_Recv(void*buf,intcount,MPI_Datatypedatatype,intsource,int
tag,MPI_Commcomm,MPI_Status*status),
undeparametriisunt:
28OUTbufadresainițialăatamponuluidestinatar;
INcountnumăruldeelemente(întregne-negativ);
INdatatypetipulfiecăruielement;
INsourcenumăruldeordinealsursei(întreg);
INtag tipulmesajului(întreg);
INcomm comunicatorulimplicat;
OUTstatusstarea,element(structură)ceindicăsursa,
tipulșicontorulmesajuluiefectivprimit.
Astfel,procesuldinmediuldecomunicarecomm,careexecutăfuncțiaMPI_Recv,
recepționeazădelaprocesulsource,countdatedetipdatatypecareauetichetatagșile
salveazăînmemoriasaîncepândcuadresabuf.
FuncțiaMPI_Sendrecv
Însituațiileîncaresedoreșterealizareaunuischimbreciprocdedateîntreprocese,mai
sigurestedeautilizaofuncțiecombinatăMPI_Sendrecv.
PrototipulacesteifuncțiiînlimbajulCeste
intMPI_Sendrecv(void*sendbuf,intsendcount,MPI_Datatypesendtype,intdest,int
sendtag,void*recvbuf,intrecvcount,MPI_Datatyperecvtype,intsource,MPI_Datatypeа
recvtag,MPI_Commcomm,MPI_Status*status).
ExistășialtefuncțiiMPIcarepermitprogramatoruluisăcontrolezemoduldecomunicaredetip
proces-proces.
VomilustrautilizareafuncțiilorMPI_SendșiMPI_Recvprinurmătorulexemplu.
Exemplul3.1.2SăseelaborezeunprogramMPIînlimbajulC++încareserealizează
transmitereamesajelorpecercîncepândcuprocesul„încep”.Valoareavariabilei„încep”este
inițializatădetoateproceseleșiseaflăîndiapazonul0,…,size-1.
Maijosesteprezentatcodulprogramuluiîncareserealizeazăcondițiileenunțateîn
exemplul3.1.2.
29
Rezultateleposibilealeexecutăriiprogramului:
[ALBOT_Mihaela@hpcFinale]$/opt/openmpi/bin/mpiCC-oExemplu_3_1_2.exeExemplu_3_1_2.cpp
[ALBOT_Mihaela@hpcFinale]$/opt/openmpi/bin/mpirun-n9-machinefile~/nodesExemplu_3_1_2.exe
=====REZULTATULPROGRAMULUI'Exemplu_3_1_2.exe'
Procesulcurancul0alnodului'compute-0-0.local'aprimitvaloarea8delaprocesulcurancul8
Procesulcurancul1alnodului'compute-0-0.local'aprimitvaloarea0delaprocesulcurancul0
Procesulcurancul2alnodului'compute-0-0.local'aprimitvaloarea1delaprocesulcurancul1
Procesulcurancul3alnodului'compute-0-0.local'aprimitvaloarea2delaprocesulcurancul2
Procesulcurancul4alnodului'compute-0-1.local'aprimitvaloarea3delaprocesulcurancul3
Procesulcurancul8alnodului'compute-0-2.local'aprimitvaloarea7delaprocesulcurancul7
Procesulcurancul5alnodului'compute-0-1.local'aprimitvaloarea4delaprocesulcurancul4
Procesulcurancul6alnodului'compute-0-1.local'aprimitvaloarea5delaprocesulcurancul5
Procesulcurancul7alnodului'compute-0-1.local'aprimitvaloarea6delaprocesulcurancul6
FuncțiileMPIpentrucomunicareacolectivă
Operațiilecolectiveimplicăungrupdeprocese.Pentruexecuție,operațiacolectivătrebuie
apelatădetoateprocesele,cuargumentecorespondente.Proceseleimplicatesuntdefinitede
argumentulcomunicator,careprecizeazătotodatăcontextuloperației.Multeoperațiicolective,
cumestedifuzarea,presupunexistențaunuiprocesdeosebitdecelelalte,aflatlaoriginea
transmiteriisaurecepției.Unastfeldeprocessenumeșterădăcină.Anumiteargumentesunt
specificerădăciniișisuntignoratedecelelalteprocese,altelesuntcomunetuturor.
Operațiilecolectiveseîmpartînmaimultecategorii:
sincronizaredetipbarierăatuturorproceselorgrupului;
comunicăricolective,încareseinclud:
difuzarea;
colectareadatelordelamembriigrupuluilarădăcină;
distribuireadatelordelarădăcinăspremembriigrupului;
30combinațiidecolectare/distribuire(allgatherșialltoall);
calculecolective:
operațiidereducere;
combinațiireducere/distribuire.
Caracteristicicomunealeoperațiilorcolectivedetransmitereamesajelor:
Tipuldatelor
Cantitateadedatetransmisătrebuiesăcorespundăcucantitateadedaterecepționată.Deci,
chiardacăhărțiletipurilordiferă,semnăturilelortrebuiesăcoincidă.
Sincronizarea
Terminareaunuiapelarecasemnificațiefaptulcăapelantulpoateutilizatamponulde
comunicare,participareasaînoperațiacolectivăîncheindu-se.Astanuaratăcăcelelalteprocese
dingrupauterminatoperația.Caurmare,exceptândsincronizareadetipbarieră,ooperație
colectivănupoatefifolosităpentrusincronizareaproceselor.
Comunicator
Comunicărilecolectivepotfolosiaceeașicomunicatoricaceipunctlapunct.MPI
garanteazădiferențiereamesajelorgenerateprinoperațiicolectivedecelepunctlapunct.
Implementare
Rutineledecomunicarecolectivăpotfibazatepecelepunctlapunct.Aceastasporește
portabilitateafațădeimplementărilebazateperutineceexploateazăarhitecturiparalele.
Principaladiferențădintreoperațiilecolectiveșioperațiiledetippunctlapunctestefaptulcă
acesteaimplicăîntotdeaunatoateproceseleasociatecuunmediuvirtualdecomunicare
(comunicator).Setuldeoperațiicolectiveinclude:
sincronizareatuturorproceselorprinbariere(funcțiaMPI_Barrier);
acțiunidecomunicarecolectivă,careinclud:
livraredeinformațiidelaunproceslatoțiceilalțimembriaicomunicatorului(funcția
MPI_Bcast);
oasamblare(adunare)amasivelordedatedistribuitepeoseriedeproceseîntr-un
singurtabloușipăstrarealuiînspațiuldeadreseaunuisingurproces(root)(funcțiile
MPI_Gather,MPI_Gatherv);
oasamblare(adunare)amasivelordedatedistribuitepeoseriedeproceseîntr-un
singurtabloușipăstrarealuiînspațiuldeadresealtuturorproceselorcomunicatorului
(funcțiileMPI_Allgather,MPI_Allgatherv);
divizareaunuimasivșitrimitereafragmentelorsaletuturorproceselordin
comunicatorulindicat(funcțiileMPI_Scatter,MPI_Scatterv);
31ocombinareaoperațiilorScatter/Gather(All-to-All),fiecareprocesîmpartedatelesale
dinmemoriatampondetrimitereșidistribuiefragmentelededatetuturorproceselor,și,
concomitent,colecteazăfragmenteletrimiseîntr-untamponderecepție(funcțiile
MPI_Alltoall,MPI_Alltoallv);
operațiileglobaledecalculasupradatelordinmemoriadiferitorprocese:
cupăstrarearezultatelorînspațiuldeadresealunuisingurproces(funcția
MPI_Reduce);
cudifuzarea(distribuirea)rezultatelortuturorproceselorcomunicatoruluiindicat
(funcțiaMPI_Allreduce);
operațiicombinateReduce/Scatter(funcțiaMPI_Reduce_scatter);
operațiedereducereprefix(funcțiaMPI_Scan).
Toaterutineledecomunicare,cuexcepțiaMPI_Bcast,suntdisponibileîndouăversiuni:
variantasimplă,cândtoatemesajeletransmiseauaceeașilungimeșiocupăzoneleadiacente
înspațiuldeadresealprocesului;
variantadetip"vector"(funcțiilecusimbolsuplimentar"v"lasfârșitulnumelui),careoferă
maimulteoportunitățipentruorganizareadecomunicațiicolectiveșieliminărestricțiile
inerentedinvariantasimplă,atâtînceeacepriveștelungimeablocurilordedate,câtșiîn
ceeacepriveșteplasareadatelorînspațiuldeadresealproceselor.
FuncțiileMPIpentruoperațiidereducere
Înprogramareaparalelăoperațiilematematicepeblocuridedatecaresuntdistribuiteîntre
procesoaresenumescoperațiiglobaledereducere.Ooperațiedeacumularesemainumeșteși
operațieglobalădereducere.Fiecareprocespuneladispozițieunblocdedate,caresunt
combinatecuooperațiebinarădereducere;rezultatulacumulatestecolectatlaprocesulroot.În
MPI,ooperațiuneglobalădereducereestereprezentatăînurmătoarelemoduri:
•menținerearezultatelorînspațiuldeadresealunuisingurproces(funcțiaMPI_Reduce);
•menținerearezultatelorînspațiuldeadresealtuturorproceselor(funcția
MPI_Allreduce);
operațiadereducereprefix,careîncalitatederezultatreturneazăunvectoralcăruicomponentăi
esterezultatuloperațieidereducerealeprimeloricomponentedinvectoruldistribuit(funcția
MPI_Scan).
FuncțiaMPI_Reduceseexecutăastfel.Operațiaglobalădereducereindicatăprin
specificareaparametruluiop,serealizeazăpeprimeleelementealetamponuluideintrare,iar
rezultatulestetrimisînprimulelementaltamponuluiderecepționarealprocesuluiroot.Același
lucruserepetăpentruurmătoareleelementedinmemoriatamponetc.Prototipulacesteifuncțiiîn
32limbajulCeste:
intMPI_Reduce(void*sendbuf,void*recvbuf,intcount,MPI_Datatypedatatype,
MPI_Opop,introot,MPI_Commcomm)
unde
INsendbufadresainițialăatamponuluipentrudatelede
intrare;
OUTrecvbufadresainițialăatamponuluipentrurezultate
(seutilizeazănumaideprocesulroot);
INcountnumăruldeelementeîntamponuldeintrare;
INdatatypetipulfiecăruielementdintamponulde
intrare;
INop operațiadereducere;
INrootnumărulprocesuluicarerecepționează
rezultateleoperațieidereducere;
INcommcomunicatorulimplicat.
Întabeluldemaijossuntprezentateoperațiilepredefinitecarepotfiutilizateînfuncția
MPI_Reduce.
Nume Operația Tipuridedateadmisibile
MPI_MAX
MPI_MINMaximum
Minimuminteger,floatingpoint
MPI_SUM
MPI_PRODSuma
Produsulinteger,floatingpoint,
complex
MPI_LAND
MPI_LOR
MPI_LXORAND
OR
excludereORinteger,logical
MPI_BAND
MPI_BOR
MPI_BXORAND
OR
excludereORinteger,byte
MPI_MAXL
OC
MPI_MINLO
CValoareamaximalășiindicele
ValoareaminimalășiindiceleTipspecialdedate
Întabeluldemaisuspentrutipuridedateseutilizeazăurmătoarelenotații:
integerMPI_INT, MPI_LONG, MPI_SHORT,
MPI_UNSIGNED_SHORT, MPI_UNSIGNED,
MPI_UNSIGNED_LONG
floating
pointMPI_FLOAT, MPI_DOUBLE, MPI_REAL,
MPI_DOUBLE_PRECISION,MPI_LONG_DOUBLE
logicalMPI_LOGICAL
complexMPI_COMPLEX
byte MPI_BYTE
VomilustrautilizareaoperațiilorglobaledereducereMPI_SUMînbazaurmătorului
exemplu.
33Exemplul3.1.3Săsecalculezevaloareaaproximativăalui prinintegrarenumericăcu
formula dxx1
0214 ,folosindformuladreptunghiurilor.Intervalulînchis[0,1]seîmparteîntr-
unnumărdensubintervaleșiseînsumeazăariiledreptunghiuriloravândcabazăfiecare
subinterval.Pentruexecuțiaalgoritmuluiînparalel,seatribuie,fiecăruiadintreproceseledin
grup,unanumitnumărdesubintervale.Celedouăoperațiicolectivecareaparînrezolvaresunt:
difuzareavalorilorluin,tuturorproceselor;
însumareavalorilorcalculatedeprocese.
MaijosesteprezentatcodulprogramuluiînlimbajulC++caredeterminăvaloareaaproximativă
alui
Rezultateleposibilealeexecutăriiprogramului:
[ALBOT_Mihaela@hpc]$/opt/openmpi/bin/mpiCC-oExemplu3.1.3.exeExemplu_3_1_3.cpp
[ALBOT_Mihaela@hpc]$/opt/openmpi/bin/mpirun-n16-machinefile~/nodes4Exemplu3.1.3.exe
=====Rezultateleprogramului'Exemplu_3_1_3.exe'=====
Enterthenumberofintervals:(0quits)100000
Process1oncompute-0-2.localmypi=0.1963576657186469
Process2oncompute-0-2.localmypi=0.1963564157936524
Process3oncompute-0-2.localmypi=0.1963551658561532
Process4oncompute-0-4.localmypi=0.1963539159061520
Process10oncompute-0-6.localmypi=0.1963464159436181
Process12oncompute-0-8.localmypi=0.1963439158561127
34Process0oncompute-0-2.localmypi=0.1963589156311392
Process6oncompute-0-4.localmypi=0.1963514159686426
Process8oncompute-0-6.localmypi=0.1963489159811299
Process15oncompute-0-8.localmypi=0.1963401656311267
Process7oncompute-0-4.localmypi=0.1963501659811359
Process9oncompute-0-6.localmypi=0.1963476659686233
Process14oncompute-0-8.localmypi=0.1963414157186182
Process5oncompute-0-4.localmypi=0.1963526659436477
Process11oncompute-0-6.localmypi=0.1963451659061137
Process13oncompute-0-8.localmypi=0.1963426657936135
Piisapproximately3.1415926535981260,Erroris0.0000000000083329
wallclocktime=0.000813
=====Rezultateleprogramului'HB_Pi.exe'=====
Enterthenumberofintervals:(0quits)100000000
Process8oncompute-0-6.localmypi=0.1963495402243708
Process15oncompute-0-8.localmypi=0.1963495314743671
Process4oncompute-0-4.localmypi=0.1963495452243360
Process5oncompute-0-4.localmypi=0.1963495439743813
Process3oncompute-0-2.localmypi=0.1963495464743635
Process11oncompute-0-6.localmypi=0.1963495364743647
Process1oncompute-0-2.localmypi=0.1963495489743604
Process13oncompute-0-8.localmypi=0.1963495339743620
Process14oncompute-0-8.localmypi=0.1963495327243415
Process0oncompute-0-2.localmypi=0.1963495502243742
Process7oncompute-0-4.localmypi=0.1963495414743800
Process2oncompute-0-2.localmypi=0.1963495477243492
Process12oncompute-0-8.localmypi=0.1963495352243697
Process9oncompute-0-6.localmypi=0.1963495389743577
Process6oncompute-0-4.localmypi=0.1963495427243758
Process10oncompute-0-6.localmypi=0.1963495377243211
Piisapproximately3.1415926535897749,Erroris0.0000000000000182
wallclocktime=0.172357
=====Rezultateleprogramului'HB_Pi.exe'=====
Enterthenumberofintervals:(0quits)0
[ALBOT_Mihaela@hpc]$
VomexemplificautilizareaoperațiilorglobaledereducereMPI_MAXșiMPI_MINîncelece
urmează.
Exemplul3.1.4Săsedetermineelementelemaximaledepecoloaneleuneimatrice
pătrate(dimensiuneaesteegalăcunumăruldeprocese).Elementelematriceisuntinițializatede
procesulcurankul0.SăfieutilizatefuncțiileMPI_ReduceșioperațiaMPI_MAX.
35
Rezultateleposibilealeexecutăriiprogramului:
[ALBOT_Mihaela@hpc]$/opt/openmpi/bin/mpiCC-oExemplu_3_1_4.exeExemplu_3_1_4.cpp
[ALBOT_Mihaela@hpc]$/opt/openmpi/bin/mpirun-n6-machinefile~/nodes4oExemplu_3_1_4.exe
=====REZULTATULPROGRAMULUI'Exemplu_3_1_4.exe'
Tipardateleinitiale
A[0,0]=1.80A[0,1]=0.85A[0,2]=1.68A[0,3]=1.71A[0,4]=1.96A[0,5]=0.42
A[1,0]=0.72A[1,1]=1.65A[1,2]=0.60A[1,3]=1.19A[1,4]=1.03A[1,5]=1.35
A[2,0]=0.78A[2,1]=1.10A[2,2]=2.04A[2,3]=1.97A[2,4]=1.37A[2,5]=1.54
A[3,0]=0.30A[3,1]=1.30A[3,2]=0.04A[3,3]=0.52A[3,4]=0.29A[3,5]=1.73
A[4,0]=0.34A[4,1]=0.86A[4,2]=0.28A[4,3]=0.23A[4,4]=2.15A[4,5]=0.47
A[5,0]=1.10A[5,1]=1.80A[5,2]=1.32A[5,3]=0.64A[5,4]=1.37A[5,5]=1.13
Elementulmaximaldepecoloana0=1.80
Elementulmaximaldepecoloana1=1.80
Elementulmaximaldepecoloana2=2.04
Elementulmaximaldepecoloana3=1.97
Elementulmaximaldepecoloana4=2.15
Elementulmaximaldepecoloana5=1.73
[ALBOT_Mihaela@hpc]$/opt/openmpi/bin/mpirun-n8-machinefile~/nodes4Exemplu_2_4_2.exe
=====REZULTATULPROGRAMULUI'Exemplu_2_4_2.exe'
Tipardateleinitiale
A[0,0]=1.80A[0,1]=0.85A[0,2]=1.68A[0,3]=1.71A[0,4]=1.96A[0,5]=0.42A[0,6]=0.72A[0,7]=1.65
A[1,0]=0.60A[1,1]=1.19A[1,2]=1.03A[1,3]=1.35A[1,4]=0.78A[1,5]=1.10A[1,6]=2.04A[1,7]=1.97
A[2,0]=1.37A[2,1]=1.54A[2,2]=0.30A[2,3]=1.30A[2,4]=0.04A[2,5]=0.52A[2,6]=0.29A[2,7]=1.73
A[3,0]=0.34A[3,1]=0.86A[3,2]=0.28A[3,3]=0.23A[3,4]=2.15A[3,5]=0.47A[3,6]=1.10A[3,7]=1.80
A[4,0]=1.32A[4,1]=0.64A[4,2]=1.37A[4,3]=1.13A[4,4]=1.06A[4,5]=2.09A[4,6]=0.63A[4,7]=1.66
A[5,0]=1.13A[5,1]=1.65A[5,2]=0.86A[5,3]=1.91A[5,4]=0.61A[5,5]=0.76A[5,6]=1.73A[5,7]=1.97
A[6,0]=0.15A[6,1]=2.04A[6,2]=1.13A[6,3]=0.18A[6,4]=0.41A[6,5]=1.42A[6,6]=1.91A[6,7]=0.75
A[7,0]=0.14A[7,1]=0.04A[7,2]=0.98A[7,3]=0.14A[7,4]=0.51A[7,5]=2.08A[7,6]=1.94A[7,7]=1.83
Elementulmaximaldepecoloana0=1.80
Elementulmaximaldepecoloana1=2.04
Elementulmaximaldepecoloana2=1.68
Elementulmaximaldepecoloana3=1.91
Elementulmaximaldepecoloana4=2.15
Elementulmaximaldepecoloana5=2.09
Elementulmaximaldepecoloana6=2.04
Elementulmaximaldepecoloana7=1.97
36Exemplul3.1.4aSăsedetermineelementelemaximaledepecoloaneleuneimatricipatrate
(dimensiuneaesteegalacunumaruldeprocese).Liniilematriceisuntinitializatedefiecare
procesînparte.Procesulcurankul0înbazaacestorlinii"construiește"matricea.Săfie
utilizatefunctiaMPI_ReducesioperatiaMPI_MAX.
Rezultateleposibilealeexecutăriiprogramului:
[ALBOT_Mihaela@hpc]$/opt/openmpi/bin/mpiCC-oExemplu_3_1_4a.exeExemplu_3_1_4a.cpp
[ALBOT_Mihaela@hpc]$/opt/openmpi/bin/mpirun-n5-machinefile~/nodes6Exemplu_3_1_4a.exe
=====REZULTATULPROGRAMULUI'Exemplu_3_1_4a.exe'
Tipardateleinitialealeprocesuluicurankul0
Rows[0]=1.98Rows[1]=1.97Rows[2]=0.42Rows[3]=0.49Rows[4]=2.04
Tipardateleinitialealeprocesuluicurankul1
Rows[0]=0.60Rows[1]=0.71Rows[2]=2.15Rows[3]=1.18Rows[4]=0.82
Tipardateleinitialealeprocesuluicurankul2
Rows[0]=1.38Rows[1]=1.59Rows[2]=1.73Rows[3]=0.80Rows[4]=1.76
Tipardateleinitialealeprocesuluicurankul3
Rows[0]=0.00Rows[1]=0.34Rows[2]=0.24Rows[3]=1.49Rows[4]=1.63
Tipardateleinitialealeprocesuluicurankul4
Rows[0]=1.84Rows[1]=1.22Rows[2]=1.96Rows[3]=1.10Rows[4]=0.40
Resultatelef-tieiMPI_Gather
A[0,0]=1.98A[0,1]=1.97A[0,2]=0.42A[0,3]=0.49A[0,4]=2.04
A[1,0]=0.60A[1,1]=0.71A[1,2]=2.15A[1,3]=1.18A[1,4]=0.82
A[2,0]=1.38A[2,1]=1.59A[2,2]=1.73A[2,3]=0.80A[2,4]=1.76
A[3,0]=0.00A[3,1]=0.34A[3,2]=0.24A[3,3]=1.49A[3,4]=1.63
A[4,0]=1.84A[4,1]=1.22A[4,2]=1.96A[4,3]=1.10A[4,4]=0.40
Elementulmaximaldepecoloana0=1.98
Elementulmaximaldepecoloana1=1.97
Elementulmaximaldepecoloana2=2.15
Elementulmaximaldepecoloana3=1.49
Elementulmaximaldepecoloana4=2.04
[ALBOT_Mihaela@hpcFinale]$
37Exemplu3.1.5UtilizândfuncțiaMPI_ReduceșioperațiileMPI_MAXLOCsăse
determineelementelemaximaledepecoloaneșiindiceleliniei,uneimatricepătrate
(dimensiuneaesteegalăcunumăruldeprocese).Elementelematriceisuntinițializatede
procesulcurankul0.
Rezultateleposibilealeexecutăriiprogramului:
[ALBOT_Mihaela@hpc]$/opt/openmpi/bin/mpiCC-oExemplu_3_1_5.exeExemplu_3_1_5.cpp
[ALBOT_Mihaela@hpc]$/opt/openmpi/bin/mpirun-n6-machinefile~/nodes4Exemplu_3_1_5.exe
=====Rezultateleprogramului'Exemplu_3_1_5.exe'=====
Tipardateleinitiale
A[0,0]=1.80A[0,1]=0.85A[0,2]=1.68A[0,3]=1.71A[0,4]=1.96A[0,5]=0.42
A[1,0]=0.72A[1,1]=1.65A[1,2]=0.60A[1,3]=1.19A[1,4]=1.03A[1,5]=1.35
A[2,0]=0.78A[2,1]=1.10A[2,2]=2.04A[2,3]=1.97A[2,4]=1.37A[2,5]=1.54
A[3,0]=0.30A[3,1]=1.30A[3,2]=0.04A[3,3]=0.52A[3,4]=0.29A[3,5]=1.73
A[4,0]=0.34A[4,1]=0.86A[4,2]=0.28A[4,3]=0.23A[4,4]=2.15A[4,5]=0.47
A[5,0]=1.10A[5,1]=1.80A[5,2]=1.32A[5,3]=0.64A[5,4]=1.37A[5,5]=1.13
Valorilemaximaledepecoloaneșiindiceleliniei:
Coloana0,valoarea=1.80,linia=0
Coloana1,valoarea=1.80,linia=5
Coloana2,valoarea=2.04,linia=2
Coloana3,valoarea=1.97,linia=2
Coloana4,valoarea=2.15,linia=4
Coloana5,valoarea=1.73,linia=3
[Hancu_B_S@hpc]$/opt/openmpi/bin/mpirun-n8-machinefile~/nodes4Exemplu_3_4_7.exe
=====Rezultateleprogramului'Exemplu_2_4_3.exe'=====
Tipardateleinitiale
A[0,0]=1.80A[0,1]=0.85A[0,2]=1.68A[0,3]=1.71A[0,4]=1.96A[0,5]=0.42A[0,6]=0.72A[0,7]=1.65
A[1,0]=0.60A[1,1]=1.19A[1,2]=1.03A[1,3]=1.35A[1,4]=0.78A[1,5]=1.10A[1,6]=2.04A[1,7]=1.97
A[2,0]=1.37A[2,1]=1.54A[2,2]=0.30A[2,3]=1.30A[2,4]=0.04A[2,5]=0.52A[2,6]=0.29A[2,7]=1.73
A[3,0]=0.34A[3,1]=0.86A[3,2]=0.28A[3,3]=0.23A[3,4]=2.15A[3,5]=0.47A[3,6]=1.10A[3,7]=1.80
A[4,0]=1.32A[4,1]=0.64A[4,2]=1.37A[4,3]=1.13A[4,4]=1.06A[4,5]=2.09A[4,6]=0.63A[4,7]=1.66
38A[5,0]=1.13A[5,1]=1.65A[5,2]=0.86A[5,3]=1.91A[5,4]=0.61A[5,5]=0.76A[5,6]=1.73A[5,7]=1.97
A[6,0]=0.15A[6,1]=2.04A[6,2]=1.13A[6,3]=0.18A[6,4]=0.41A[6,5]=1.42A[6,6]=1.91A[6,7]=0.75
A[7,0]=0.14A[7,1]=0.04A[7,2]=0.98A[7,3]=0.14A[7,4]=0.51A[7,5]=2.08A[7,6]=1.94A[7,7]=1.83
Valorilemaximaledepecoloaneșiindiceleliniei:
Coloana0,valoarea=1.80,linia=0
Coloana1,valoarea=2.04,linia=6
Coloana2,valoarea=1.68,linia=0
Coloana3,valoarea=1.91,linia=5
Coloana4,valoarea=2.15,linia=3
Coloana5,valoarea=2.09,linia=4
Coloana6,valoarea=2.04,linia=1
Coloana7,valoarea=1.97,linia=5
[ALBOT_Mihaela@hpcNotate_Exemple]$
3.2.Algoritmulinducțieirecursive(backwardinduction).
Saconsiderămjoculdinamicdetreipersoanecutreiniveleinurmătoareformăstrategică:
, :, :, :;,, RXYZHRXYZFRXYZGXYZ undeZ,YșiXsunt
strategiilevalabileșiG,FșiHsuntfuncțiidecâștigpentrujucătorii1,2șirespectiv3.
Laprimulnivel:jucătorul1alegestrategiasaZz,șiocomunicăjucătorului2.Laaldoilea
nivel:jucătorul2observăstrategiaaleasădecătreprimuljucătorșiîșialegeindependent
strategiasaYy,dupăcareaceastaperechedestrategii(z,y)setransmitejucătorului3.Laal
treileanivel:jucătorul3observăperecheadestrategii(z,y)șiîșialegestrategiasaXx.După
aceastajoculseconsiderăfinisat.Sepresupunecajucătoriivreusă-șimaximizezefuncțiilesale
decâștig.Următorulalgoritminducțieirecursivepoategăsisoluțiipentrujocuridinamicecutrei
niveledetreijucători:
a)Jucătorul3observăstrategiaZzalprimuluijucătorșistrategiaYyaljucătorului2,el
vaalegestrategiaceamaioptimalăreieșinddinperecheadestrategii(z,y).Deci,elvaalege
următoareavaloareaceluimaibunpunctderăspunspentruasetamaparea:
XYZBR 2:3,);,,(max ),(),(3*xyzHArgyzBRyzx
Xx
b)Jucătorul2știindcăjucătorul3v-ajucastrategiayzx,*,alegestrategiadinsetuldereacție
optimaljucatorului2pentruostrategieajucătorului1,astfelvaalegeurmătoareavaloarea
celuimaibunpunctderăspunspentruasetamaparea:YZBR2:2
));,(,,(max )()(*
2*yzxyzFArgzBRzy
Yy
c)Jucătorul1știindcajucătorul2alegestrategia)(zyșijucătorul3alegestrategiayzx,,v-
aalegeurmătoareamulțime: )))(,(),(,(max***
1*zyzxzyzGArgBRz
Zz
.
Aici2X,2YreprezintămultimeatuturorsubmultimilordinsetulXși,respectiv,Y.
39Definitie3.2.1.Profiluriledestrategie )))(,(),(,(),,( zyzxzyzxyz descriseînetapele
a)-c)aalgoritmuluiinducțieirecursivesenumeșteProfiluldeechilibruStackelbergînjocuri
dinamiceintreinivelecutreijucători.
Considerămurmătorulsetdematrici3-diminsionale ||,,||k
ijk
ijk
ijkcbaA șidefinimjoculcutrei
jucătoriîntreietape,unde .,…,,…,1;,…,,…,1;,…,,..,1 JmjIniKlk estesetuldestrategii
valabileșik
ijk
ijk
ijcba,, estecâștiguljucătorilor1,2,3.Jocularelocinurmătorulfel:primul
jucătoralegestrategiakșiocomunicăjucătorului2.Înadouaetapăjucătorul2vedestrategia
aleasădeprimulșiîșialegestrategiasai,dupăcareaceastăperechedestrategii(k,i)se
comunicăjucătorului3.Înatreiaetapăjucătorul3observăalegerilecelorlalțijucătorișialege
strategiaj.Dupăaceastajoculseconsiderăfinisat.Sepresupunecăjucătoriivreusă-și
maximizezefuncțiilesaledecâștig.
Următorulalgoritminducțieirecursivepoategăsisoluțiipentrujocuridinamicecutreinivele
detreijucători:
A)Pentrutoate Klk,…,,…,1 si Ini,…,,…,1 jucătorul3v-aalegestrategiaceamaioptimală
dinurmătoareamulțimedecelemaibunerăspunsuri: ;maxarg),(|),(),(
jk
ijc ikjikjikJ
B)Pentrutoate Klk,…,,…,1 ,jucătorul2știindcăjucătorul3v-aalegestrategiile
ikJikj ,,alegestrategiadinmulțimea:
k
ikijb kikikI),(maxarg)(|)()( ;
C)Primuljucătorștiindcăaldoileajucătorv-aalegestrategiakIkișialtreileajucător
alegestrategiaikJikj ,, ,v-aalegestrategiadinceamaioptimalămulțimedereacție:
k
kikjkikakkK))(,()(maxarg|
Prinurmare,strategiile ))k(i,k(j),k(i,k*******definiteînpunctelea)-c)aalgoritmului
inducțieirecursivesenumescEchilibruStackelbergpentrujocuridinamicedetreijucătoripe
treinivele.Înformaextinsă,jocdinamicdescrisareurmătoareaformă:
40
Înformagraficăaetapelora)-c)aalgoritmuluiinducțieirecursivetrebuiesăfiereprezentatcum
înFigura1.
A’)Etapaa)aalgoritmuluiinducțieirecursive,deexemplupentrutoatek=1,…,l,…,Kși
i=1,…,n,…,Isubjoculobținutdupăcejucătorul3alegestrategia k
ijj*cmaxarg)i,k(j este
reprezentatăînFigura2:
B’)Etapab)aalgoritmuluiinducțieirecursive,deexemplupentrutoatek=1,…,l,…,Ksubjocul
41obținutdupăcejucătorul2alegestrategiile k
)i,k(iji*
*bmaxarg)k(i estereprezentatFigura3:
C’)Etapac)algoritmulinducțieirecursive,deexemplu“subjocul”obținutdupăcejucătorul1
alegestrategia . amaxargkk
))k(i,k(j)k(ik*
*** estereprezentatinFigura4.
Săvedemurmătorulexemplu:
Exemplu.3.2.1Fiek=1,2,i=1,2,j=1,2șimatricile 6,5,11,0,2A1 ,
0,2,27,1,04,4,52,1,3A2.
Deciconformetapeia)algoritmulinducțierecursivenoiobținemcă ,2)1,1(j* ,2)1,2(j*
.1)2,2(j*Conformetapeib)noiobținemcă,1)1(i* .1)2(i*Conformetapeic)noiobținem
că.2k*Deaceeaprimim ,1)k(i** ,2))k(i,k(j****șiprofilulechilibruluiStackelberga
joculuieste(2,1,2).
42FolosindGambit1(SoftwareToolsforGameTheory)Version0.2007.01.30noiputemsă
reprezentămformaextinsășisoluțiilejoculuidinExemplu.3.2.1înurmătoareafigură.Jocul
inițialestereprezentatînfigura5.
Figura5.
Folosindetapaa)aalgoritmuluinoiobținem ,2)1,1(j* ,2)1,2(j* 1)2,2(j*șiexcluzînd
subramurilecorespunzătoareseobțineurmătorulsubjocFigura6:
Figura6 Figura7
Folosindetapab)aalgoritmuluiobținem ,1)1(i* 1)2(i*șiexcluzîndsubramurile
corespunzătoareobținemurmătorulsubjocFigura7.
Însfirșitconformc)alalgoritmuluinoiobținem2k*șiprofilulechilibruluiStackelbergal
joculuieste(2,1,2).
3.3.AlgoritmulparalelpentrugăsireprofiluluiechilibruluiStackelbergintreietapea
jocurilordinamicecufuncțiidiscretedecâștig.
Computereleparaleleaudouăarhitecturidebază:memoriedistributivășimemoriepartajată.
Computereleparalelecumemoriedistributivăestedefaptocolecțiedeseriidecomputere
43(noduri)celucreazăîmpreunăpentruarezolvaproblema.Fiecarenodareaccesrapidla
memorialocalăpersonalășiacceslamemoriaaltornoduriprinunfelderețeadecomunicare,de
obiceiprioritatearerețelecuvitezămare.Înformațiaesteschimbatăprintrenoduricamesajele
prinrețea.Încomputerelecumemoriepartajată,multipleunitățiaprocesoruluipartajează
accesullaunspațiuglobaldememorieprintr-omagistralădememoriedemareviteză.Acest
spațiudememorieglobalăpermiteprocesatorilorsăschimbesausăpartajezeînmodeficient
accesulladate.
Primulpasînproiectareaunuialgoritmparalelestedeadescompuneproblemaînproblememai
mici.Apoi,problemelemaimicisuntatribuiteprocesoarelorpentrualucrasimultan.
Aproximativ,existădouătipuridedescompuneri:
descompunereadomeniului.
descompunerefuncțională.
Îndescompunereadomeniuluisau"paralelismuldatelor",datelesuntîmpărțiteînbucățide
aproximativaceeașidimensiuneșiapoicartografiateladiferiteprocesoare.Fiecareprocesor
funcționeazăapoinumaipeporțiuneadedatecareîiesteatribuită.Desigur,esteposibilca
proceselesătrebuiascăsăcomuniceperiodicpentruafaceschimbdedate.Paralelismuldedate
oferăavantajulmențineriiunuisingurfluxdecontrol.Unalgoritmparaleldedateconstădintr-o
secvențădeinstrucțiunielementareaplicatedatelor:oinstrucțiuneesteinițiatănumaidacă
instrucțiuneaanterioarăseîncheie.Single-Program-Multiple-Data(SPMD)urmeazăacestmodel
încazulîncarecodulesteidenticpetoateprocesoarele.Astfeldestrategiisuntutilizateînmod
obișnuitînalgoritmiidediferențierefinită,undeprocesoarelepotfuncționaindependentpe
porțiunimaridedate,comunicândnumaidateledegranițămultmaimicilafiecareiterație.
Frecvent,strategiadedescompunereadomeniuluisedovedeșteaficelmaieficientalgoritm
pentruunprogramparalel.Acestaestecazulatuncicândpieselededateatribuitediferitelor
procesenecesităperioadefoartediferitedetimppentruprocesare.Performanțacoduluiesteapoi
limitatădevitezaceluimailentproces.Restulproceselorînașteptarenufacnicioactivitateutilă.
Înacestcaz,descompunereafuncționalăsau"paralelismulsarcinilor"aremaimultăsensdecât
descompunereadomeniului.Înparalelismulsarcinii,problemaestedescompusăîntr-unnumăr
maredesarcinimaimicișiapoisarcinilesuntatribuiteprocesorilorînmomentulîncaredevin
disponibile.Procesoarelecareterminarepedesuntpurșisimpluatribuitemaimultămuncă.
Paralelismulsarciniloresteimplementatîntr-oparadigmăclient-server.Sarcinilesuntalocate
unuigrupdeproceseslaveprintr-unprocesmaster,carepoateîndeplinișianumitesarcini.
Paradigmaclient-serverpoatefiimplementatălaaproapeoriceniveldintr-unprogram.Dinpunct
devedereistoric,auexistatdouăabordăripentruscriereaprogramelorparalele.Sunt
44utilizareauneilimbiparalelededatebazatepedirective;
transmitereamesajuluiextinsprinapelurilebiblioteciidinlimbiledeprogramarestandard.
Într-olimbădedateparalelăbazatăpedirective,cumarfiHighPerformanceFortran(HPF)sau
OpenMP,uncodserialesteparalelprinadăugareadedirective(careaparcacomentariiîncodul
serial)careîispuncompilatoruluicumsădistribuiedateșisălucrezede-alungulprocesoarelor.
Detaliileprivinddistribuireadatelor,calcululșicomunicăriletrebuiesăfielăsatecompilatorului.
Limbileparalelededatesuntdeobiceiimplementatepearhitecturiledememoriepartajată,
deoarecespațiuldememorieglobalăsimplificăfoartemultscriereacompilatoarelor.În
abordareadetransmitereamesajelor,estelăsatdecătreprogramatorsăîmpartăînmodexplicit
dateleșisălucrezeîntreprocesoare,precumșisăgestionezecomunicațiiledintreele.Această
abordareestefoarteflexibilă.
Interfațadetransmitereamesajelor(MPI)esteobibliotecăstandardfolosităpescarălargă
pentruscriereaprogramelordetrecereamasajului,înspecialpemașinileparalelecumemorie
distribuită.Pentruarhitecturilecalculatoarelorparalelecumemoriedistribuităamproiectatun
algoritmparalelpentrudeterminareaprofiluluideechilibruStackelbergînjoculdescrismaisus.
FolosimurmătoarelefuncțiiMPIpentruimplementareasoftware-uluialgoritmuluideinducție
inversădescrisînetapelea)-c).RutinaMPI_comm_groupdeterminămâneruldegrupalunui
comunicator.RutinaMPI_Group_inclcreeazăungrupnoudintr-ungrupexistentșispecifică
proceselemembrilor.RutinaMPI_Comm_createcreeazăunnoucomunicatorpentruainclude
procesespecificedelauncomunicatorexistent.FuncțiaMPI_Type_structestecelmaigeneral
moddeaconstruiuntipderivatMPI,deoarecepermitecalungimea,locațiașitipulfiecărei
componentesăfiespecificateindependent.Suntdisponibileprocedurimaipuțingeneralepentru
adescriemodelecomunedeacces,înspecialîncadrulrețelelor.RutinaMPI_Bcastvăpermite
săcopiațidateledinmemoriaprocesoruluirădăcinăînaceleașilocațiidememoriepentrualte
procesoaredincomunicator.RutinaMPI_Scatteresteocomunicareunu-la-toate.Datelediferite
sunttrimisedelaprocesulrădăcinălafiecareproces(înordinederang).Atuncicândsenumește
MPI_Scatter,procesulderădăcinărupeunsetdelocațiidememoriecontigueînegalăbucățiși
trimiteobucatălafiecareprocesor.RutinaMPI_Reducepermitecolectareadedatedelafiecare
procesor,reducereaacestordatelaosingurăvaloare(cumarfisumsaumax)șistocarea
rezultatuluireduspeprocesorulrădăcină.MPI_Allreduceestefolositpentruacombina
elementelefiecăruitampondeintrarealfiecăruiprocesșistocheazăvaloareacombinatăpe
tamponulprimitaltuturormembrilorgrupului.Înplus,funcțiaMPI_Reducecombină
45elementelefurnizateînbufferuldetrimitere,aplicăoperațiaspecificată(sum,min,max,etc)și
returneazărezultatullatamponulprimitalprocesuluirădăcină.
PașiidebazăaialgoritmuluiparaleldeagăsiprofiluldeechilibruStackelbergînjocurile
dinamicedetreinivelurisuntdescrisedupăcumurmează:
1)FolosindfuncțiileMPIMPI_comm_group,MPI_Group_inclșiMPI_Comm_create
creămnoulcomunicator,deexempluMPI_Comm_Slaveșinoulgrupdeprocese
MPI_Goup_Slave.NumărultotaldeprocesoarealeacestorcomunicatoriesteegalcuK*I.
Numaiprocesulacestuicomunicatorvaparticipalaimplementareasoftaalgoritmuluide
inducțieinversă.Pentru"paralelismuldedate"alalgoritmuluifolosimabordareadetransmiterea
mesajelor,implementatădefuncțiileMPIșiconstăînurmătoriipașidebază.
2)UnuldintreproceselecomunicatoruluiMPI_Comm_Slave(deexempluprocesulcu
rangulegalcuroot)ainițializatmatricile
K
IJK
IJK
IJK
ImK
ImK
ImK
1IK
1IK
1Il
nJl
nJl
nJl
nml
nml
nml
1nl
1nl
1n1
J11
J11
J11
m11
1m1
m11
111
111
11
c,b,ac,b,ac,b,ac,b,ac,b,ac,b,ac,b,ac,b,ac,b,a
șiutilizândfuncțiileMPIaudistribuitrândurileacestormatrici(unrândpefiecareproces)
tuturorproceselorcomunicatoruluiMPI_Comm_Slave.Acesteasepotfacedupăcumurmează:
2.1.UtilizațifuncțiileMPI_Type_struct,MPI_Type_commitșiMPI_Addresspentrua
construimatricea,fiecareelementalcăruiaesteotuplăaformuleik
ijk
ijk
ijc,b,a
unde ,,…,1Kk Ii,…,1si .,…,1JjAcestenoidatedetipderivatedelaMPIreduc
latența(Latențaestetimpulnecesarpentruatrimiteunmesajde8octețidelaunnodlaaltul
decomunicațiiînrețeautilizândrutineMPIdebază)decomunicareîntreprocese.
2.2.FuncțiaMPI_BcastdistribuitătuturorproceseazăvaloareaK,IșiJ.
2.3.FolosindfuncțiileMPI_Scatterdistribuimrândurileconstruiriimatriceiînpasul2.1
pentruprocesareagrupuluiMPI_Goup_Slave.Deci,fiecareprocescuikrang,(dacăse
foloseștecomunicatorulcutopologiaDecartes)sau ikrang*dinnumărultotalde
proceseK*Ivaprimidinprocescurădăcinăderangurmătorulvector
k
iJk
iJk
iJk
imk
imk
imk
1ik
1ik
1i c,b,ac,b,ac,b,a pentru ,,…,1Kk,Ii,…,1.Procesulcu
rangulikppentru ,,…,1Kk Ii,…,1 folosindvectorul k
iJk
imk
1ik
i c,…,c,…,cC,
46 k
iJk
imk
1ik
i b,…,b,…,bB, k
iJk
imk
1ik
i a,…,a,…,aA primitpotconstruivectorii,utilizațipentru
operațiiledereducere.
Astfel,paralelizareadateloralgoritmuluipentruagăsiprofiluldeechilibruStackelbergîn
jocuriledinamicedetreiniveluricufuncțiidiscretedeplatăsuntfinalizate.
"Paralelismulsarcinilor"alalgoritmuluideinducțieinversăesteimplementatsoftfolosind
operațiadereducere.Acestlucruesteprezentatînurmătoareleetape.
3)FolosindoperațiadereducereMPI_MAXLOCconstruimonouăoperațiedereducere
numităMPI_ALLMAXLOCpentruacalculatotmaximulglobalșitotindexulatașatlarangul
procesuluicareconținevaloareamaximă.Deci,totprocesulcurangulikp, ,,…,1Kk
Ii,…,1,folosindfuncțiaMPI_ReducecuoperațiadereducereMPI_ALLMAXLOCși
adresatamponuluitrimisreprezintăvectorulk
iCdeterminătoatevalorile k
njj*cmaxarg)i,k(j și
săstochezeacestevaloriînbuffer-ulprocesuluicurădăcinăderang.Pedealtăparte,folosind
operațiadereducereMPI_ALLMAXLOC,vomdeterminaelementulmaximșiindiciide
coloanăailiniilordinmatriceaurmătoarecurânduriK*IșicoloaneJ:
K
IJK
ImK
1Il
nJl
nml
1n1
J11
m11
11
ccccccccc
Deaceea,rezolvămsimultanproblemeledeoptimizarealeceluide-altreileaniveldeforma
extinsăajocului(veziFigura2).Astfel,folosindfuncțiaMPI_Reducecuoperațiadereducere
MPI_ALLMAXLOC,cuprocesulrangrootvafiobținutvectorulculungimeaK*Icuelemente
)I,K(j),n,K(j,),1,K(j,),I,l(j),n,l(j,),1,l(j,),I,1(j,),n,1(j,),1,1(jJ* * * * * * * * ** .Dupăaceasta,
folosindfuncțiaMPIMPI_Scatterfiecareproceseazăcurankp=k, ,,…,1Kk obținedela
procescurădăcinăderangvectorul )I,k(j),n,k(j,),1,k(j)k(J* * ** careseutilizeazăînetapa
următoare.
4)Pentrutoateproceselecurankrankp=k, ,,…,1KkfolosindfuncțiaMPI_Reduce
cuoperațiadereducereMPI_ALLMAXLOCșiadresatamponuluitrimisreprezintăprinvector
k
I,kIjk
n,knjk
1,kj1* * * b,,b,,b toateproceselecomunicatoruluiMPI_Comm_Slave
determinătoatevalorile k
)i,k(iji*
*bmaxarg)k(i șipăstrațiacestevaloriînbuffer-ulprocesului
rankroot.Încealaltăparte,folosindoperațiadereducereMPI_ALLMAXLOC,vomdetermina
elementulmaximșiindiciidecoloanăailiniilordinmatriceaurmătoarecurânduriKșicoloaneI:
47
T
K
I,KIjK
n,KnjK
1,Kj1l
I,lIjl
n,lnjl
1,lj11
1,1j11
n,1nj1
1,1j1
* * ** * ** * *
b b bb b bb b b
Cualtecuvinte,rezolvămconcomitentproblemeledeoptimizarealeceluide-aldoileanivelde
formăextinsăajocului(veziFigura3).NumărultotaldeprocesedeutilizareesteegalcuK.
Astfel,folosindfuncțiaMPI_ReducecuoperațiadereducereMPI_ALLMAXLOCseva
determinavectorullungimiiKcuelemente )K(i,),l(i,),1(iI**** caresuntstocateînmemoria
rădăciniiprocesului.
5)Procesulrankrootfolosindvectorii )K(i),…,l(i),…,1(iI**** delapasul4)și,
))I(i,K(j)),…,l(i,l(j)),…,1(i,1(j** ** **careesteobținutdinvectoruldinetapa3)realizează
pasulc)alalgoritmuluideinducțieinversășitipăreșteprofiluldeechilibruStackelberg
***j,i,k aljoculuidinamicdetreiniveluricudiscretfuncțiideplată.Pedealtăparte,
procesulrootdeterminăelementulmaximșiindiciaivectoruluiurmător(Figura4).
K
)I(*i,K*j)K(*il
)l(*i,l*j)l(*i1
)1(*i,1*j)1(*ia a a
Prinaceasta,descriereaalgoritmuluisetermină.Pentruevaluareaperformanțeiîntimpa
algoritmuluiparalelseutilizeazăurmătoareledouăcaracteristicinumerice:timpultotalde
rezolvatpeuncalculatorparalelcuprocesorPșiaccelerareaobținutăprinalgoritmulparalel.
Accelerarea)K(T)K(T)(S
PP ,undeT(K)denotăcomplexitateasecvențialăaalgoritmului,TP(K)
indicătimpulpentrurezolvareaproblemeifolosindalgoritmulparalel,măsoarăfactorulde
accelerareobținutdealgoritmulparalelcândsuntdisponibiliprocesoareleP.AiciKindica
dimensiuneadeintrareaproblemei.
Sădemonstrămteoremaurmătoaredesprecorectitudineaalgoritmuluiparaleldescrisînpașii1)
-5)șisăestimămtimpultotalșivitezapentruagăsiprofiluldeechilibruStackelbergînjocul
dinamiccutreiniveluricufuncțiidiscretedeplatăfolosindacestalgoritm.
Teorema.3.2.1.Algoritmulparalel,descrisdepașii1)-5),calculeazăînmodcorectprofilulde
echilibruStackelbergînjocuriledinamicedetreiniveluricufuncțiediscretedeplată.Acest
48algoritmruleazăla)JIK timpfolosindunnumărtotal)IK( deprocesoare.
Accelerareaalgoritmuluiparalelesteegalăcu
JIK)K(IKJIK
.
Demonstratie.Dovadacorectitudiniialgoritmuluiestesimplă.Săpresupunemcăalgoritmul
secvențialpentruagăsielementulmaximîntr-olistă k
iJk
imk
2ik
1ik
i c,…,c,…,c,cC este)J(.Apoi,
pasula)alalgoritmuluideinducțieinversăpentruoperațiiledesolicitare )JIK( dinamicăa
jocului.FolosindsistemulparalelcuprocesoareK*I(procesesaufire),variantaparalelăa
algoritmului,adicătreapta3),are)J(operațiuni.Similar,etapab)implementatăpesistemul
secvențialpreia)IK(operațiunile.SistemulparalelcuprocesorulK,pasul4)alalgoritmului
paralelia)I(.Înceledinurmă,etapac)seia)K(careesteegalăcucerereadeoperarea
pasului5).Prinurmare,algoritmulparaleldescrisdepașii1)-5)ia)JIK operațiifolosind
)IK(procese(procesoare).Accelerareaacestuialgoritmesteegalăcu
JIK)K(IKJIK)JI(S)IK( .
Descriereaprogramuluiparalelelaborat
Programulelaboratutilizeazăarhitecturamaster-slavepentruacalculaechilibrulStackelberg.
Astfel,procesulcuidentificatorulzeroinițializeazămatriceaprofiturilorșidistribuiesarcinile
celorlalteprocesedincomunicator.Matriceaprofituriloresteomatrice4-dimenională,iar
elementulA[i][j][k][l]reprezintăprofituljucătoruluicunumărullpentrustrategia(i,j,k).
LaprimaetapăprocesulmasterinițializeazămatriceaprofiturilorAșitransmitecelorlalte
procesedimensiunileacesteia.
Laadouaetapăserezolvăprimulpunctdinalgoritmuldescrismaisus.Astfel,matriceaAeste
împărțităîn sarcini,undeIșiJreprezintănumereledestrategiialeprimilordoijucători
respectiv.Procesulmasterdistribuieperândcâteosarcină(i,j)fiecăruiprocesslaveși
înregistreazărezultatul th aîntr-omatricebidimensionalăB.Lasfârșitulacesteietapese
obținematriceaBcareconținestrategiileoptimalepentrujucătorulaltreilea.
LaatreiaetapăprocesulmasterîmpartematricileAșiBînIsarcini.Acestesarcinisunt
distribuiteproceselorslave,iarînrezultatseobținevectorulCcustrategiileoptimaleale
jucătoruluialdoilea.Laaceastăetapăserezolvăaldoileapunctdinalgoritmuldescrismaisus.
Laapatraetapăprocesulmasterrezolvăaltreileapunctdinalgoritmuldescrismaisus,
determinândstrategiaoptimalăpentruprimuljucător.Înrezultatseobținenumărulicare
reprezintăstrategiadeechilibruaprimuluijucător,iarechilibrulStackelbergvafi(i,C[i],B[i,
49C[i]]).
Programulelaborateafosttestatpentruurmatoruljocdinamic
TextulintegralalprogramuluiinlimbajulC++esteprezentatinanexa.
50Concluziișirecomandări:
Lucrulasupratezeidelicențămi-aoferitposibilitateadea-misuplimentapregătirea
profesionalăcuoinstruireavansatăindomeniuldeinteresștiințific,șianumecelalmatematicii
aplicate.IncadrulCECMIafostcreatunLaboratorpentruutilizareasistemelorparalelede
calculdetipcluster.Datorităacestuilaboratoramimplementatinprocesuldeinstruireși
cercetarenoiletehnologiipentruelaborareaalgoritmuluiparalelșiexecutarealuipesisteme
localedetipcluster.AmutilizatșianalizatcumlucreazăfuncțiileMPIutilizatelaparalelizarea
datelorinprogrameparalele.Cunoștințeleobținutem-auajutatlaelaborareaprogramuluiparalel
pentrudeterminareasoluțiilorajocurilordinamicebayesiene,rezultatulprogramuluieste
prezentatmaisus.Programulobținutușureazășiminimizeazătimpuldestinatcalculelor,ceeace
eunmarebeneficiuînzilelenoastre.
51Bibliografie:
1.VonStackelbergH.,TheTheoryoftheMarketEconomy,OxfordUniversityPress,Oxford.
England.1952.
2.HancuBoris,ThefullsetofStackelbergequilibriumprofilesinthemultileveldynamic
games.The33-rdAnnualCongressoftheAmericanRomanianAcademyofArtsandSciences
(ARA).Sibiu,Romania.June02-07,2009.Proceedings,VolumeII,PolytechnicInternational
Press,Montreal,Quebec,2009,pp.301-303.
3.MPI-2:ExtensionstotheMessage-PassingInterface.MessagePassingInterfaceForum.
November15,2003
4.JosephJaja.AnIntroductiontoParallelAlgorithms.Addison-WesleyPublishingCompany,
NewYork.1992.
52Anexă
Programuldebaza.
#include<iostream>
#include<mpi.h>
#include<vector>
#include<fstream>
#include"stack_types.h"
usingstd::vector;
usingstd::cout;
usingstd::endl;
usingstd::cerr;
usingstd::ifstream;
#defineTAG_WORK11
#defineTAG_WORK22
#defineTAG_STOP13
#defineTAG_STOP24
#defineTAG_DIE 5
#defineTAG_WORK226
#pragmacomment(lib,"mpi.lib")
//typedefintElemType[3];
voidMaster(intargc,char*argv[]);
voidSlave();
intmain(intargc,char*argv[])
{
intrank=0;
MPI_Init(&argc,&argv);
MPI_Comm_rank(MPI_COMM_WORLD,&rank);
if(rank==0)
{
Master(argc,argv);
}
else
{
Slave();
}
MPI_Finalize();
return0;
}
boolReadMatrix(PayoffMatrix*pm,constchar*fileName)
{
if(pm==NULL)
returnfalse;
if(fileName==NULL)
returnfalse;
intn1=0,n2=0,n3=0;
int*ptr=NULL;
ifstreamstream;
stream.open(fileName);
stream>>n1>>n2>>n3;
pm->Resize(n1,n2,n3);
ptr=pm->GetPtr();
for(inti1=0;i1<n1;++i1)
for(inti2=0;i2<n2;++i2)
53for(inti3=0;i3<n3;++i3)
{
stream>>ptr[0]>>ptr[1]>>ptr[2];
ptr+=3;
}
stream.close();
returntrue;
}
voidPrintSyntax();
voidMaster(intargc,char*argv[])
{
PayoffMatrixpm;//Payoffmatrix.
inttmp=0;
intnp=0; //Numberofprocesses.
MPI_Statusstatus;
Result1result1;//Step1result.
Result2result2;//Step2result.
MPI_Comm_size(MPI_COMM_WORLD,&np);
if(np<2)
{
cerr<<"Programultrebuierulatpecelputin2procese."<<endl;
return;
}
if(argc!=2)
{
PrintSyntax();
tmp=0;
MPI_Bcast(&tmp,1,MPI_INT,0,MPI_COMM_WORLD);
MPI_Bcast(&tmp,1,MPI_INT,0,MPI_COMM_WORLD);
MPI_Bcast(&tmp,1,MPI_INT,0,MPI_COMM_WORLD);
return;
}
if(!ReadMatrix(&pm,argv[1]))
{
cerr<<"Matriceanupoateficitita."<<endl;
tmp=0;
MPI_Bcast(&tmp,1,MPI_INT,0,MPI_COMM_WORLD);
MPI_Bcast(&tmp,1,MPI_INT,0,MPI_COMM_WORLD);
MPI_Bcast(&tmp,1,MPI_INT,0,MPI_COMM_WORLD);
return;
}
#pragmaregionBroadcastpayoffmatrixdimensions
tmp=pm.N1();
MPI_Bcast(&tmp,1,MPI_INT,0,MPI_COMM_WORLD);
tmp=pm.N2();
MPI_Bcast(&tmp,1,MPI_INT,0,MPI_COMM_WORLD);
tmp=pm.N3();
MPI_Bcast(&tmp,1,MPI_INT,0,MPI_COMM_WORLD);
#pragmaendregion
#pragmaregionStep1
{
54vector<Task1>tasks;
Task1tmpTask;
TaskScheduler1ts(&pm);
MPI_DatatypesendType=MPI_DATATYPE_NULL;
MPI_Type_vector(pm.N3(),1,3,MPI_INT,&sendType);
MPI_Type_commit(&sendType);
result1.Resize(pm.N1(),pm.N2());
for(inti=1;i<np&&ts.GetNextTask(&tmpTask);++i)
{
tasks.push_back(tmpTask);
MPI_Send(tmpTask.buffer,1,sendType,i,TAG_WORK1,
MPI_COMM_WORLD);
}
while(ts.GetNextTask(&tmpTask))
{
MPI_Recv(&tmp,1,MPI_INT,MPI_ANY_SOURCE,MPI_ANY_TAG,
MPI_COMM_WORLD,&status);
*result1.GetPtr(tasks[status.MPI_SOURCE-1].index1,
tasks[status.MPI_SOURCE-1].index2)=tmp;
tasks[status.MPI_SOURCE-1]=tmpTask;
MPI_Send(tmpTask.buffer,1,sendType,status.MPI_SOURCE,
TAG_WORK1,MPI_COMM_WORLD);
}
for(inti=0;i<tasks.size();++i)
{
MPI_Recv(&tmp,1,MPI_INT,MPI_ANY_SOURCE,MPI_ANY_TAG,
MPI_COMM_WORLD,&status);
*result1.GetPtr(tasks[status.MPI_SOURCE-1].index1,
tasks[status.MPI_SOURCE-1].index2)=tmp;
}
MPI_Type_free(&sendType);
for(intrank=1;rank<np;++rank)
{
MPI_Send(NULL,0,MPI_INT,rank,TAG_STOP1,
MPI_COMM_WORLD);
}
}
#pragmaendregion
#pragmaregionStep2
{
vector<Task2>tasks;
Task2tmpTask;
TaskScheduler2ts(&pm,&result1);
MPI_DatatypesendType=MPI_DATATYPE_NULL;
MPI_Type_vector(pm.N2()*pm.N3(),1,3,MPI_INT,&sendType);
MPI_Type_commit(&sendType);
result2.Resize(pm.N1());
for(inti=1;i<np&&ts.GetNextTask(&tmpTask);++i)
{
tasks.push_back(tmpTask);
MPI_Send(tmpTask.values2,1,sendType,i,TAG_WORK2,
MPI_COMM_WORLD);
MPI_Send(tmpTask.positions3,pm.N2(),MPI_INT,i,TAG_WORK22,
MPI_COMM_WORLD);
}
55while(ts.GetNextTask(&tmpTask))
{
MPI_Recv(&tmp,1,MPI_INT,MPI_ANY_SOURCE,MPI_ANY_TAG,
MPI_COMM_WORLD,&status);
*result2.GetPtr(tasks[status.MPI_SOURCE-1].index1)=tmp;
tasks[status.MPI_SOURCE-1]=tmpTask;
MPI_Send(tmpTask.values2,1,sendType,status.MPI_SOURCE,
TAG_WORK2,MPI_COMM_WORLD);
MPI_Send(tmpTask.positions3,pm.N2(),MPI_INT,status.MPI_SOURCE,
TAG_WORK22,MPI_COMM_WORLD);
}
for(inti=0;i<tasks.size();++i)
{
MPI_Recv(&tmp,1,MPI_INT,MPI_ANY_SOURCE,MPI_ANY_TAG,
MPI_COMM_WORLD,&status);
*result2.GetPtr(tasks[status.MPI_SOURCE-1].index1)=tmp;
}
MPI_Type_free(&sendType);
for(intrank=1;rank<np;++rank)
{
MPI_Send(NULL,0,MPI_INT,rank,TAG_STOP2,
MPI_COMM_WORLD);
}
}
#pragmaendregion
#pragmaregionStep3
{
intindex1=0;
intindex2=*result2.GetPtr(index1);
intindex3=*result1.GetPtr(index1,index2);
intmax=pm.GetPtr(index1,index2,index3)[0];
for(inti1=1;i1<pm.N1();++i1)
{
inti2=*result2.GetPtr(i1);
inti3=*result1.GetPtr(i1,i2);
intm=pm.GetPtr(i1,i2,i3)[0];
if(m>max)
{
max=m;
index1=i1;
index2=i2;
index3=i3;
}
}
//TheStackelbergequilibriumis(index1,index2,index3).
cout<<"EchilibrulStackelbergeste:("<<index1<<","<<index2<<","<<
index3<<")cuprofitul("<<
pm.GetPtr(index1,index2,index3)[0]<<","<<
pm.GetPtr(index1,index2,index3)[1]<<","<<
pm.GetPtr(index1,index2,index3)[2]<<")."<<endl;
}
#pragmaendregion
}
intSolveTask1(int*player3Payoff,intn3)
56{
if(player3Payoff==NULL)
return-1;
if(n3<=0)
return-1;
intpos=0;
intmax=player3Payoff[pos];
for(inti=1;i<n3;++i)
{
if(player3Payoff[i]>max)
{
max=player3Payoff[i];
pos=i;
}
}
returnpos;
}
intSolveTask2(int*player2Payoff,int*player3Strategy,intn2,intn3)
{
if(player2Payoff==NULL)
return-1;
if(player3Strategy==NULL)
return-1;
if(n2<=0)
return-1;
if(n3<=0)
return-1;
intpos=0;
intmax=player2Payoff[pos*n3+player3Strategy[pos]];
for(inti=1;i<n2;++i)
{
if(player2Payoff[i*n3+player3Strategy[i]]>max)
{
max=player2Payoff[i*n3+player3Strategy[i]];
pos=i;
}
}
returnpos;
}
voidSlave()
{
intn1=0,n2=0,n3=0;
MPI_Bcast(&n1,1,MPI_INT,0,MPI_COMM_WORLD);
MPI_Bcast(&n2,1,MPI_INT,0,MPI_COMM_WORLD);
MPI_Bcast(&n3,1,MPI_INT,0,MPI_COMM_WORLD);
if(n1<=0||n2<=0||n3<=0)
return;
#pragmaregionSolveTask1
{
int*player3Payoff=newint[n3];
intmax=0;
intpos=0;
MPI_Statusstatus;
boolstop=false;
while(!stop)
57{
MPI_Recv(player3Payoff,n3,MPI_INT,0,MPI_ANY_TAG,
MPI_COMM_WORLD,&status);
switch(status.MPI_TAG)
{
caseTAG_DIE:
delete[]player3Payoff;
return;
caseTAG_STOP1:
delete[]player3Payoff;
stop=true;
break;
caseTAG_WORK1:
{
intpos=SolveTask1(player3Payoff,n3);
MPI_Send(&pos,1,MPI_INT,0,0,MPI_COMM_WORLD);
}
break;
default:
//Unexpectedtag.
exit(1);
}
}
}
#pragmaendregion
#pragmaregionSolveTask2
{
int*player2Payoff=newint[n2*n3];
int*player3Strategy=newint[n2];
MPI_Statusstatus;
boolstop=false;
while(!stop)
{
MPI_Recv(player2Payoff,n2*n3,MPI_INT,0,MPI_ANY_TAG,
MPI_COMM_WORLD,&status);
switch(status.MPI_TAG)
{
caseTAG_DIE:
delete[]player2Payoff;
delete[]player3Strategy;
return;
caseTAG_STOP2:
delete[]player2Payoff;
delete[]player3Strategy;
stop=true;
break;
caseTAG_WORK2:
{
intpos=-1;
MPI_Recv(player3Strategy,n2,MPI_INT,0,
TAG_WORK22,MPI_COMM_WORLD,&status);
pos=SolveTask2(player2Payoff,player3Strategy,n2,n3);
MPI_Send(&pos,1,MPI_INT,0,0,MPI_COMM_WORLD);
}
break;
58default:
exit(1);
}
}
}
#pragmaendregion
}
voidPrintSyntax()
{
cerr<<"Sintaxa:stackelbergmatrice"<<endl;
cerr<<"\tmatrice-fisierulcumatriceaprofiturilor"<<endl;
Programulauxiliar
ifndef_STACKELBERG_TYPES_H
#define_STACKELBERG_TYPES_H
#include"mpi.h"
structPayoffMatrix
{
//Classvariables.
private:
int*_data;
int_n1;
int_n2;
int_n3;
//Publicmethods.
public:
PayoffMatrix(intn1=0,intn2=0,intn3=0);
int*GetPtr(intindex1=0,intindex2=0,intindex3=0);
voidResize(intn1,intn2,intn3);
intN1()const{return_n1;}
intN2()const{return_n2;}
intN3()const{return_n3;}
~PayoffMatrix();
//Privatemethods.
private:
voidFree();
};
structTask1
{
void*buffer;
intindex1;
intindex2;
Task1()
:buffer(NULL),index1(0),index2(0)
{}
};
classTaskScheduler1
{
private:
PayoffMatrix*_payoffMatrix;
int_index1;
int_index2;
59public:
TaskScheduler1(PayoffMatrix*pm=NULL);
boolGetNextTask(Task1*task);
voidSetMatrix(PayoffMatrix*pm);
PayoffMatrix*GetMatrix()const;
voidReset();
};
classResult1
{
private:
int*_data;
int_n1;
int_n2;
public:
Result1(intn1=0,intn2=0);
~Result1();
voidResize(intn1,intn2);
intN1()const{return_n1;}
intN2()const{return_n2;}
int*GetPtr(intindex1=0,intindex2=0);
private:
voidFree();
};
structTask2
{
int*values2; //ValorileA[i,j,k]pentrujucatorul2pentru[i=index1].
int*positions3;//Pozitiiledemaximalejucatorului3pentru[i=index1,j=0..n2-1].
intindex1;
Task2()
:values2(NULL),positions3(NULL),index1(0)
{}
};
classTaskScheduler2
{
private:
PayoffMatrix*_payoffMatrix;
Result1*_result1;
int_index1;
public:
TaskScheduler2(PayoffMatrix*pm=NULL,Result1*result1=NULL);
boolGetNextTask(Task2*task);
PayoffMatrix*GetPayoffMatrix()const;
voidSetPayoffMatrix(PayoffMatrix*pm);
Result1*GetStep1Result()const;
voidSetStep1Result(Result1*result);
voidReset();
};
classResult2
{
private:
int*_data;
int_n1;
public:
Result2(intn1=0);
60~Result2();
voidResize(intn1);
intN1()const{return_n1;}
int*GetPtr(intindex1=0);
private:
voidFree();
};
#endif
61
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: I.ELEMENTEDINTEORIAJOCURILORNON-COOPERATISTE…5 [622696] (ID: 622696)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
