Lošimų teorija. 1 Lošimo teorijos komandų kodai

Dydis: px
Rodyti nuo puslapio:

Download "Lošimų teorija. 1 Lošimo teorijos komandų kodai"

Transkriptas

1 games-lt.wxmx / 9 Lošimų teorija A.Domarkas, VU, 4 Atvirojo kodo kompiuterinės algebros sistemoje Maxima 5.. yra sudarytas komandų paketas, kuris sprendžia pagrindinius lošimo teorijos uždavinius. Toliau yra pateikiami komandų kodai ir jų naudojimo pavyzdžiai. Lošimo teorijos komandų kodai Visų komandų kodai yra įrašyti faile gt.mac. Todėl norint jas naudoti užtenka įvykdyti komandą load(gt). Čia pateikiami komandų kodai yra pateikiami skaitytojams, kurie nori susipažinti su jais ir, gal būt, juos patobulinti. Čia yra pirmoji paketo versija. Pavdinkime ją: gt 4.. (Game theory 4 ). Komandos maximize_mlp ir minimize_mlp yra simplex paketo komandų maximize_lp ir minimize_lp apibendrinimas atvejui, kai ekstremumo taškų aibė yra begalinė. Tada šie taškai sudaro iškilą uždarą aibę. Randami sprendinių aibės visi kraštutiniai taškai ir atsakymai yra išvedami tų taškų iškilojo apvalkalo pavidalu. Standatinės simplex paketo komandos maximize_lp ir minimize_lp randa tik po vieną, nežinia kurį, sprendinį. (%i) maximize_mlp(f,apr):=block([m,v,n,f], solving(sis):=block([], if length(sis)=length(listofvars(sis)) then solve(sis) else solve(sis,listofvars(sis)) ), m:length(apr), v:sort(listofvars(apr)), n:length(v), if constantp(f) then n:n+, linsolvewarn:false, f:maximize_lp(f,apr)[], makelist(lhs(apr[k])=rhs(apr[k]),k,,m), powerset(setify(%%),n-), full_listify(%%), makelist(append(%%[k],[f=f]),k,,length(%%)), map(solving,%%), delete([],%%), map(first,%%), sublist(%%,lambda([x],sort(listofvars(x))=v )), sublist(%%,lambda([x],apply("and",subst(x,apr)))), map(sort,%%), listify(setify(%%)), append([f],%%) )$ (%i) minimize_mlp(f,apr):=block([m,v,n,f], solving(sis):=block([], if length(sis)=length(listofvars(sis)) then solve(sis) else solve(sis,listofvars(sis)) ), m:length(apr), v:sort(listofvars([f,apr])), n:length(v), if constantp(f) then n:n+, linsolvewarn:false, f:minimize_lp(f,apr)[], makelist(lhs(apr[k])=rhs(apr[k]),k,,m), powerset(setify(%%),n-), full_listify(%%), makelist(append(%%[k],[f=f]),k,,length(%%)), map(solving,%%), delete([],%%), map(first,%%), sublist(%%,lambda([x],sort(listofvars(x))=v )), sublist(%%,lambda([x],apply("and",subst(x,apr)))), map(sort,%%), listify(setify(%%)), append([f],%%) )$

2 games-lt.wxmx / 9 Komandos vlow ir vupp apskaičiuoja viršutinį ir apatinį lošimo rėžį (lower and upper values of the game). [], 5-8; [], 4-6 (%i) vlow(a):=block([rows,cols], [rows,cols]:matrix_size(a), lmax(makelist(lmin(a[i]),i,,rows)))$ (%i4) vupp(a):=block([rows,cols], [rows,cols]:matrix_size(a), lmin(makelist(lmax(transpose(a)[j]),j,,cols)))$ Komanda solvemgame(a) sprendžia dviejų asmenų nulinės sumos matricinį lošimą. Komanda msolvemgame(a) sprendžia dviejų asmenų nulinės sumos matricinį lošimą ir yra skirta atvejui, kai strategijų aibės yra begalinės. Sprendiniai išvedami kraštutinių taškų iškilojo darinio pavidalu. Antroji komanda veikia lėčiau negu pirmoji. [], 6-49; [], ch.,. (%i5) solvemgame(a):= block([b,u,w,u,w,f,f,apr,apr,s,s,ss,d,xs,ys,nonegative_lp:true], load(simplex), B:A-lmin(list_matrix_entries(A))+, [m,n]:matrix_size(a), U:makelist(concat(u,k),k,,m), W:makelist(concat(w,k),k,,n), apr:makelist((transpose(b).u)[k][]>=,k,,n), f:sum(u[k],k,,m), minimize_lp(f,apr), s:subst(%%[],u), f:sum(w[k],k,,n), apr:makelist((b.w)[k][]<=,k,,m), ss:maximize_lp(f,apr), s:subst(%%[],w), d:ss[], xs:s/d, ys:s/d, [xs,ys,xs.a.ys] )$ (%i6) msolvemgame(a):=block([sol,solx,soly], linsolvewarn:false, sol:solvebmgame(a,-a), makelist(sol[k][],k,,length(sol)), listify(setify(%%)), sublist(%%,lambda([x],listofvars(x)=[])), if length(%%)>= then solx:convexhull(%%) else solx:%%[], makelist(sol[k][],k,,length(sol)), sublist(%%,lambda([x],listofvars(x)=[])), listify(setify(%%)), if length(%%)>= then soly:convexhull(%%) else soly:%%[], [solx,soly,last(sol)[]] )$ Komanda solvebmgame(a,b) sprendžia dviejų asmenų nenulinės sumos matricinį lošimą(bimatricinį lošimą). [], 5-64; [], ch..

