#######These are all the chapter 1 commands in order of appearance. #Calculate the upper and lower values restart:with(LinearAlgebra): A:=Matrix([[2,-5],[-3,1],[4,-3]]); rows:=3 : cols:=2: vu:=min(seq(max(seq(A[i,j],i=1..rows)),j=1..cols)); vl:=max(seq(min(seq(A[i,j],j=1..cols)),i=1..rows)); print("the upper value is",vu); print("the lower value is",vl); #Solve a system of equations restart: eqs:={y1+2*y2+3*y3-v=0, 3*y1+y2+2*y3-v=0, 2*y1+3*y2+y3-v=0, y1+y2+y3-1=0}; solve(eqs,[y1,y2,y3,v]); #Calculate value using invertible formulas restart: with(LinearAlgebra): A:=Matrix([[0 ,1 ,-2 ],[-1 ,-2 ,3],[2 ,-3 ,-4 ]]); Determinant(A); A:=MatrixAdd( ConstantMatrix(-1,3,3), A ); Determinant(A); B:=A^(-1); J:=Vector[row]([1 ,1 ,1 ]); J.B.Transpose(J); v:=1/(J.B.Transpose(J)); X:=v*(J.B); Y:=v*(B.Transpose(J)); #Calculate value using method 1 for player I restart: with(simplex): cnsts:={2*p[1]+6*p[2]+4*p[3] >=1, 5*p[1]+p[2]+6*p[3] >=1,4*p[1]+3*p[2]+p[3] >=1}; obj:=p[1]+p[2]+p[3]; minimize(obj,cnsts,NONNEGATIVE); #Calculate value and saddle for plyaers I, II restart: with(Optimization): cnsts:={2*p[1]+6*p[2]+4*p[3] >=1, 5*p[1]+p[2]+6*p[3] >=1, 4*p[1]+3*p[2]+p[3] >=1}; obj:=p[1]+p[2]+p[3]; Minimize(obj,cnsts,assume=nonnegative); with(simplex): cnsts:={2*q[1]+5*q[2]+4*q[3]<=1, 6*q[1]+q[2]+3*q[3]<=1, 4*q[1]+6*q[2]+q[3]<=1}; obj:=q[1]+q[2]+q[3]; maximize(obj,cnsts,NONNEGATIVE); #Automatically calc constraints, v, saddle for I restart: with(LinearAlgebra): R:=Matrix([[0.24,0.6,0.6],[0.9,0.36,0.70],[0.9,0.8,0]]); with(Optimization): P:=Vector(3,symbol=p); PC:=Transpose(P).R; Xcnst:={seq(PC[i]>=1,i=1..3)}; Xobj:=add(p[i],i=1..3); Z:=Minimize(Xobj,Xcnst,assume=nonnegative); evalf(1/Z[1]); v:=evalf(1/Z[1]); for i from 1 to 3 do evalf(v*Z[2,i]) end do; #Calc restart: with(LinearAlgebra): R:=Matrix([[0.24,0.6,0.6],[0.9,0.36,0.70],[0.9,0.8,0]]); with(simplex): P:=Vector(3,symbol=p); PC:=Transpose(P).R; Xcnst:={seq(PC[i]>=1,i=1..3)}; Xobj:=add(p[i],i=1..3); Z:=minimize(Xobj,Xcnst,NONNEGATIVE); v:=evalf(1/Z[1]); for i from 1 to 3 do evalf(v*Z[2,i]) end do; #Calc value and saddle with LP restart: with(LinearAlgebra):with(simplex): A:=Matrix([[0,-1,1],[1,0,-1],[-1,1,0]]); X:=Vector(3,symbol= x); B:=Transpose(X).A; cnstx:={seq(B[i] >=v,i=1..3),add(x[i],i=1..3)=1}; maximize(v,cnstx,NONNEGATIVE); Y:=<y[1],y[2],y[3]>; B:=A.Y; cnsty:={seq(B[j]<=w,j=1..3),add(y[j],j=1..3)=1}; minimize(w,cnsty,NONNEGATIVE); restart:with(LinearAlgebra): A:=Matrix([[4,0,2,1],[0,4,1,2],[1,-1,3,0],[-1,1,0,3],[-2,-2,2,2]]); X:=Vector(5,symbol=x); B:=Transpose(X).A; cnst:={seq(B[i]>=v,i=1..4),add(x[i],i=1..5)=1}; with(simplex): maximize(v,cnst,NONNEGATIVE,value); restart: with(LinearAlgebra): A:=Matrix([[4,0,2,1],[0,4,1,2],[1,-1,3,0],[-1,1,0,3],[-2,-2,2,2]]); Y:=Vector(4,symbol=y); B:=A.Y; cnst:={seq(B[i]<=v,i=1..5),add(y[i],i=1..4)=1}; with(simplex): minimize(v,cnst,NONNEGATIVE,value); #Procedure to calc value and saddle for Method 2. restart: with(LinearAlgebra): A:=Matrix([[12,8,-5],[4,4,6],[5,5,5]]); value:=proc(A,rows,cols) local X,Y,B,C,cnstx,cnsty,vI,vII,vu,vl; X:=Vector(rows,symbol=x): Y:=Vector(cols,symbol=y): B:=Transpose(X).A; C:=A.Y; cnsty:={seq(C[j]<=vII,j=1..rows),add(y[j],j=1..cols)=1}: cnstx:={seq(B[i]>=vI,i=1..cols),add(x[i],i=1..rows)=1}: with(simplex): vu:=maximize(vI,cnstx,NONNEGATIVE); vl:=minimize(vII,cnsty,NONNEGATIVE); print(vu,vl); end: value(A,3,3); #Payoff function for discrete duel restart: p1:=x->piecewise(x=0,.2,x=.2,.4,x=.4,.4,x=.6,.4,x=.8,1); p2:=x->piecewise(x=0,0.6,x=.2,.8,x=.4,.8,x=.6,.8,x=.8,1); u1:=(x,y)-> piecewise(x<y,1*p1(x)+(-1)*(1-p1(x))*p2(y)+(0)*(1-p1(x))*(1-p2(y)), x>y,(-1)*p2(y)+(1)*(1-p2(y))*p2(x)+0*(1-p2(y))*(1-p1(x)), x=y,0*p1(x)*p2(x)+(1)*p1(x)*(1-p2(x))+(-1)*(1-p1(x))*p2(x) +0*(1-p1(x))*(1-p2(x))); with(LinearAlgebra): A:=Matrix([[u1(0,0),u1(0,.4),u1(0,.8)], [u1(.4,0),u1(.4,.4),u1(.4,.8)], [u1(.8,0),u1(.8,.4),u1(.8,.8)]]); restart: with (LinearAlgebra): value:=proc(A,rows,cols) local X,Y,B,C,cnstx,cnsty,vI,vII,vu,vl; X:=Vector(rows,symbol=x): Y:=Vector(cols,symbol=y): B:=Transpose(X).A; C:=A.Y; cnsty:={seq(C[j]<=vII,j=1..rows),add(y[j],j=1..cols)=1}: cnstx:={seq(B[i]>=vI,i=1..cols),add(x[i],i=1..rows)=1}: with(simplex): vu:=maximize(vI,cnstx,NONNEGATIVE); vl:=minimize(vII,cnsty,NONNEGATIVE); print(vu,vl); end: City:=Matrix([[12,-9,14],[-8,7,12],[11,-10,10]]); value(City,3,3); #Solution of econ growth model. restart: with (LinearAlgebra): value:=proc(A,rows,cols) local X,Y,B,C,cnstx,cnsty,vI,vII,vu,vl; X:=Vector(rows,symbol=x): Y:=Vector(cols,symbol=y): B:=Transpose(X).A; C:=A.Y; cnsty:={seq(C[j]<=vII,j=1..rows),add(y[j],j=1..cols)=1}: cnstx:={seq(B[i]>=vI,i=1..cols),add(x[i],i=1..rows)=1}: with(simplex): vu:=maximize(vI,cnstx,NONNEGATIVE); vl:=minimize(vII,cnsty,NONNEGATIVE);print(vu,vl); end: A:=a->Matrix([[-2,2*a-1,a-3],[3*a-2,a-3,2*a-1]]); B1:=a->A(a)+ConstantMatrix(5,2,3); value(B1(1.335),2,3); ###This ends Matrix Games commands