R软件与最优化.pdf
55yê5y 8I5y R 55y ãä©Û ^3`z¥A^ Email: weitaiyun@google.com ¥HÆ êÆ 2008 R^3`z¥A^ c 12 ¥HÆ êÆ 55yê5y 8I5y 55y ãä©Û SNJ 1 55yê5y R^3`z¥A^ ¥HÆ êÆ 55yê5y 8I5y 55y ãä©Û SNJ 1 55yê5y 2 8I5y R^3`z¥A^ ¥HÆ êÆ 55yê5y 8I5y 55y ãä©Û SNJ 1 55yê5y 2 8I5y 3 55y R^3`z¥A^ ¥HÆ êÆ 55yê5y 8I5y 55y ãä©Û SNJ 1 55yê5y 2 8I5y 3 55y 4 ãä©Û R^3`z¥A^ ¥HÆ êÆ 55yê5y 8I5y 55y ãä©Û 55yê5y ^3`z¥A^ R ¥HÆ êÆ 55yê5y 8I5y 55y ãä©Û 55yê5y . minz = Cx Ax 6 b x>0 s.t. l6X6u x (1.1) ¥ê! 0 - 1 ê½¢ê ^3`z¥A^ R ¥HÆ êÆ 55yê5y 8I5y 55y ãä©Û 55yê5y . minz = Cx Ax 6 b x>0 s.t. l6X6u x (1.1) ¥ê! 0 - 1 ê½¢ê .·^uµ ^3`z¥A^ R ¥HÆ êÆ 55yê5y 8I5y 55y ãä©Û 55yê5y . minz = Cx Ax 6 b x>0 s.t. l6X6u x (1.1) ¥ê! 0 - 1 ê½¢ê .·^uµ 1 55y¯K ^3`z¥A^ R ¥HÆ êÆ 55yê5y 8I5y 55y ãä©Û 55yê5y . minz = Cx Ax 6 b x>0 s.t. l6X6u x (1.1) ¥ê! 0 - 1 ê½¢ê .·^uµ 1 2 55y¯K ê5y¯K ^3`z¥A^ R ¥HÆ êÆ 55yê5y 8I5y 55y ãä©Û 55yê5y . minz = Cx Ax 6 b x>0 s.t. l6X6u x (1.1) ¥ê! 0 - 1 ê½¢ê .·^uµ 1 2 3 55y¯K ê5y¯K ·Üê5y¯K ^3`z¥A^ R ¥HÆ êÆ 55yê5y 8I5y 55y ãä©Û 55yê5y . minz = Cx Ax 6 b x>0 s.t. l6X6u x (1.1) ¥ê! 0 - 1 ê½¢ê .·^uµ 1 2 3 55y¯K ê5y¯K ·Üê5y¯K 55y!ê5yÑ´·Üê5yA~" ^3`z¥A^ R ¥HÆ êÆ 55yê5y 8I5y Rglpk solve LP(Rglpk) ^3`z¥A^ R 55y ãä©Û ¼ê¦)·Üê5y ¥HÆ êÆ 55yê5y 8I5y Rglpk solve LP(Rglpk) 55y ãä©Û ¼ê¦)·Üê5y ¦e·Üê5y5y¯Kµ ^3`z¥A^ R ¥HÆ êÆ 55yê5y 8I5y Rglpk solve LP(Rglpk) 55y ãä©Û ¼ê¦)·Üê5y ¦e·Üê5y5y¯Kµ maxz = 3x1 + x2 + 3x3 −x1 + 2x2 + x3 6 4 4x2 − 3x3 6 2 s.t. x − 3x2 + 2x3 6 3 1 x1 , x3 ê ^3`z¥A^ R ¥HÆ êÆ 55yê5y 8I5y Rglpk solve LP(Rglpk) 55y ãä©Û ¼ê¦)·Üê5y ¦e·Üê5y5y¯Kµ èXeµ ^3`z¥A^ R maxz = 3x1 + x2 + 3x3 −x1 + 2x2 + x3 6 4 4x2 − 3x3 6 2 s.t. x − 3x2 + 2x3 6 3 1 x1 , x3 ê ¥HÆ êÆ 55yê5y 8I5y Rglpk solve LP(Rglpk) 55y ãä©Û ¼ê¦)·Üê5y ¦e·Üê5y5y¯Kµ èXeµ maxz = 3x1 + x2 + 3x3 −x1 + 2x2 + x3 6 4 4x2 − 3x3 6 2 s.t. x − 3x2 + 2x3 6 3 1 x1 , x3 ê >obj<- c(3, 1, 3) >mat<- matrix(c(-1, 0, 1, 2, 4, -3, 1, -3, 2), nrow = 3) >dir<- rep("<=", 3) >rhs<- c(4, 2, 3) >types<- c("I", "C", "I") ## > Rglpk_solve_LP(obj, mat, dir, rhs, types, max = TRUE) Cþa. ^3`z¥A^ R ¥HÆ êÆ 55yê5y 8I5y Rglpk solve LP(Rglpk) R^3`z¥A^ 55y ãä©Û ¼ê¦)·Üê5y ¥HÆ êÆ 55yê5y 8I5y Rglpk solve LP(Rglpk) ÑÑ(Jµ R^3`z¥A^ 55y ãä©Û ¼ê¦)·Üê5y ¥HÆ êÆ 55yê5y 8I5y Rglpk solve LP(Rglpk) ÑÑ(Jµ 55y ãä©Û ¼ê¦)·Üê5y $optimum [1] 26.75 $solution [1] 5.00 2.75 3.00 $status [1] 0 R^3`z¥A^ ¥HÆ êÆ 55yê5y 8I5y Rglpk solve LP(Rglpk) ÑÑ(Jµ 55y ãä©Û ¼ê¦)·Üê5y $optimum [1] 26.75 $solution [1] 5.00 2.75 3.00 $status [1] 0 1 $optimum R^3`z¥A^ 8I¼ê ¥HÆ êÆ 55yê5y 8I5y Rglpk solve LP(Rglpk) ÑÑ(Jµ 55y ãä©Û ¼ê¦)·Üê5y $optimum [1] 26.75 $solution [1] 5.00 2.75 3.00 $status [1] 0 1 2 8I¼ê `) $optimum $solution R^3`z¥A^ ¥HÆ êÆ 55yê5y 8I5y Rglpk solve LP(Rglpk) ÑÑ(Jµ 55y ãä©Û ¼ê¦)·Üê5y $optimum [1] 26.75 $solution [1] 5.00 2.75 3.00 $status [1] 0 1 2 3 8I¼ê `) Ü6Cþ§ 0 L«¦)¤õ $optimum $solution $status R^3`z¥A^ ¥HÆ êÆ 55yê5y 8I5y 55y ãä©Û $ѯKÚ ¯K ^3`z¥A^ R ¥HÆ êÆ 55yê5y 8I5y 55y ãä©Û $ѯKÚ ¯K $ѯKµAÏ55y¯K ^3`z¥A^ R ¥HÆ êÆ 55yê5y 8I5y 55y ãä©Û $ѯKÚ ¯K $ѯKµAÏ55y¯K ¯Kµ 0 - 1 ê5y¯K ^3`z¥A^ R ¥HÆ êÆ 55yê5y 8I5y 55y ãä©Û $ѯKÚ ¯K $ѯKµAÏ55y¯K ¯Kµ 0 - 1 ê5y¯K ^ lpSolve ±¦)$ѯKÚ ¯K $ѯKµ¼ê lp.transport() ^3`z¥A^ R ¥HÆ êÆ 55yê5y 8I5y 55y ãä©Û $ѯKÚ ¯K $ѯKµAÏ55y¯K ¯Kµ 0 - 1 ê5y¯K ^ lpSolve ±¦)$ѯKÚ ¯K $ѯKµ¼ê lp.transport() lp.transport(cost.mat,direction="min",row.signs,row.rhs,col.signs, col.rhs,presolve=0,compute.sens=0,integers=1:(nc*nr)) ¦) ¯Kµ¼ê lp.assign() ^3`z¥A^ R ¥HÆ êÆ 55yê5y 8I5y 55y ãä©Û $ѯKÚ ¯K $ѯKµAÏ55y¯K ¯Kµ 0 - 1 ê5y¯K ^ lpSolve ±¦)$ѯKÚ ¯K $ѯKµ¼ê lp.transport() lp.transport(cost.mat,direction="min",row.signs,row.rhs,col.signs, col.rhs,presolve=0,compute.sens=0,integers=1:(nc*nr)) ¦) ¯Kµ¼ê lp.assign() lp.assign (cost.mat,direction="min",presolve=0,compute.sens=0) ^3`z¥A^ R ¥HÆ êÆ 55yê5y 8I5y 55y ãä©Û 8I5y . K P − − + + min Pl ( (Wlk dk + Wlk dk )) l = 1, 2, . . . , L k=1 P n + ckj xj + d− k = 1, 2, . . . , K k − dk = gk j=1 P n aij xj 6 ( =, >)bi i = 1, 2, . . . , m s.t. j=1 xj > 0 j = 1, 2, . . . , n − + d k , dk > 0 k = 1, 2, . . . , K ½ ½ ^3`z¥A^ R (2.1) ¥HÆ êÆ 55yê5y 8I5y 55y ãä©Û 8I5y . K P − − + + min Pl ( (Wlk dk + Wlk dk )) l = 1, 2, . . . , L k=1 P n + ckj xj + d− k = 1, 2, . . . , K k − dk = gk j=1 P n aij xj 6 ( =, >)bi i = 1, 2, . . . , m s.t. j=1 xj > 0 j = 1, 2, . . . , n − + d k , dk > 0 k = 1, 2, . . . , K ½ ½ 1 11å8Iå^ ^3`z¥A^ R (2.1) ¥HÆ êÆ 55yê5y 8I5y 55y ãä©Û 8I5y . K P − − + + min Pl ( (Wlk dk + Wlk dk )) l = 1, 2, . . . , L k=1 P n + ckj xj + d− k = 1, 2, . . . , K k − dk = gk j=1 P n aij xj 6 ( =, >)bi i = 1, 2, . . . , m s.t. j=1 xj > 0 j = 1, 2, . . . , n − + d k , dk > 0 k = 1, 2, . . . , K ½ ½ 1 2 11å8Iå^ 11åýéå^ ^3`z¥A^ R (2.1) ¥HÆ êÆ 55yê5y 8I5y llgp(goalprog) ¼ê¦)8I5y 55y ãä©Û 3. (2.1) k)¹e§±òÙzµ . (llgp()¼ê¦ª) minP(W− d− + W+ d+ ) Ax + d− − d+ = g s.t. d− , d+ > 0 x>0 ^3`z¥A^ R (2.2) ¥HÆ êÆ 55yê5y 8I5y llgp(goalprog) ¼ê¦)8I5y 55y ãä©Û 3. (2.1) k)¹e§±òÙzµ . (llgp()¼ê¦ª) minP(W− d− + W+ d+ ) Ax + d− − d+ = g s.t. d− , d+ > 0 x>0 goalprog ^3`z¥A^ R (2.2) ;¦)8I5y¯K§Ø%¼êllgp() ¥HÆ êÆ 55yê5y 8I5y llgp(goalprog) ¼ê¦)8I5y 55y ãä©Û 3. (2.1) k)¹e§±òÙzµ . (llgp()¼ê¦ª) minP(W− d− + W+ d+ ) Ax + d− − d+ = g s.t. d− , d+ > 0 x>0 goalprog (2.2) ;¦)8I5y¯K§Ø%¼êllgp() llgp(coefficients, targets, achievements,...) ^3`z¥A^ R ¥HÆ êÆ 55yê5y 8I5y llgp(goalprog) ¼ê¦)8I5y ^3`z¥A^ R 55y ãä©Û ¥HÆ êÆ 55yê5y 8I5y llgp(goalprog) ¼ê¦)8I5y 55y ãä©Û ¦e8I5y¯Kµ + − + min{P1 (2d+ 1 + 3d2 ), P2 d3 , P3 d4 } − x1 + x2 + d1 − d+ 1 − + x + d − d 1 2 2 + 5x1 + 3x2 + d− − d s.t. 3 3 − + x + x + d − d 1 2 4 4 − + x1 , x2 , d1−4 , d1−4 > 0 ^3`z¥A^ R = 10 = 4 = 56 = 12 ¥HÆ êÆ 55yê5y 8I5y llgp(goalprog) ¼ê¦)8I5y 55y ãä©Û ¦e8I5y¯Kµ + − + min{P1 (2d+ 1 + 3d2 ), P2 d3 , P3 d4 } − x1 + x2 + d1 − d+ 1 − + x + d − d 1 2 2 + 5x1 + 3x2 + d− − d s.t. 3 3 − + x + x + d − d 1 2 4 4 − + x1 , x2 , d1−4 , d1−4 > 0 = 10 = 4 = 56 = 12 èXeµ > coefficients = matrix(c(1,1,5,1,1,0,3,1), 4) > targets = c(10,4,56,12) > achievements = data.frame(objective=1:4, + priority=c(1,1,2,3), p=c(2,3,0,1), n=c(0,0,1,0)) > soln = llgp(coefficients, targets, achievements) ^3`z¥A^ R ¥HÆ êÆ 55yê5y 8I5y 55y ãä©Û Ü©ëê9(J > achievements # objective priority p n 1 1 1 2 0 2 2 1 3 0 3 3 2 0 1 4 4 3 1 0 > soln$converged # [1] TRUE > soln$out # Decision variables X X1 4.000000e+00 X2 6.000000e+00 ^3`z¥A^ R ÑÑ Cþ'&Eêâµ eTRUE§KL«¦`) ) ¥HÆ êÆ 55yê5y 8I5y 55y ãä©Û 55y . minz = f (x) x 6 xu xl 6 b 6 Ax 6 bu s.t. l cl 6 c(x) 6 cu ^3`z¥A^ R (3.1) ¥HÆ êÆ 55yê5y 8I5y 55y ãä©Û 55y . minz = f (x) x 6 xu xl 6 b 6 Ax 6 bu s.t. l cl 6 c(x) 6 cu (3.1) nå^¥µ ^3`z¥A^ R ¥HÆ êÆ 55yê5y 8I5y 55y ãä©Û 55y . minz = f (x) x 6 xu xl 6 b 6 Ax 6 bu s.t. l cl 6 c(x) 6 cu (3.1) nå^¥µ 1½Âå ^3`z¥A^ R ¥HÆ êÆ 55yê5y 8I5y 55y ãä©Û 55y . minz = f (x) x 6 xu xl 6 b 6 Ax 6 bu s.t. l cl 6 c(x) 6 cu (3.1) nå^¥µ 1½Âå 15å ^3`z¥A^ R ¥HÆ êÆ 55yê5y 8I5y 55y ãä©Û 55y . minz = f (x) x 6 xu xl 6 b 6 Ax 6 bu s.t. l cl 6 c(x) 6 cu (3.1) nå^¥µ 1½Âå 15å 1n5å ^3`z¥A^ R ¥HÆ êÆ 55yê5y 8I5y 55y ãä©Û 55y . minz = f (x) x 6 xu xl 6 b 6 Ax 6 bu s.t. l cl 6 c(x) 6 cu (3.1) nå^¥µ 1½Âå 15å 1n5å å^Ú8I¼ê1w¡1w55y ^3`z¥A^ R ¥HÆ êÆ 55yê5y donlp2(Rdonlp2) 8I5y 55y ãä©Û ¼ê¦)1w55y donlp2(par, fn, par.upper=rep(+Inf, length(par)), par.lower=rep(-Inf, length(par)), A = NULL, lin.upper=rep(+Inf, length(par)), lin.lower=rep(-Inf, length(par)), nlin = list(), nlin.upper=rep(+Inf, length(nlin)), nlin.lower=rep(-Inf, length(nlin)), control=donlp2.control(), control.fun=function(lst)return(TRUE), env=.GlobalEnv, name="Rdonlp2") ^3`z¥A^ R ¥HÆ êÆ 55yê5y 8I5y 55y ãä©Û ¦ekå55y¯K: minz = x2 sin y + y 2 cos x −100 < x < 100 −100 < y < 100 1 6 3x − y 6 3 s.t. x+y >2 sin x cos y 6 0.6 xy = 2 R^3`z¥A^ ¥HÆ êÆ 55yê5y 8I5y 55y ãä©Û è SЩ gCþ½Âå p = c(10,10) # par.l= c(-100,-100); par.u = c(100,100) # fn = function(x){ x[1]^2*sin(x[2])+x[2]^2*cos(x[1]) } # A = matrix(c(1,1,3,-1),2,byrow=TRUE) lin.l = c(2,1);lin.u = c(+Inf,3) # nlcon1 = function(x){ x[1]*x[2] } nlcon2 = function(x){ sin(x[1])*cos(x[2]) } nlin.l = c(2,-Inf) nlin.u = c(2,0.6) # ret = donlp2(p, fn, par.u=par.u, par.l=par.l,A,lin.l=lin.l,lin.u=lin.u, nlin=list(nlcon1,nlcon2), nlin.u=nlin.u, nlin.l=nlin.l) 8I¼ê 5å 5å ^3`z¥A^ R ¥HÆ êÆ 55yê5y 8I5y 55y ãä©Û ^éuª{¦)55y R^3`z¥A^ ¥HÆ êÆ 55yê5y 8I5y 55y ãä©Û ^éuª{¦)55y ¢D{ R^3`z¥A^ ¥HÆ êÆ 55yê5y 8I5y 55y ãä©Û ^éuª{¦)55y ¢D{ [ò»{ R^3`z¥A^ ¥HÆ êÆ 55yê5y 8I5y 55y ãä©Û ^éuª{¦)55y ¢D{ 1 2 µ ¼ê µ ¼ê µ ¼ê gafit gafit() genalg rbga() rgenoud rgenoud() [ò»{ 3 R^3`z¥A^ ¥HÆ êÆ 55yê5y 8I5y 55y ãä©Û ^éuª{¦)55y ¢D{ µ ¼ê µ ¼ê µ ¼ê [ò»{ stats µoptim() ¼ê 1 2 3 gafit gafit() genalg rbga() rgenoud rgenoud() 1 R^3`z¥A^ ¥HÆ êÆ 55yê5y igraph 55y ãä©Û 3ãä¥A^ ^3`z¥A^ R 8I5y ¥HÆ êÆ 55yê5y igraph 8I5y 55y ãä©Û 3ãä¥A^ ãä¥A²;¯K: ^3`z¥A^ R ¥HÆ êÆ 55yê5y igraph 8I5y 55y ãä©Û 3ãä¥A^ ãä¥A²;¯K: 6¯K )¤ä¯K á´¯K ^3`z¥A^ R ¥HÆ êÆ 55yê5y igraph 8I5y 55y ãä©Û 3ãä¥A^ ãä¥A²;¯K: 6¯K graph.maxflow(graph, source, target, capacity=NULL) )¤ä¯K minimum.spanning.tree(graph, weights=NULL, algorithm=NULL, ...) á´¯K shortest.paths(graph,v=V(graph),mode=c("all","out","in"),weights) ^3`z¥A^ R ¥HÆ êÆ 55yê5y igraph 8I5y 55y ãä©Û 3ãä¥A^ ãä¥A²;¯K: 6¯K graph.maxflow(graph, source, target, capacity=NULL) )¤ä¯K minimum.spanning.tree(graph, weights=NULL, algorithm=NULL, ...) á´¯K shortest.paths(graph,v=V(graph),mode=c("all","out","in"),weights) ~r§±¯B$/Mï!±Ú©ÛÃã9 kã§ãº:Ú>#Nz±þ igraph ^3`z¥A^ R ¥HÆ êÆ 55yê5y igraph 8I5y 55y ãä©Û 3ãä¥A^ eã´kã§Xã¥Þ¤«§>þêiÙ: R^3`z¥A^ ¥HÆ êÆ 55yê5y igraph 8I5y 55y ãä©Û 3ãä¥A^ eã´kã§Xã¥Þ¤«§>þêiÙ: Á¦e¯Kµ R^3`z¥A^ ¥HÆ êÆ 55yê5y igraph 8I5y 55y ãä©Û 3ãä¥A^ eã´kã§Xã¥Þ¤«§>þêiÙ: Á¦e¯Kµ 1. lº: 0 º: 7 6þ (dã¥^>þêiL Nþ)¶ 2. TëÏã)¤ä¶ 3. Tã¥?¿üº:má´§ (Ä)" R^3`z¥A^ ¥HÆ êÆ 55yê5y 8I5y 55y ãä©Û è >Ý Eã > e = matrix(nc = 3,byrow = TRUE,c(0,1,5, 0,2,4, 0,3,3, 1,5,3, 1,4,5, + 2,5,3, 2,6,2, 3,6,2, 4,1,5, 4,7,4, 5,7,3, 6,7,5))# > g = add.edges(graph.empty(8),t(e[,1:2]), weight = e[,3]) # > tkplot(g) # > graph.maxflow(g, 0,7, capacity = E(g)$weight) # > mst = minimum.spanning.tree(g) # > tkplot(mst) # > tree_min = sum(E(mst)$weight) # > shortest.paths(g, mode = "out") # ±äã 6 )¤ä ±)¤ä O¿ÑÑ)¤ä á´Ý ^3`z¥A^ R ¥HÆ êÆ 55yê5y 8I5y 55y ãä©Û (J ^3`z¥A^ R ¥HÆ êÆ 55yê5y (J 1 6 8I5y 55y ãä©Û 6 > graph.maxflow(g, 0,7, capacity = E(g)$weight) # [1] 11 ^3`z¥A^ R ¥HÆ êÆ 55yê5y (J 1 8I5y 55y 6 ãä©Û 6 > graph.maxflow(g, 0,7, capacity = E(g)$weight) # [1] 11 2 á´Ý µ [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [1,] 0 5 4 3 10 7 5 10 [2,] Inf 0 Inf Inf 5 3 Inf 6 [3,] Inf Inf 0 Inf Inf 3 2 6 [4,] Inf Inf Inf 0 Inf Inf 2 7 [5,] Inf 5 Inf Inf 0 8 Inf 4 [6,] Inf Inf Inf Inf Inf 0 Inf 3 [7,] Inf Inf Inf Inf Inf Inf 0 5 [8,] Inf Inf Inf Inf Inf Inf Inf 0 ^3`z¥A^ R ¥HÆ êÆ 55yê5y (J 8I5y )¤äµ > sum(E(mst)$weight) # [1] 20 55y ãä©Û O¿ÑÑ)¤ä 1 0 3 6 2 5 7 ^3`z¥A^ R 4 ¥HÆ êÆ 55yê5y 8I5y 55y ãä©Û À1û¯K À1û¯K´ãØÚ|Ü`z¥²;¯K§áu NP JK"R ¥§TSP ;¦)À1û¯K§Ø%¼ê solve TSP(): R^3`z¥A^ ¥HÆ êÆ 55yê5y 8I5y 55y ãä©Û À1û¯K À1û¯K´ãØÚ|Ü`z¥²;¯K§áu NP JK"R ¥§TSP ;¦)À1û¯K§Ø%¼ê solve TSP(): solve_TSP(x, method, control) R^3`z¥A^ ¥HÆ êÆ 55yê5y 8I5y 55y ãä©Û À1û¯K À1û¯K´ãØÚ|Ü`z¥²;¯K§áu NP JK"R ¥§TSP ;¦)À1û¯K§Ø%¼ê solve TSP(): solve_TSP(x, method, control) rH¥I¯Kµ R^3`z¥A^ ¥HÆ êÆ 55yê5y 8I5y 55y ãä©Û À1û¯K À1û¯K´ãØÚ|Ü`z¥²;¯K§áu NP JK"R ¥§TSP ;¦)À1û¯K§Ø%¼ê solve TSP(): solve_TSP(x, method, control) rH¥I¯Kµ \·±iI§l®Ñu§Hi·I 34 ?1¥%§ £®"b¢½m´§±À§3/¥¥ ¡þáål§O^´¦o1§á" R^3`z¥A^ ¥HÆ êÆ 55yê5y 8I5y 55y ãä©Û rH¥I´ ^3`z¥A^ R ¥HÆ êÆ 55yê5y 8I5y 55y ãä©Û 50 rH¥I´ 45 ●哈尔滨 长春● ● 乌鲁木齐 40 银川 ● 35 兰州 ● ●石家庄 ● 济南 郑州● ● ● 合肥●南京 ●上海 武汉● ● 杭州 ● ● 南昌 长沙 30 ● 拉萨● 成都 重庆 ● 25 贵阳● 福州● ● 南宁 20 ● 台北 昆明 ●广州 ●● ● 澳门 香港 ● 海口 80 ^3`z¥A^ ●北京 ●天津 太原 ●西宁 ● 西安 R 沈阳● ● 呼和浩特 90 100 110 120 130 ¥HÆ êÆ 55yê5y 8I5y 55y ãä©Û (å Thank you! Email: weitaiyun@gmail.com R^3`z¥A^ ¥HÆ êÆ