3 games-lt.wxmx / 9 (%i7) solvebmgame(a,b):=block([m,n,x,y,f,m,n,v,p,q,pm,pn,s,sis,sol,i,j,k], [m,n]:matrix_size(a), X:makelist(concat(x,k),k,,m), Y:makelist(concat(y,k),k,,n), F:X.(A+B).Y-p-q, apr:append( makelist(a[k].y<=p,k,,m), makelist(transpose(b)[k].x<=q,k,,n), [sum(x[k],k,,m)=,sum(y[k],k,,n)=], makelist(x[k]>=,k,,m), makelist(y[k]>=,k,,n)), M:makelist(k,k,,m), pm:listify(powerset(setify(m))), N:makelist(k,k,,n), pn:listify(powerset(setify(n))), v:listofvars(apr), S:[], for i thru ^m do for j thru ^n do ( sis:append( makelist(a[k].y=p,k,sublist(m,lambda([k],not member(k,pm[i])))), makelist(transpose(b)[k].x=q,k, sublist(n,lambda([k],not member(k,pn[j])))), [sum(x[k],k,,m)=,sum(y[k],k,,n)=,f=], makelist(x[k]=,k,listify(pm[i])), makelist(y[k]=,k,listify(pn[j]))), sol:solve(sis,v), ev(apr,%%), map(is,%%), if freeof(false,%%) then S:endcons(ev([X,Y,p,q],sol),S) ), sublist(s,lambda([x],listofvars(x)=[])) )$ Komanda normalize(g) normuoja koalicinį lošimą G. [], 69-7; [], (%i8) normalize(g):=block([n,foo,m,v,c,val], n:cardinality(g[]), foo(x,y):=cardinality(x)<=cardinality(y), listify(powerset(g[])), delete({},%%), M:sort(%%,foo), map(v,m), val:subst(g[],%%), c:/(val[^n-]-sum(val[i],i,,n)), [G[],makelist(v(M[k])=c*val[k] -apply("+",create_list(c*val[i],i,listify(m[k]))),k,,^n-)] )$ Komanda e(k,x) randa dalybų x ekscesą koalicijos K atžvilgiu. [], p. 99; [], p. 98. (%i9) e(k,x):=block([], L:listify(K), create_list(x[i],i,l), v(k)-sum(%%[i],i,,length(l)), subst(g[],%%) )$ Komanda core randa lošimo šerdį. Komanda least_core randa epsilon ir epsilon-šerdį. Čia epsilon yra mažiausias skaičius, su kuriuo lošimo epsilon-šerdis yra netuščia aibė. Jei epsilon>, tai lošimo šerdis yra tuščia. [], 7-8; [], -48.

4 games-lt.wxmx 4 / 9 (%i) least_core(g):=block([n,foo,m,v,x,apr,s,sol], local(x,v), load(simplex), n:cardinality(g[]), foo(x,y):=cardinality(x)<=cardinality(y), listify(powerset(g[])), delete({},%%), M:sort(%%,foo), map(v,m), val:subst(g[],%%), X:makelist(x[k],k,,n), makelist(e(m[k],x)<=epsilon,k,,^n-), apr:endcons(sum(x[k],k,,n)=val[^n-],%%), s:minimize_mlp(epsilon,apr), if length(s)= then sol:subst(s[],x) else sol:convexhull(makelist(subst(s[k],x),k,,length(s))), return([s[],sol]) )$ (%i) core(g):=block([n,foo,m,v,x,apr,s,sol], local(x,v), if least_core(g)[]> then return([]), n:cardinality(g[]), foo(x,y):=cardinality(x)<=cardinality(y), listify(powerset(g[])), delete({},%%), M:sort(%%,foo), map(v,m), val:subst(g[],%%), X:makelist(x[k],k,,n), makelist(e(m[k],x)<=,k,,^n-), apr:endcons(sum(x[k],k,,n)=val[^n-],%%), s:minimize_mlp(,apr), if length(s)= then sol:subst(s[],x) else sol:convexhull(makelist(subst(s[k],x),k,,length(s))), return(sol) )$ Komanda ShapleyValue(G) randa koalicinio lošimo Šiaplio vertę. [], 8-98; [], 5-5 (%i) ShapleyValue(G):=block([n,M,S,x,i,k], local(x), n:cardinality(g[]), M:listify(powerset(G[])), for k thru n do (S:sublist(M,lambda([x],member(k,x))), x[k]:sum((v(s[i])-v(setdifference(s[i],{k})))* (cardinality(s[i])-)!*(n-cardinality(s[i]))!/n!,i,,length(s))), subst(g[],makelist(x[k],k,,n)), subst(v({})=,%%) )$ Komanda nucleolus(g) randa koalicinio lošimo nukleolą. [], 99-4; [], 9-5. (%i) nucleolus(g):=block([lc], lc:least_core(g), if freeof(convexhull,lc[]) then return(lc[]) else first(lc[]), apply("+",%%)/length(%%) )$ Komanda belong(x,c) patikrina ar taškas x priklauso iškilajam dariniui C.

