Back to Annotated Deep Learning Paper Implementations

අසම්පූර්ණතොරතුරු සහිත ක්රීඩා වල අවම කිරීම කනගාටු කරන්න (CFR)

docs/si/cfr/index.html

latest34.9 KB
Original Source

homecfr

[View code on Github](https://github.com/labmlai/annotated_deep_learning_paper_implementations/tree/master/labml_nn/cfr/ init.py)

#

අසම්පූර්ණතොරතුරු සහිත ක්රීඩා වල අවම කිරීම කනගාටු කරන්න (CFR)

කඩදාසි කනගාටුව අසම්පූර්ණ තොරතුරු සහිත ක්රීඩා වල අවම කිරීම ප්රතිවිරුද්ධ කනගාටුව හඳුන්වා දෙන අතර ස්වයං නාට්යය තුළින් ප්රතිවිරුද්ධ කනගාටුව අවම කිරීම නැෂ් සමතුලිතතාවයට ළඟා වීමට භාවිතා කළ හැකි ආකාරය. ඇල්ගොරිතම හැඳින්වෙන්නේ ප්රතිවිරුද්ධ කනගාටුව අවම කිරීම ( CFR ) ලෙසිනි.

පුළුල් ක්රීඩා වල කනගාටුව අවම කිරීම සඳහා මොන්ටේ කාලෝ නියැදීම කඩදාසි මොන්ටේ කාලෝ ප්රතිවිරුද්ධ කනගාටුව අවම කිරීම ( MCCFR ) හඳුන්වා දෙයි, එහිදී අපි ක්රීඩා ගසෙන් සාම්පල ලබාගෙන කනගාටුව තක්සේරු කරමු.

අපගේපයිතන් ක්රියාත්මක කිරීම නිබන්ධනයක් මෙන් පහසුවෙන් තේරුම් ගැනීමට අපි උත්සාහ කළෙමු. අපි එය ඉතා සරල අසම්පූර්ණ තොරතුරු ක්රීඩාවක් මත ධාවනය කරමු Kuhn පෝකර් ගහන්න දන්නවානම්.

ට්විටර් නූල්

හැඳින්වීම

අපිඅහම්බෙන් නියැදීම් (CS) සමඟ මොන්ටේ කාලෝ ප්රතිවිරුද්ධ කනගාටුව අවම කිරීම (MCCFR) ක්රියාත්මක කරමු. එය iteratively, සියලු ක්රීඩකයා ක්රියා උත්සාහ ක්රීඩාව ගස කොටසක් ගවේෂණය, නමුත් අවස්ථාවක් සිදුවීම් නියැදීම්. අවස්ථාවක් සිදුවීම් කාඩ්පත් ගනුදෙනු වැනි දේවල් ය; ඔවුන් නැවත එක් වරක් sampled තබා ඇත. එවිට එය ගණනය කරන්නේ, එක් එක් ක්රියාව සඳහා, එම පියවර ගැනීම වෙනුවට වර්තමාන උපායමාර්ගය අනුගමනය කිරීමේ කනගාටුව . ඉන්පසු එය කනගාටුව ගැලපීම භාවිතා කරමින් ඊළඟ පුනරාවර්තනය සඳහා මෙම කනගාටු මත පදනම් වූ උපාය යාවත්කාලීන කරයි. අවසාන වශයෙන්, එය පුනරාවර්තන පුරා උපාය මාර්ගවල සාමාන්යය ගණනය කරයි, එය අප ප්රමාණවත් පුනරාවර්තන දිව ගියහොත් නැෂ් සමතුලිතතාවයට ඉතා සමීප වේ.

අපිමුලින්ම ගණිතමය අංකනය සහ න්යාය හඳුන්වා දෙන්නෙමු.

ක්රීඩකයා

ක්රීඩකයෙක්විසින් දැක්වේ i∈N, ක්රීඩකයන් සමූහයක් N කොහෙද.

ඉතිහාසය

ඉතිහාසය h∈H යනු ඇතුළු ක්රියා වල අනුක්රමයකි අවස්ථාවක් සිදුවීම්, H එය සියලු ඉතිහාසයන්ගේ සමූහයයි.

Z⊆H යනු පර්යන්ත ඉතිහාස සමූහයයි (ක්රීඩාව අවසන්).

ක්රියාව

ක්රියාව a, පර්යන්ත h∈H නොවන ඉතිහාසයක් A(h)=a:(h,a)∈Hකොහේද?

තොරතුරු කට්ටලය Ii​

ක්රීඩකයා Ii​∈Ii​ සඳහා සකසා ඇති තොරතුරු ඉතිහාසයකට සමාන i වන h∈H නමුත් ක්රීඩකයාට පෙනෙන ක්රියාවන් පමණක් අඩංගු වේ i. එනම්, ඉතිහාසයේ ප්රතිවිරුද්ධ ක්රීඩකයාට ගනුදෙනු h කරන කාඩ්පත් වැනි ක්රියාවන්/සිදුවීම් අඩංගු වන අතර ඒවා Ii​ නොලැබෙනු ඇත.

Ii​ ක්රීඩකයාගේ තොරතුරු කොටස ලෙස හැඳින්වේ i.

h∈I යනු ලබා දී ඇති තොරතුරු කට්ටලයකට අයත් සියලු ඉතිහාස සමූහයයි; එනම් එම සියලු ඉතිහාසයන් ක්රීඩකයාගේ ඇසට සමාන වේ.

උපායමාර්ගය

ක්රීඩකයාගේඋපාය මාර්ගය i, ක්රියාවන්ට වඩා බෙදා σi​∈Σi​ හැරීමකි A(Ii​), ක්රීඩකයා සඳහා සියලු උපාය මාර්ග සමූහයක් Σi​ කොහේද i. t-th පුනරාවර්තනය පිළිබඳ උපාය මාර්ග මගින් σti​දැක්වේ.

මූලෝපායඅර්ථ දක්වා ඇත්තේ a දී ඇති තොරතුරු කට්ටලයක් සඳහා ක්රියාමාර්ගයක් ගැනීමේ සම්භාවිතාවක් ලෙස ය I,

σi​(I)(a)

σ සියලුම ක්රීඩකයන්ගේ උපාය මාර්ග වලින් සමන්විත උපාය මාර්ග පැතිකඩයි σ1​,σ2​,…

σ−i​ හැර සියලුම ක්රීඩකයන්ගේ උපාය මාර්ග වේ σi​

ඉතිහාසයේසම්භාවිතාව

πσ(h) උපාය මාර්ග පැතිකඩ h සමඟ ඉතිහාසය කරා ළඟා වීමේ සම්භාවිතාව σවේ. πσ(h)−i​ iක්රීඩකයාගේ දායකත්වය h නොමැතිව ළඟා වීමේ සම්භාවිතාව; එනම් i ක්රීඩකයා අනුගමනය කළ යුතු ක්රියාමාර්ග h සම්භාවිතාවක් සමඟ 1.

πσ(h)i​ පමණක් ක්රීඩකයා iදායකත්වය h සමග ළඟා වීමේ සම්භාවිතාව වේ. එනම්, πσ(h)=πσ(h)i​πσ(h)−i​

තොරතුරුකට්ටලයක් වෙත ළඟා වීමේ I සම්භාවිතාව, πσ(I)=h∈I∑​πσ(h)

උපයෝගීතාව(ගෙවන්න)

පර්යන්ත උපයෝගීතාව යනු පර්යන්ත ඉතිහාසයක් i සඳහා ක්රීඩකයෙකුගේ උපයෝගීතාව (හෝ ගෙවීම) hය.

ui​(h) කොහේද h∈Z

ui​(σ) උපාය මාර්ග පැතිකඩ i සහිත ක්රීඩකයා සඳහා අපේක්ෂිත උපයෝගීතාව (ගෙවීම්) σවේ.

ui​(σ)=h∈Z∑​ui​(h)πσ(h)

නැෂ්සමතුලිතතාවය

නැෂ්සමතුලිතතාවය යනු ක්රීඩකයින්ගෙන් කිසිවෙකුට ඔවුන්ගේ උපාය මාර්ගය වෙනස් කිරීමෙන් ඔවුන්ගේ අපේක්ෂිත උපයෝගීතාව (හෝ ගෙවීම්) වැඩි කළ නොහැකි රාජ්යයකි.

ක්රීඩකයන්දෙදෙනෙකු සඳහා, නැෂ් සමතුලිතතාවය යනු උපාය මාර්ගික පැතිකඩකි

u1​(σ)u2​(σ)​≥maxσ1′​∈Σ1​​u1​(σ1′​,σ2​)≥maxσ2′​∈Σ2​​u1​(σ1​,σ2′​)​

ϵ-නැෂ් සමතුලිතතාවය,

u1​(σ)+ϵu2​(σ)+ϵ​≥maxσ1′​∈Σ1​​u1​(σ1′​,σ2​)≥maxσ2′​∈Σ2​​u1​(σ1​,σ2′​)​

අවමකිරීම කනගාටු

කනගාටුවවන්නේ උපයෝගීතාව (හෝ ගෙවීම) ක්රීඩකයාට නොලැබුනේ ඇය ප්රශස්ත උපාය මාර්ගයක් අනුගමනය නොකිරීම හෝ හොඳම පියවර ගැනීම නිසාය.

ක්රීඩකයා i සඳහා සාමාන්ය සමස්ත කනගාටුව පුනරාවර්තන සෑම T වටයකම ප්රශස්ත උපාය අනුගමනය නොකිරීම පිළිබඳ සාමාන්ය කනගාටුවයි.

RiT​=T1​maxσi∗​∈Σi​​t=1∑T​(ui​(σi∗​,σt−i​)−ui​(σt))

පුනරාවර්තනයේසියලුම ක්රීඩකයින්ගේ උපාය මාර්ග පැතිකඩ σt කොහේද t, සහ

(σi∗​,σt−i​)

යනු iක්රීඩකයාගේ උපාය σt සමඟ ප්රතිස්ථාපනය කරන ලද උපාය σi∗​මාර්ගයයි.

සාමාන්යඋපායමාර්ගය වන්නේ සෑම වටයකදීම අනුගමනය කරන උපාය මාර්ගවල සාමාන්යයයි I∈I,a∈A(I)

σˉiT​(I)(a)=∑t=1T​πiσt​(I)∑t=1T​πiσt​(I)σt(I)(a)​

ප්රශස්තඋපායමාර්ගය සමඟ සෙල්ලම් නොකිරීමේ මධ්යන්ය කනගාටුව එයයි.

සියලුමක්රීඩකයින් RiT​<ϵ සඳහා නම් 2ϵ-නැෂ් සමතුලිතතාවයකි. σˉiT​(I)(a)

RiT​RiT​​<ϵ=T1​maxσi∗​∈Σi​​t=1∑T​(ui​(σi∗​,σt−i​)−ui​(σt))=T1​maxσi∗​∈Σi​​t=1∑T​ui​(σi∗​,σt−i​)−T1​t=1∑T​ui​(σt)<ϵ​

එයශුන්ය මුදලක් ක්රීඩාවක් u1​=−u2​ බැවින්, අපට එකතු කළ හැකි R1T​ RiT​ අතර දෙවන වාරය අවලංගු වේ.

2ϵ​>T1​maxσ1∗​∈Σ1​​t=1∑T​u1​(σ1∗​,σt−1​)+T1​maxσ2∗​∈Σ2​​t=1∑T​u2​(σ2∗​,σt−2​)​උපාය මාර්ග

සමූහයක් පුරා උපයෝගිතා වල සාමාන්යය සාමාන්ය උපාය මාර්ගයේ උපයෝගීතාවයට සමාන වේ.

T1​t=1∑T​ui​(σt)=ui​(σˉT)

එබැවින්,

2ϵ​>maxσ1∗​∈Σ1​​u1​(σ1∗​,σˉ−1T​)+maxσ2∗​∈Σ2​​u2​(σ2∗​,σˉ−2T​)​

අර්ථදැක්වීමෙන් max, maxσ2∗​∈Σ2​​u2​(σ2∗​,σˉ−2T​)≥u2​(σˉT)=−u1​(σˉT)

එවිට,

2ϵu1​(σˉT)+2ϵ​>maxσ1∗​∈Σ1​​u1​(σ1∗​,σˉ−1T​)+−u1​(σˉT)>maxσ1∗​∈Σ1​​u1​(σ1∗​,σˉ−1T​)​

මෙය 2ϵ-නැෂ් සමතුලිතතාවයයි. ඔබට ඒ හා සමානව ක්රීඩකයින් 2 කට වඩා ඇති ක්රීඩා සඳහා ඔප්පු කළ හැකිය.

එබැවින්නැෂ් සමතුලිතතාවයකට සමීප RiT​ වීමට අප අවම කළ යුතුය.

ප්රතිවිරුද්ධකනගාටුව

Counterfactualඅගය vi​(σ,I) ක්රීඩකයා ළඟා වීමට i උත්සාහ i නම් ක්රීඩකයා සඳහා අපේක්ෂිත උපයෝගීතාව I (ක්රියා ගෙන ක සම්භාවිතාව I සමග ප්රමුඛ 1).

vi​(σ,I)=z∈ZI​∑​πσ−i​(z[I])πσ(z[I],z)ui​(z)

පර්යන්තඉතිහාස කට්ටලය වෙත ළඟා විය හැකි Iඅතර z[I] එය z දක්වා උපසර්ගය වේ ZI​ I. πσ(z[I],z) සිට z වෙත ළඟා වීමේ සම්භාවිතාව z[I]වේ.

ක්ෂණිකප්රතිවිරුද්ධ කනගාටුව නම්,

Ri,immT​(I)=maxa∈AI​Ri,immT​(I,a)

කොහේද

Ri,immT​(I)=T1​t=1∑T​(vi​(σt∣I→a​,I)−vi​(σt,I))

තොරතුරුකට්ටලයේ σ∣I→a​ සෑම විටම පියවර a ගැනීම වෙනස් කිරීම σ සමඟ උපාය පැතිකඩ Iකොහේද?

පත්රිකාව එය සනාථ කරයි (ප්රමේයය 3),

RiT​≤I∈I∑​Ri,immT,+​(I) කොහේද Ri,immT,+​(I)=max(Ri,immT​(I),0)

කනගාටුගැලපීම

උපායමාර්ගයගණනය කරනු ලබන්නේ කනගාටු ගැලපීම භාවිතා කරමිනි.

එක්එක් තොරතුරු කට්ටලය සහ ක්රියාකාරී යුගලය සඳහා කනගාටුව පවත්වා ගෙන RiT​(I,a) යනු ලැබේ,

rit​(I,a)RiT​(I,a)​=vi​(σt∣I→a​,I)−vi​(σt,I)=T1​t=1∑T​rit​(I,a)​

උපායමාර්ගයගණනය කරනු ලබන්නේ කනගාටු ගැලපීමෙන්,

σi​T+1(I)(a)=⎩⎨⎧​∑a′∈A(I)​RiT,+​(I,a′)RiT,+​(I,a)​,∣A(I)∣1​,​if∑a′∈A(I)​RiT,+​(I,a′)>0otherwise​​

කොහේද RiT,+​(I,a)=max(RiT​(I,a),0)

කඩදාසි අසම්පූර්ණ තොරතුරු සහිත ක්රීඩා වල කනගාටුව අවම කිරීම ඉහත සමීකරණයට අනුව උපාය මාර්ගය තෝරා RiT​ ගන්නේ නම් ඊට සමානුපාතිකව කුඩා වන බව ඔප්පු කරයි T​1​, එබැවින් ළඟා වේ ϵ-නෂ් සමතුලිතතාවය.

මොන්ටේකාලෝ CFR (MCCFR)

පරිගණකකරණයටඑක් එක් පුනරාවර්තනයේ සම්පූර්ණ ක්රීඩා ගස පුළුල් කිරීම rit​(I,a) අවශ්ය වේ.

පුළුල් ක්රීඩා වල කනගාටුව අවම කිරීම සඳහා කඩදාසි මොන්ටේ කාලෝ නියැදීම අපට ක්රීඩා ගසෙන් සාම්පල ලබා ගත හැකි අතර කනගාටුව තක්සේරු කළ හැකිය.

Q=Q1​,…,Qr​ යනු උප කට්ටල සමූහයකි Z (Qj​⊆Z) එහිදී අපි පුනරාවර්තනයක තනි බ්ලොක් Qj​ එකක් පමණක් දෙස බලමු. සියලුම උප කුලවල සංගමය විහිදේ Z (Q1​∩…∩Qr​=Z). qj​ බ්ලොක් තෝරා ගැනීමේ සම්භාවිතාව Qj​.

q(z) වත්මන් පුනරාවර්තනයේ z දී තෝරා ගැනීමේ සම්භාවිතාව; i.e. q(z)=∑j:z∈Qj​​qj​ - qj​ කොතැනද එකතුව z∈Qj​.

එවිටඅපි වාරණ සිට sampled counterfactual අගය ලබා j,

v~(σ,I∣j)=z∈Qj​∑​q(z)1​πσ−i​(z[I])πσ(z[I],z)ui​(z)

කඩදාසිබව පෙන්නුම්

Ej∼qj​​[v~(σ,I∣j)]=vi​(σ,I)

සරලසාක්ෂියක් සමඟ.

එබැවින්අපට ක්රීඩා ගසේ කොටසක් සාම්පල ගත කර කනගාටු ගණනය කළ හැකිය. කනගාටුව පිළිබඳ ඇස්තමේන්තුවක් අපි ගණනය කරමු

rit​(I,a)=vi​(σt∣I→a​,I)−v~i​(σt,I)

එක්එක් පුනරාවර්තනයේ උපාය σi​T+1(I)(a) යාවත්කාලීන කිරීමට RiT​(I,a) සහ ගණනය කිරීමට එය භාවිතා කරන්න. අවසාන වශයෙන්, අපි සමස්ත සාමාන්ය උපාය ගණනය කරමු σˉiT​(I)(a).

මෙන්න කුහ්න් පෝකර් මත CFR උත්සාහ කිරීමට Kuhn පෝකර් ක්රියාත්මක කිරීම.

අපි

කේතයට කිමිදෙමු!

328fromtypingimportNewType,Dict,List,Callable,cast329330fromlabmlimportmonit,tracker,logger,experiment331fromlabml.configsimportBaseConfigs,option

#

ක්රීඩකයන්ගේකට්ටලය i∈N N කොහෙද ක්රීඩකයෙක්

334Player=NewType('Player',int)

#

ක්රියාව a, පර්යන්ත h∈H නොවන ඉතිහාසයක් A(h)=a:(h,a)∈H කොහේද?

336Action=NewType('Action',str)

#

ඉතිහාසය

ඉතිහාසය h∈H යනු ඇතුළු ක්රියා වල අනුක්රමයකි අවස්ථාවක් සිදුවීම්, H එය සියලු ඉතිහාසයන්ගේ සමූහයයි.

මෙමපන්තිය ක්රීඩා විශේෂිත තර්කනය සමඟ දීර් can කළ යුතුය.

339classHistory:

#

එයපර්යන්ත ඉතිහාසයක් වේවා; එනම් ක්රීඩාව අවසන්. h∈Z

351defis\_terminal(self):

#

356raiseNotImplementedError()

#

පර්යන්ත ඉතිහාසයක් i සඳහා ක්රීඩකයාගේ උපයෝගීතාව. ui​(h) කොහේද h∈Z

358defterminal\_utility(self,i:Player)-\>float:

#

364raiseNotImplementedError()

#

වත්මන්ක්රීඩකයා ලබා ගන්න, විසින් දැක්වේ P(h), එහිදී ක්රීඩකයා උත්සවය ලෙස P හැඳින්වේ.

වර්තමාන c සිදුවීම අවස්ථාවක් අවස්ථාවක් බව P(h)=c එයින් අදහස් කරන්නේ නම්. කාඩ්පත් ගනුදෙනු කිරීම හෝ පෝකර් වල පොදු කාඩ්පත් විවෘත කිරීම වැනි දෙයක්.

366defplayer(self)-\>Player:

#

373raiseNotImplementedError()

#

ඊළඟපියවර අහම්බෙන් පියවරක් වේවා; නව කාඩ්පතක් ගනුදෙනු කිරීම වැනි දෙයක්. P(h)=c

375defis\_chance(self)-\>bool:

#

380raiseNotImplementedError()

#

කවදාදඅවස්ථාවක් සාම්පලය P(h)=c.

382defsample\_chance(self)-\>Action:

#

386raiseNotImplementedError()

#

ඉතිහාසයටක්රියාවක් එක් කරන්න.

388def\_\_add\_\_(self,action:Action):

#

392raiseNotImplementedError()

#

වත්මන්ක්රීඩකයා සඳහා තොරතුරු ලබා ගන්න

394definfo\_set\_key(self)-\>str:

#

398raiseNotImplementedError

#

වත්මන්ක්රීඩකයා සඳහා නව තොරතුරු කට්ටලයක් සාදන්න

400defnew\_info\_set(self)-\>'InfoSet':

#

404raiseNotImplementedError()

#

මානවකියවිය හැකි නිරූපණය

406def\_\_repr\_\_(self):

#

410raiseNotImplementedError()

#

තොරතුරුකට්ටලය Ii​

413classInfoSet:

#

අද්විතීයයතුර තොරතුරු කට්ටලය හඳුනා ගැනීම

421key:str

#

σi​, ක්රීඩකයාගේ උපාය i

423strategy:Dict[Action,float]

#

එක්එක් පියවර නොගැනීම පිළිබඳ සම්පූර්ණ කනගාටුව A(Ii​),

rit​(I,a)RiT​(I,a)​=vi​(σt∣I→a​,I)−vi​(σt,I)=T1​t=1∑T​rit​(I,a)​

පරිගණකඋපාය විට T1​ කාලීන කෙසේ හෝ සිදු අවලංගු RiT​(I,a) සිට අපි TRiT​(I,a) ඒ වෙනුවට පවත්වාගෙන σi​T+1(I)(a)

438regret:Dict[Action,float]

#

සමස්තසාමාන්ය උපායමාර්ගය ගණනය t=1∑T​πiσt​(I)σt(I)(a) කිරීම සඳහා අපි සමුච්චිත උපාය මාර්ගය පවත්වා ගනිමු

σˉiT​(I)(a)=∑t=1T​πiσt​(I)∑t=1T​πiσt​(I)σt(I)(a)​

445cumulative\_strategy:Dict[Action,float]

#

ආරම්භකරන්න

447def\_\_init\_\_(self,key:str):

#

451self.key=key452self.regret={a:0forainself.actions()}453self.cumulative\_strategy={a:0forainself.actions()}454self.calculate\_strategy()

#

ක්‍රියා A(Ii​)

456defactions(self)-\>List[Action]:

#

460raiseNotImplementedError()

#

සුරකිනලද ශබ්දකෝෂයකින් තොරතුරු කට්ටලය පූරණය කරන්න

462@staticmethod463deffrom\_dict(data:Dict[str,any])-\>'InfoSet':

#

467raiseNotImplementedError()

#

ශබ්දකෝෂයකට සකසා ඇති තොරතුරු සුරකින්න

469defto\_dict(self):

#

473return{474'key':self.key,475'regret':self.regret,476'average\_strategy':self.cumulative\_strategy,477}

#

සුරකිනලද ශබ්දකෝෂයකින් දත්ත පූරණය කරන්න

479defload\_dict(self,data:Dict[str,any]):

#

483self.regret=data['regret']484self.cumulative\_strategy=data['average\_strategy']485self.calculate\_strategy()

#

උපායගණනය

කනගාටු ගැලපීමභාවිතා කරමින් වත්මන් උපාය ගණනය කරන්න.

σi​T+1(I)(a)=⎩⎨⎧​∑a′∈A(I)​RiT,+​(I,a′)RiT,+​(I,a)​,∣A(I)∣1​,​if∑a′∈A(I)​RiT,+​(I,a′)>0otherwise​​

කොහේද RiT,+​(I,a)=max(RiT​(I,a),0)

487defcalculate\_strategy(self):

#

RiT,+​(I,a)=max(RiT​(I,a),0)

506regret={a:max(r,0)fora,rinself.regret.items()}

#

a′∈A(I)∑​RiT,+​(I,a′)

508regret\_sum=sum(regret.values())

#

නම් ∑a′∈A(I)​RiT,+​(I,a′)>0,

510ifregret\_sum\>0:

#

σi​T+1(I)(a)=∑a′∈A(I)​RiT,+​(I,a′)RiT,+​(I,a)​

513self.strategy={a:r/regret\_sumfora,rinregret.items()}

#

එසේනොමැති නම්

515else:

#

∣A(I)∣

517count=len(list(aforainself.regret))

#

σi​T+1(I)(a)=∣A(I)∣1​

520self.strategy={a:1/countfora,rinregret.items()}

#

සාමාන්යඋපාය ලබා ගන්න

σˉiT​(I)(a)=∑t=1T​πiσt​(I)∑t=1T​πiσt​(I)σt(I)(a)​

522defget\_average\_strategy(self):

#

t=1∑T​πiσt​(I)σt(I)(a)

531cum\_strategy={a:self.cumulative\_strategy.get(a,0.)forainself.actions()}

#

t=1∑T​πiσt​(I)=a∈A(I)∑​t=1∑T​πiσt​(I)σt(I)(a)

535strategy\_sum=sum(cum\_strategy.values())

#

නම් ∑t=1T​πiσt​(I)>0,

537ifstrategy\_sum\>0:

#

σˉiT​(I)(a)=∑t=1T​πiσt​(I)∑t=1T​πiσt​(I)σt(I)(a)​

541return{a:s/strategy\_sumfora,sincum\_strategy.items()}

#

එසේනොමැති නම්

543else:

#

∣A(I)∣

545count=len(list(aforaincum\_strategy))

#

σˉiT​(I)(a)=∣A(I)∣1​

548return{a:1/countfora,rincum\_strategy.items()}

#

මානවකියවිය හැකි නිරූපණය

550def\_\_repr\_\_(self):

#

554raiseNotImplementedError()

#

ප්රතිවිරුද්ධකනගාටුව අවම කිරීම (CFR) ඇල්ගොරිතම

අපිඅහම්බෙන් නියැදීම් ( සීඑස් ) කරන්නෙමු, එහිදී සියලු අවස්ථා සිදුවීම් (නෝඩ්) නියැදි කර ඇති අතර අනෙක් සියලුම සිදුවීම් (නෝඩ්) ගවේෂණය කරනු ලැබේ.

අපිඅහම්බෙන් නියැදීම් සිදු කරන q(z) බැවින් එය සියලු පර්යන්ත ඉතිහාසයන් සඳහා සමාන බැවින් මෙම පදය නොසලකා හැරිය හැකි අතර උපාය ගණනය කිරීමේදී එය අවලංගු වේ (සංඛ්යාංකය සහ නිහාකය තුළ පොදු).

557classCFR:

#

I සියලු තොරතුරු කට්ටල කට්ටලයක්.

570info\_sets:Dict[str,InfoSet]

#

  • create_new_history නව හිස් ඉතිහාසයක් නිර්මාණය කරයි
  • epochs මත පුහුණු කිරීමට පුනරාවර්තන සංඛ්යාව T
  • n_players ක්රීඩකයන් සංඛ්යාව
572def\_\_init\_\_(self,\*,573create\_new\_history:Callable[[],History],574epochs:int,575n\_players:int=2):

#

581self.n\_players=n\_players582self.epochs=epochs583self.create\_new\_history=create\_new\_history

#

සියලුතොරතුරු කට්ටල I කට්ටලයක් සඳහා ශබ්ද කෝෂයක්

585self.info\_sets={}

#

විශ්ලේෂණසඳහා ට්රැකර්

587self.tracker=InfoSetTracker()

#

දීඇති ඉතිහාසයක් සඳහා වර්තමාන ක්රීඩකයාගේ තොරතුරු කට්ටලය I නැවත ලබා දෙයි h

589def\_get\_info\_set(self,h:History):

#

593info\_set\_key=h.info\_set\_key()594ifinfo\_set\_keynotinself.info\_sets:595self.info\_sets[info\_set\_key]=h.new\_info\_set()596returnself.info\_sets[info\_set\_key]

#

රුක්ඇවිදින්න

මෙමකාර්යය ක්රීඩා ගස ඇවිදිනවා.

  • h වර්තමාන ඉතිහාසය h

  • i අපි පරිගණක කනගාටු වන ක්රීඩකයා i වේ

  • pi_i වේ πiσt​(h)

  • pi_neg_i වේ π−iσt​(h)

එයඅපේක්ෂිත උපයෝගීතාව නැවත ලබා දෙයි, ඉතිහාසය සඳහා උපසර්ගය සහිත පර්යන්ත ඉතිහාස සමූහයක් h z∈Zh​∑​πσ(h,z)ui​(z) Zh​ කොහේද? h

ටීඇවිදින අතරතුර එය සම්පූර්ණ කනගාටුව යාවත්කාලීන කරයි RiT​(I,a).

598defwalk\_tree(self,h:History,i:Player,pi\_i:float,pi\_neg\_i:float)-\>float:

#

එයපර්යන්ත ඉතිහාසයක් නම් පර්යන්ත උපයෝගීතාව h∈Z නැවත ලබා දෙන්න ui​(h).

619ifh.is\_terminal():620returnh.terminal\_utility(i)

#

එයඅහම්බෙන් සිදුවීම් P(h)=c නියැදියක් නම් සහ ඊළඟ පියවරට යන්න.

622elifh.is\_chance():623a=h.sample\_chance()624returnself.walk\_tree(h+a,i,pi\_i,pi\_neg\_i)

#

සඳහාවත්මන් ක්රීඩකයාගේ තොරතුරු ලබා ගන්න h

627I=self.\_get\_info\_set(h)

#

ගබඩාකිරීමට ∑z∈Zh​​πσ(h,z)ui​(z)

629v=0

#

එක්එක් ක්රියාව z∈Zh​∑​πσt∣I→a​(h,z)ui​(z) සඳහා ගබඩා කිරීම a∈A(h)

633va={}

#

සියලුක්රියාවන් හරහා නැවත ක්රියා කරන්න

636forainI.actions():

#

වත්මන්ක්රීඩකයා නම් i,

638ifi==h.player():

# πiσt​(h+a)π−iσt​(h+a)​=πiσt​(h)σti​(I)(a)=π−iσt​(h)​

643va[a]=self.walk\_tree(h+a,i,pi\_i\*I.strategy[a],pi\_neg\_i)

#

එසේනොමැති නම්

645else:

# πiσt​(h+a)π−iσt​(h+a)​=πiσt​(h)=π−iσt​(h)∗σti​(I)(a)​

650va[a]=self.walk\_tree(h+a,i,pi\_i,pi\_neg\_i\*I.strategy[a])

#

z∈Zh​∑​πσ(h,z)ui​(z)=a∈A(I)∑​[σti​(I)(a)z∈Zh​∑​πσt∣I→a​(h,z)ui​(z)]

655v=v+I.strategy[a]\*va[a]

#

වර්තමානක්රීඩකයා නම් i, සමුච්චිත උපාය මාර්ග සහ සම්පූර්ණ කනගාටු යාවත්කාලීන කරන්න

659ifh.player()==i:

#

සමුච්චිතඋපාය මාර්ග යාවත්කාලීන කරන්න t=1∑T​πiσt​(I)σt(I)(a)=t=1∑T​[h∈I∑​πiσt​(h)σt(I)(a)]

664forainI.actions():665I.cumulative\_strategy[a]=I.cumulative\_strategy[a]+pi\_i\*I.strategy[a]

# rit​(I,a)TRiT​(I,a)​=vi​(σt∣I→a​,I)−vi​(σt,I)=π−iσt​(h)(z∈Zh​∑​πσt∣I→a​(h,z)ui​(z)−z∈Zh​∑​πσ(h,z)ui​(z))=t=1∑T​rit​(I,a)​

678forainI.actions():679I.regret[a]+=pi\_neg\_i\*(va[a]-v)

#

උපායමාර්ගයයාවත්කාලීන කරන්න σt(I)(a)

682I.calculate\_strategy()

#

ක්රීඩකයාසඳහා අපේක්ෂිත උපයෝගීතාව ආපසු ලබා දෙන්න i, z∈Zh​∑​πσ(h,z)ui​(z)

686returnv

#

නැවතයාවත්කාලීන කිරීම σt(I)(a)

මෙය T පුනරාවර්තන සඳහා උපාය මාර්ග යාවත්කාලීන කරයි.

688defiterate(self):

#

epochs වේලාවන් සඳහා ලූප්

696fortinmonit.iterate('Train',self.epochs):

#

ගසඇවිදින්න සහ එක් එක් ක්රීඩකයා සඳහා කනගාටු යාවත්කාලීන කරන්න

698foriinrange(self.n\_players):699self.walk\_tree(self.create\_new\_history(),cast(Player,i),1,1)

#

විශ්ලේෂණසඳහා දත්ත ලුහුබඳින්න

702tracker.add\_global\_step()703self.tracker(self.info\_sets)704tracker.save()

#

සෑම 1,000 පුනරාවර්තනයක්ම මුරපොලවල් සුරකින්න

707if(t+1)%1\_000==0:708experiment.save\_checkpoint()

#

තොරතුරුකට්ටල මුද්රණය කරන්න

711logger.inspect(self.info\_sets)

#

තොරතුරුකට්ටලයක් ට්රැකර්

තොරතුරුකට්ටල වලින් දත්ත සොයා ගැනීම සඳහා මෙය කුඩා උපකාරක පන්තියකි

714classInfoSetTracker:

#

සොයාගැනීෙම් දර්ශක

720def\_\_init\_\_(self):

#

724tracker.set\_histogram(f'strategy.\*')725tracker.set\_histogram(f'average\_strategy.\*')726tracker.set\_histogram(f'regret.\*')

#

සියලුමතොරතුරු කට්ටල වලින් දත්ත නිරීක්ෂණය කරන්න

728def\_\_call\_\_(self,info\_sets:Dict[str,InfoSet]):

#

732forIininfo\_sets.values():733avg\_strategy=I.get\_average\_strategy()734forainI.actions():735tracker.add({736f'strategy.{I.key}.{a}':I.strategy[a],737f'average\_strategy.{I.key}.{a}':avg\_strategy[a],738f'regret.{I.key}.{a}':I.regret[a],739})

#

වින්යාසගතකළ හැකි CFR මොඩියුලය

742classCFRConfigs(BaseConfigs):

#

746create\_new\_history:Callable[[],History]747epochs:int=1\_00\_000748cfr:CFR='simple\_cfr'

#

CFR ඇල්ගොරිතම ආරම්භ කරන්න

751@option(CFRConfigs.cfr)752defsimple\_cfr(c:CFRConfigs):

#

756returnCFR(create\_new\_history=c.create\_new\_history,757epochs=c.epochs)

Trending Research Paperslabml.ai