5 games-lt.wxmx 5 / 9 (%i4) belong(x,c):=([], load(simplex), sum(t[k]*first(c)[k],k,,length(first(c)))-x, append(makelist(%%[k]=,k,,length(x)), makelist(t[k]>=,k,,length(first(c))), makelist(t[k]<=,k,,length(first(c))), [sum(t[k],k,,length(first(c)))=]), minimize_lp(,%%), is(%%[]=) )$ Komandų vlow, vupp pavyzdžiai. [], Example.7 (%i5) A:matrix([,,-,,,-], [-,,-,-,,-], [-,-,-,,, ]); (%o5) (%i6) vlow(a); (%o6) (%i7) vupp(a); (%o7). [], Example.8 (%i8) A:matrix([.,.5,.], [.6,.,.8], [.8,.,.]);..5. (%o8) (%i9) vlow(a); (%o9).8 (%i) vupp(a); (%o).. [], 5 psl., 5. c) pavyzdys (%i) A:matrix( [,-,,-,4], [4,,-,7,], [7,5,4,8,5], [-6,-4,,-,9]); - 4 (%o) (%i) vlow(a); (%o) 4 (%i) vupp(a); (%o) 4

6 games-lt.wxmx 6 / 9 Komandų solvemgame, msolvemgame pavyzdžiai. [], Example. (%i4) A:matrix([,-],[-,9]); (%o4) 9 (%i5) vlow(a); (%o5) (%i6) vupp(a); (%o6) (%i7) solvemgame(a); (%o7) [[ 5 7, 7 ],[5 7, 7 ], 7 ]. [], Example. (%i8) A:matrix([,-,],[-,, -],[,-,]); (%o8) (%i9) vlow(a); (%o9) (%i) vupp(a); (%o) (%i) solvemgame(a); (%o) [[,, ],[,, ],] Sprendiniai iš [], Example. yra X* = (/, /, ) ir Y* = (/, /, ) arba X* = (x, /, / - x), <=x<=/, Y* = (y, /, / - y), <=y<=/. Sprendiniai gauti su game solver iš [4] yra EE P: () / / EP= P: () / / EP= EE P: () / / EP= P: () / / EP=. Minėti sprendiniai yra teisingi, nes jie priklauso bendrąjam sprendiniui, gaunamam su msolvemgame: (%i) msolvemgame(a); (%o) [convexhull Ñ Ñ [[,, ],[,,]],convexhull [[,, ],[,,]],] Komanda msolvemgame yra nauja, nes jos nebuvo anksčiau nei vienoje kompiuterinėje sistemoje.. [], Example. (%i) A:matrix([,,],[,, ],[,,]); (%o) (%i4) vlow(a); (%o4)

7 games-lt.wxmx 7 / 9 (%i5) vupp(a); (%o5) (%i6) solvemgame(a); (%o6) [[,, ],[,, ],] (%i7) msolvemgame(a); (%o7) [[,, ],[,, ],] 4. [], Example. (%i8) A:matrix([-,,-],[,, ],[,,]); (%o8) - (%i9) vlow(a); (%o9) (%i4) vupp(a); (%o4) (%i4) solvemgame(a); (%o4) [[,,],[ 4, 4,],] (%i4) msolvemgame(a); Ñ (%o4) [[,,],convexhull [[,,],[,, ],[ 4, 4,],[,,]],] (%i4) load(draw)$ Loading C:/Users/Aleksas/maxima/binary/binary-gcl/share/draw/grcommon.o Finished loading C:/Users/Aleksas/maxima/binary/binary-gcl/share/draw/grcommon.o Loading C:/Users/Aleksas/maxima/binary/binary-gcl/share/draw/gnuplot.o Finished loading C:/Users/Aleksas/maxima/binary/binary-gcl/share/draw/gnuplot.o Loading C:/Users/Aleksas/maxima/binary/binary-gcl/share/draw/vtk.o Finished loading C:/Users/Aleksas/maxima/binary/binary-gcl/share/draw/vtk.o Loading C:/Users/Aleksas/maxima/binary/binary-gcl/share/draw/picture.o Finished loading C:/Users/Aleksas/maxima/binary/binary-gcl/share/draw/picture.o

8 games-lt.wxmx 8 / 9 (%i44) wxdrawd( xlabel = "x", ylabel = "x", xtics =., ytics =., ztics =.5, points_joined=true, point_type = filled_circle, view = [5, 5], points([[,,],[,/,/],[/4,/4,],[/,/,],[,,]]) )$ (%t44) Ar Y = (.5,.5,.5) yra optimali strategija II lošėjui? (%i45) reset()$ (%i) eq:t*[,,]+t*[,/,/]+t*[/4,/4,]+t4*[/,/,]=[.5,.5,.5]; (%o) [ t4 + t 4, t4 + t 4 + t, t +t ] =[.5,.5,.5] (%i) solve(lhs(%)-rhs(%),[t,t,t,t4]); rat: replaced -.5 by -/ = -.5 rat: replaced -.5 by -/ = -.5 rat: replaced -.5 by -7/ = -.5 %r - 4 %r 4 %r - (%o) [[t=-, t =%r, t =-,t4= ]] 6 5 (%i4) subst(%r=/4,%); (%o4) [[t= 4 5,t = 4, t = 5, t4 = 7 ]] (%i5) 4/5*[,,]+/4*[,/,/]+/5*[/4,/4,]+7/*[/,/,]; (%o5) [,, 7 ] (%i6) float(%), numer; (%o6) [.5,.5,.5] Todėl [.5,.5,.5] priklauso iškilajam dariniui convexhull([[,,], [,/,/], [/4,/4,], [/,/,]]) ir yra yra optimali strategija II lošėjui. Kitas būdas tai nustatyti yra pasinaudojant komanda belong: (%i7) belong([.5,.5,.5],convexhull([[,,], [,/,/], [/4,/4,], [/,/,]])); (%o7) true 5. [], Example.6

9 games-lt.wxmx 9 / 9 (%i8) A:matrix([,-,],[,5, -]); (%o8) 5 - (%i9) vlow(a); (%o9) - (%i) vupp(a); (%o) (%i) solvemgame(a); (%o) [[, ],[,, ],] (%i) msolvemgame(a); (%o) [[, ],[,, ],] 6. [], Example.7 (%i) A:matrix([-,],[,-4],[-5,6],[7,-8]); (%o) (%i4) vlow(a); (%o4) (%i5) vupp(a); (%o5) 6 (%i6) solvemgame(a); (%o6) [[ 5 6,,, 6 ],[5 9, 4 9 ], ] 7. [], Problem.5 (%i7) A:matrix([-,,5,-], [,-4,,-6], [-5,,,-], [-,-,,]); (%o7) (%i8) vlow(a); (%o8) - (%i9) vupp(a); (%o9) (%i) solvemgame(a); (%o) [[, 5,, 5 ],[5 99, 8,, 99 ],- 6 ] 8. [], Example.

10 games-lt.wxmx / 9 (%i) A:matrix([,8,-5], [4,4,6], [5,5,5]); 8-5 (%o) (%i) vlow(a); (%o) 5 (%i) vupp(a); (%o) 6 (%i4) solvemgame(a); (%o4) [[,,],[ 7,, 7 7 ],5] (%i5) msolvemgame(a); (%o5) [[,,],convexhull Ñ [[,, ],[,, ],[,, ],[ 7,, 7 ]],5] 7 Ar Y = [/, /, /] yra optimali strategija II lošėjui? (%i6) C:%[]; (%o6) convexhull (%i7) belong([/,/,/],c); (%o7) true Ñ [[,, ],[,, ],[,, ],[ 7,, 7 7 ]] Todėl [/, /, /] priklauso convexhull([[,/,/],[,/,/],[/,,/],[/7,,7/7]]) ir yra optimali strategija II lošėjui. (%i8) belong([/,,/],c); (%o8) false Todėl [/,,/] nėrat optimal strategija II lošėjui. 9. [], Example.8 (%i9) A:matrix([,-.,-.6],[.,,-.],[.6,.,]); (%o9) (%i) solvemgame(a); (%o) [[,,.],[,,.],.] (%i) A:matrix([,-.,],[.,,-.],[-,.,]); (%o)

11 games-lt.wxmx / 9 (%i) A:rat(A); rat: replaced -. by -/5 = -. rat: replaced. by /5 =. rat: replaced -. by -/5 = -. rat: replaced. by /5 =. - 5 (%o)/r/ (%i) fpprintprec:4; (%o) 4 (%i4) solvemgame(a); (%o4)/r/ [[ 5, 5, ],[ 5, 5, ],] (%i5) float(%), numer; (%o5) [[.5,.76,.9 ],[.5,.76,.9],.]. [], Example.9 (%i6) A:matrix([-,,],[,-,-],[,,-]); (%o6) (%i7) solvemgame(a); (%o7) [[ 5, 5, 5 ],[ 5, 7, 6 ],- 5 5 ]. [], Example. Colonel Blotto Games. (%i8) A:matrix([4,,,],[,4,,],[,-,,],[-,,,],[-,-,,]); (%o8) (%i9) solvemgame(a); (%o9) [[ 4 9, 4 9,,, 9 ],[ 7 9,, 6 45, 8 5 ],4 9 ] (%i4) msolvemgame(a); Ñ (%o4) [[ 4 9, 4 9,,, 9 ],convexhull [[, 7 9, 8 5, 6 45 ],[ 7 9,, 6 45, 8 5 ]],4 9 ] (%i4) C:%[]; (%o4) convexhull Ñ [[, 7 9, 8 5, 6 45 ],[ 7 9,, 6 45, 8 5 ]] (%i4) belong([/5,/45,/5,/45],c); (%o4) true (%i4) belong([/8,/8,8/8,8/8],c); (%o4) true

12 games-lt.wxmx / 9 4 Komandos solvebmgame pavyzdžiai Komanda solvebmgame(a,b) sprendžia dviejų asmenų nenulinės sumos matricinį lošimą(bimatricinį lošimą). [], 5-64; [], ch.. Pavyzdžiai iš []: Example. (%i44) A:matrix([,],[,4]); (%o44) 4 (%i45) B:matrix([,],[,-]); (%o45) (%i46) solvebmgame(a,b); (%o46) [[[,],[,],,]] Prisoner s Dilemma, p. 8 (%i47) A:matrix([-5,],[-,-]); (%o47) (%i48) B:matrix([-5,-],[,-]); (%o48) (%i49) solvebmgame(a,b); (%o49) [[[,],[,],- 5,- 5]] Example. (%i5) A:matrix([,,],[,,],[,,5]); (%o5) 5 (%i5) B:matrix([,,],[,,],[,4,]); (%o5) 4 (%i5) solvebmgame(a,b); (%o5) [[[,,],[,,],,4]] Example. (%i5) A:matrix([,],[,4]); (%o5) 4

13 games-lt.wxmx / 9 (%i54) B:matrix([,],[,4]); (%o54) 4 (%i55) solvebmgame(a,b); (%o55) [[[, ],[, ],5, 5 ],[[,],[,],4,4],[[,],[,],,]] Example.4 The Arms Race. (%i56) A:matrix([,],[-5,]); (%o56) - 5 (%i57) B:matrix([,-5],[,]); (%o57) - 5 (%i58) solvebmgame(a,b); (%o58) [[[,],[,],,]] Example.5 (%i59) A:matrix([,],[,]); (%o59) (%i6) B:matrix([,],[,]); (%o6) (%i6) solvebmgame(a,b); (%o6) [[[ 4, 4 ],[, ],, 4 ]] (%i6) solvebmgame(a,transpose(b)); (%o6) [[[ 4, 4 ],[, ],, 4 ]] (%i6) solvebmgame(transpose(a),transpose(b)); (%o6) [[[ 4, 4 ],[ 4, 4 ],, 4 ]] Example.9 (%i64) A:matrix([,-],[-,]); (%o64) (%i65) B:matrix([,-],[-,]); (%o65) (%i66) solvebmgame(a,b); (%o66) [[[ 5, 5 ],[ 5, 5 ], 5, 5 ],[[,],[,],,],[[,],[,],,]] method

14 games-lt.wxmx 4 / 9 (%i67) X:[x,-x]; (%o67) [ x,-x] (%i68) Y:[y,-y]; (%o68) [ y,-y] (%i69) E:X.A.Y; (%o69) x ( y- ) +( -x)( - y) (%i7) E:X.B.Y; (%o7) x ( y- ) +( -x)( ( -y)-y) (%i7) eq:diff(e,x)=; (%o7) 5 y-= (%i7) eq:diff(e,y)=; (%o7) x- ( -x ) = (%i7) solve([eq,eq]); (%o7) [[x= 5, y = 5 ]] (%i74) sol:subst(%[],[x,y,e,e]); (%o74) [[ 5, 5 ],[ 5, 5 ], 5, 5 ] Example. (%i75) A:matrix([,],[,]); (%o75) (%i76) B:matrix([,],[,]); (%o76) (%i77) solvebmgame(a,b); (%o77) [[[, ],[, ],, ],[[,],[,],,],[[,],[,],,]] Example. (%i78) A:matrix([-,5,],[-,,],[,,]); - (%o78) - 5 (%i79) B:matrix([-4,-,4],[-,,4],[,,-]); - 4 (%o79) (%i8) solvebmgame(a,b); (%o8) [[[ 4, 7, 9 4 ],[ 4, 5 4, 4 7 ], 4, 4 ],[[, 5, 5 ],[,,],,],[[,,],[,,],, ],[[,,],[,,],,4]] Example.

15 games-lt.wxmx 5 / 9 (%i8) A:matrix([,,4],[,4,]); (%o8) 4 4 (%i8) B:matrix([,,-],[,,]); (%o8) (%i8) solvebmgame(a,b); (%o8) [[[, ],[,,],8, ]] p. 5 (%i84) A:matrix([-,,],[,,],[,,]); (%o84) (%i85) B:matrix([,,],[,-,],[,,]); (%o85) (%i86) solvebmgame(a,b); (%o86) [[[,, ],[,, ],, ],[[,,],[,,],,],[[,,],[,,],,]] Example. (%i87) A:matrix([,],[,]); (%o87) (%i88) B:matrix([,],[,]); (%o88) (%i89) solvebmgame(a,b); (%o89) [[[,],[,],,]] (%i9) A:matrix([,-],[,]); (%o9) (%i9) B:matrix([,-],[-,]); (%o9) - (%i9) solvebmgame(a,b); (%o9) [[[ 4, 4 ],[,],,],[[,],[,],,],[[,],[,],,]] Example.4 A Discrete Silent Duel. (%i9) ratprint:false$ linsolvewarn:false$

16 games-lt.wxmx 6 / 9 (%i95) A:matrix( [.,-.4,-.7,-.], [.9,-.4,-.6,-.6], [.76,-.,-.,-.8], [.6,-.,-.6,-]); (%o95) (%i96) A:ratsimp(A); (%o96) (%i97) B:matrix( [.64,.6,.6,.6], [.4,.6,-.,-.], [-.8,.6,.4,-.6], [-.6,.,.6,]); (%o97) (%i98) B:ratsimp(B); (%o98) (%i99) sol:solvebmgame(a,b); (%o99) [[[,, 5 9, 4 9 ],[,5 7,,],- 7 85, 45 ],[[,,,],[,,,],- 5, 5 ],[[,,,],[,,,],- 5, 9 5 ],[[6 69,, 5 69, 4 ],[ 69 68, 68, 7 6,],- 4 5, ],[[,,, ],[ 6,,5 6, ],- 5, 5 ],[[,,,],[,,,],6 5, 6 5 ],[[6 7,, 7,],[ 4,,,], 4 75, ]] (%i) sol:float(%)$ (%i) length(sol); (%o) 7 (%i) sol:reverse(sort(sol))$

17 games-lt.wxmx 7 / 9 (%i) for k thru 7 do print(sol[k]); [[.,.,.,.],[.,.,.,.],.,.64] [[.97,.,.,. ],[.7,.,.8,.],-.4,.6] [[.95,.,.,.4 ],[.78,.79,.,.],-.9,.58] [[.94,.,.59,. ],[.,.79,.,.],.69,.59] [[.,.,.,.],[.,.,.,.],-.,.6] [[.,.,.56,.44 ],[.,.88,.,.],-.5,.9] [[.,.,.,.],[.,.,.,.],-.6,.6] (%o) done Gavome tokius pat rezultatus kaip ir []. Pavyzdys iš [4], Gauname tuos pačius 75 sprendinius, kaip ir [4] (%i4) A:matrix([-8,6,-6,6,-6,9],[-8,7,-,97,-5,7],[,-,4,-,7,-],[-, (%o4) (%i5) B:matrix([7,6,7,-,-6,-5],[-8,-8,-,,9,7],[97,6,4,-,-6,-],[-, (%o5) (%i6) solvebmgame(a,b)$ (%i7) sol:sort(%)$ (%i8) length(%); (%o8) 75 First solutions is

18 games-lt.wxmx 8 / 9 (%i9) for k thru do print(sol[k]); [[,,,, 4 5, 5 ],[,,,, 5, 4 5 ],4 5, 4 5 ] [[,,,, 9 7, 5 7 ],[,,, 4 7, 7,],,97 7 ] [[,,,, 7, 5 7 ],[,, 4, 9 4,,],,5 7 ] [[,,,,, 7 ],[,9,,,,],477 6, 45 ] [[,,,,, ],[,,,,,],5, 5 ] [[,,,,,],[,,,,,],7,7] [[,,, 5, 4, 5 ],[,, 5,, 5, 4 ],4, 4 ] [[,, 89, 5, 8, ],[, 8, 7 64,, 64, 47 8 ],97 8, 7 ] [[,, 98, 98, 8, 4 ],[ 7 87, 5 87,,,5 87, 5 87 ],75 9, 7 ] [[,, 4 7,,, 7 ],[,,,,5 7, 9 7 ],97 7,] (%o9) done 5 Komandos normalize pavyzdžiai Komanda normalize(g) normuoja koalicinį lošimą G. [], 69-7; [], [], Example 6.4 (%i) G:[{,,}, [v({})=, v({})=/4, v({})=-, v({,})=, v({,})=, v({,})=, v({,,})=4 (%i) normalize(g); (%o) [{,,},[v({}) =,v( {}) =,v( {}) =,v( {,}) = 7 5,v ( ) v( {,,}) =]] {,} = 4 {,} = 7 5, 5,v ( ). (%i) G:[{,,}, [v({})=, v({})=, v({})=, v({,})=5, v({,})=6, v({,})=8, v({,,})=9 (%i) normalize(g); (%o) [{,,},[v({}) =,v( {}) =,v( {}) =,v( {,}) = 5 9,v ({,}) =,v ({,}) = 8 9, v( {,,}) =]] 6 excess e(s,x) examples

19 games-lt.wxmx 9 / 9 Komanda e(k,x) randa dalybų x ekscesą koalicijos K atžvilgiu. [], p. 99; [], p. 98. [], Example 6.5 (%i4) G:[{,,}, [v({})=, v({})=, v({})=, v({,})=4, v({,})=5, v({,})=6, v({,,})=8 (%i5) e({},x); (%o5) -x (%i6) e({},x); (%o6) -x (%i7) e({},x); (%o7) -x (%i8) e({,},x); (%o8) -x -x +4 (%i9) e({,},x); (%o9) -x -x +5 (%i) e({,},x); (%o) -x -x +6 (%i) e({,,},x); (%o) -x -x -x +8 7 Komandos core and least_core pavyzdžiai Komanda core randa lošimo šerdį. Komanda least_core randa epsilon ir epsilon-šerdį. Čia epsilon yra mažiausias skaičius, su kuriuo lošimo epsilon-šerdis yra netuščia aibė. Jei epsilon>, tai lošimo šerdis yra tuščia. [], 7-8; [], [], Example 6.5 (%i) G:[{,,}, [v({})=, v({})=, v({})=, v({,})=4, v({,})=5, v({,})=6, v({,,})=8 (%i) core(g); (%o) convexhull( [[,,4],[,,4],[,,]]) (%i4) load(draw)$

20 games-lt.wxmx / 9 (%i5) wxdrawd( xlabel = "x", ylabel = "x", xtics =, ytics =, ztics =, view = [5, 6], line_width =, triangle ([,,4],[,,4],[,,]) ); (%t5) (%o5) (%i6) least_core(g); (%o6) [,[5, 8, ]]. [], Example 6.6 (%i7) G:[{,,}, [v({})=, v({})=/4, v({})=-, v({,})=, v({,})=, v({,})=, v({,,})=4 (%i8) G:normalize(G); (%o8) [{,,},[v({}) =,v( {}) =,v( {}) =,v( {,}) = 7 5,v ( ) v( {,,}) =]] (%i9) core(g); (%o9) convexhull (%i) load(draw)$ {,} = 4 {,} = 7 5, 5,v ( ) Ñ [[, 7 5, 8 5 ],[, 5, 4 5 ],[ 4 5, 5,],[ 7 5,, 8 5 ],[ 8 5,, 7 5 ],[ 8 5, 7 5,]]

21 games-lt.wxmx / 9 (%i) wxdrawd( xlabel = "x", ylabel = "x", xtics =., ytics =., ztics =., points_joined=true, point_type = filled_circle, view = [5, 6], points([[,/5,4/5],[,7/5,8/5],[7/5,,8/5], [8/5,,7/5],[8/5,7/5,],[4/5,/5,],[,/5,4/5]])); (%t) (%o) (%i) least_core(g); (%o) [ - 4 5,[ 4 5, 7 5, 4 5 ]] (%i) least_core(g); (%o) [,[,,]]. [], Example 6.7 (%i4) G:[{,,}, [v({})=, v({})=, v({})=, v({,})=, v({,})=, v({,})=, v({,,})= (%i5) core(g); (%o5) [] Todėl lošimo šerdis yra tuščia. (%i6) least_core(g); (%o6) [,[,, ]] 4. ([], Example 6.8) (%i7) G:[{,,}, [v({})=, v({})=, v({})=, v({,})=5, v({,})=, v({,})=5, v({,,})=5

22 games-lt.wxmx / 9 (%i8) core(g); (%o8) [] Todėl lošimo šerdis yra tuščia. (%i9) least_core(g); (%o9) [,[5,5,65]] 5. [], 5-7 Palyginkite su ten vykdomais Maple skaičiavimais. (%i4) G:[{,,}, [v({})=, v({})=, v({})=, v({,})=, v({,})=, v({,})=, v({,,})=5/ (%i4) core(g); (%o4) convexhull Ñ [[,, ],[,5,],[,, ],[,,]] (%i4) least_core(g); Ñ (%o4) [ 4,convexhull [[ 4,, 4 ],[5 4,, 4 ]] ] (%i4) t*[/4,,/4]+(-t)*[5/4,,/4],expand; (%o4) [ 5 4 -t, t +, 4 ] Todėl mažiausia šerdis yra atkarpa: aibė taškų [5/4-t, t+, /4], <=t<=. 6. [], Example 6.. Empty Core. (%i44) G:[{,,}, [v({})=, v({})=, v({})=, v({,})=5, v({,})=6, v({,})=8, v({,,})=9 (%i45) normalize(g); (%o45) [{,,},[v({}) =,v( {}) =,v( {}) =,v( {,}) = 5 9,v ({,}) =,v ({,}) = 8 9, v( {,,}) =]] (%i46) ev(v({,})+v({,})+v({,}),%[]); (%o46) 9 9 (%i47) is(%<=); (%o47) false Pagal teiginį 6..7 iš [] lošimo šerdis yra tuščia. (%i48) core(g); (%o48) []

23 games-lt.wxmx / 9 (%i49) least_core(g); (%o49) [,[4,, ]]. Nonempty Core. (%i5) G:[{,,}, [v({})=, v({})=, v({})=, v({,})=, v({,})=4, v({,})=, v({,,})=6 (%i5) G:normalize(G); (%o5) [{,,},[v({}) =,v( {}) =,v( {}) =,v( {,}) = 6,v ({,}) =,v ({,}) =, v( {,,}) =]] (%i5) ev(v({,})+v({,})+v({,}),%[]); (%o5) 4 (%i5) is(%<=); (%o5) true Pagal teiginį 6..7 iš [] lošimo šerdis yra netuščia. (%i54) C:core(G); (%o54) convexhull( [[,,5],[,,4],[,,5],[,,],[,,]]) Taškas [.5,,.5] yra apskaičiuotas vadovėlyje []. (%i55) belong([.5,,.5], C); (%o55) true Todėl [.5,,.5] priklauso šerdžiai convexhull([[,,5],[,,4],[,,5],[,,],[,,]]). (%i56) least_core(g); (%o56) [,convexhull( [[,,4],[,,]])] (%i57) nucleolus(g); (%o57) [,,7 ] Todėl [.5,,.5] yra lošimo G nucleolas. 8 Nukleolo skaičiavimo pavyzdžiai. [], Example 6. (%i58) G:[{,,}, [v({})=, v({})=, v({})=, v({,})=, v({,})=, v({,})=, v({,,})=

24 games-lt.wxmx 4 / 9 (%i59) normalize(g); (%o59) [{,,},[v({}) =,v( {}) =,v( {}) =,v( {,}) = 6,v ({,}) = 6,v ({,}) = 5 6, v( {,,}) =]] (%i6) ev(v({,})+v({,})+v({,}),%[]); (%o6) 7 6 (%i6) is(%<=); (%o6) true Todėl lošimo šerdis yra netuščia. (%i6) core(g); (%o6) convexhull( [[,,],[,,],[,,],[,,]]) (%i6) least_core(g); (%o6) [,convexhull( [[,,9],[,9,]])] (%i64) nucleolus(g); (%o64) [,, ]. ([], Example 6.) (%i65) G:[{,,}, [v({})=, v({})=, v({})=, v({,})=, v({,})=, v({,})=, v({,,})= (%i66) normalize(g); (%o66) [{,,},[v({}) =,v( {}) =,v( {}) =,v( {,}) =,v ({,}) =,v( {,}) =, v( {,,}) =]] (%i67) ev(v({,})+v({,})+v({,}),%[]); (%o67) (%i68) is(%<=); (%o68) true Todėl lošimo šerdis yra netuščia. (%i69) core(g); (%o69) convexhull( [[,,],[,,],[,,],[,,]]) (%i7) least_core(g); (%o7) [ - 5,[5,,5]] (%i7) nucleolus(g); (%o7) [5,,5]. [], example XIII..

25 games-lt.wxmx 5 / 9 (%i7) G:[{,,,4}, [v({})=, v({})=, v({})=, v({4})=, v({,})=5, v({,})=5, v({,4})=5, v({,})=5, v({,4})=5, v({,4})=5, v({,,})=95, v({,,4})=85, v({,,4})=8, v({,,4})=55, v({,,,4})= (%i7) core(g); (%o7) [] (%i74) least_core(g); (%o74) [, convexhull( [[,,5,5],[5,5,5,5]])] (%i75) nucleolus(g); (%o75) [ 65, 55,5,5] 4. (%i76) G:[{,,}, [v({})=465, v({})=747.5, v({})=58.5, v({,})=6987.5, v({,})=58.5, v({,})=75, v({,,})=9 (%i77) ratprint:false$ (%i78) fpprintprec:8; (%o78) 8 (%i79) nucleolus(g); (%o79) [ 575, 97875, 575 ] 4 4 (%i8) float(%), numer; (%o8) [ , , 84.75] 5.

26 games-lt.wxmx 6 / 9 (%i8) G:[{,,,4}, [v({})=, v({})=, v({})=, v({4})=, v({,})=.68, v({,})=.4, v({,4})=.75, v({,})=.6, v({,4})=.5, v({,4})=.7, v({,,})=., v({,,4})=.5, v({,,4})=., v({,,4})=.75, v({,,,4})=.89 (%i8) G:ratsimp(G); (%o8) [{,,,4},[v({}) =,v( {}) =,v( {}) =,v( {4}) =,v( {,}) = 7 5,v ( ) v( {,4}) = 4,v ({,}) = 5,v ({,4}) = 5,v ({,4}) = 7,v ({,,}) =,v ( ) v( {,,4}) = 5 5,v ({,,4}) = 4,v ({,,,4}) = 89 ]] {,} = 6 5, {,,4} = 5, (%i8) least_core(g); (%o8) [ - 9 5,convexhull Ñ [[ 7 5, 69, 9 5, 7 77 ],[ 5, 5, 9 5, 7 5 ],[ 5, 69, 9 5, 9 5 ],[4 5, 5, 9 5, 49 ],[4 5, 57, 9 5, 9 5 ]] ] (%i84) nucleolus(g); (%o84) [ 87 5, 47 5, 9 5, 5 ] 9 Šiaplio vertės skaičiavimo pavyzdžiai Komanda ShapleyValue(G) randa koalicinio lošimo Šiaplio vertę. [], 8-98; [], 5-5 [],. pavyzdys (%i85) G:[{,,},[v({})=,v({})=,v({})=, v({,})=,v({,})=, v({,})=,v({,,})= (%i86) ShapleyValue(G); (%o86) [,, ] [],. pavyzdys (%i87) G:[{,,,4},[v({})=,v({})=,v({})=, v({4})=,v({,})=,v({,})=,v({,4})=, v({,})=, v({,4})=, v({,4})=, v({,,})=, v({,,4})=, v({,,4})=, v({,,4})=, v({,,,4})= (%i88) ShapleyValue(G); (%o88) [, 4, 4, 5 ]

27 games-lt.wxmx 7 / 9 [],. pavyzdys (%i89) G:[{,,,4},[v({})=,v({})=,v({})=, v({4})=,v({,})=,v({,})=,v({,4})=, v({,})=, v({,4})=, v({,4})=, v({,,})=, v({,,4})=, v({,,4})=, v({,,4})=, v({,,,4})= Toliau pavyzdžiai iš []: Example 6.5 (%i9) G:[{,,}, [v({})=, v({})=, v({})=, v({,})=5, v({,})=, v({,})=5, v({,,})=5 (%i9) fpprintprec:4$ (%i9) ShapleyValue(G); (%o9) [ 85,5,5 ] (%i9) float(%), numer; (%o9) [4.5,5.,57.5] (%i94) nucleolus(g); (%o94) [5,5,65] Example 6.6 (%i95) G:[{,,}, [v({})=5, v({})=4, v({})=, v({,})=9, v({,})=5, v({,})=5, v({,,})= (%i96) fpprintprec:4$ (%i97) ShapleyValue(G); (%o97) [ 5 6, 5 6, ] (%i98) float(%), numer; (%o98) [9.7,54.7,6.667] (%i99) nucleolus(g); (%o99) [4,55,5] Example 6.7

28 games-lt.wxmx 8 / 9 (%i) G:[{,,}, [v({})=, v({})=, v({})=, v({,})=, v({,})=, v({,})=, v({,,})= (%i) ShapleyValue(G); (%o) [, 6, 6 ] (%i) core(g); (%o) [,,] (%i) least_core(g); (%o) [,[,,]] (%i4) nucleolus(g); (%o4) [,,] Example 6.8 (%i5) G:[{,,,4}, [v({})=, v({})=, v({})=, v({4})=, v({,})=, v({,})=, v({,4})=, v({,})=, v({,4})=, v({,4})=, v({,,})=, v({,,4})=, v({,,4})=, v({,,4})=, v({,,,4})= (%i6) ShapleyValue(G); (%o6) [, 4, 4, 5 ] Example 6. (%i7) G:[{,,,4}, [v({})=, v({})=, v({})=, v({4})=, v({,})=, v({,})=, v({,4})=5, v({,})=, v({,4})=, v({,4})=, v({,,})=, v({,,4})=5, v({,,4})=5, v({,,4})=, v({,,,4})=55

29 games-lt.wxmx 9 / 9 (%i8) ShapleyValue(G); (%o8) [ 65 6, 4, 5, 45 ] [] A.Apynis, Lošimų teorija, VU, 7. [] E.N.Barron, Game theory. An Introduction, second ed. John Wiley & Sons, Inc.,. [] G.Owen, Game theory, rd ed., Academic Press, 995. [4] Game theory solver,