Advertisement
Guest User

Untitled

a guest
Aug 23rd, 2019
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.74 KB | None | 0 0
  1. my.non.negative <- function(a){
  2. ret <- max(a,0)
  3. return(ret)
  4. }
  5. my.x.mut <- function(X,B,k=1:length(B[,1])){
  6. ret <- list()
  7. n <- length(B[,1])
  8. nk <- length(k)
  9. for(i in 1:nk){
  10. ret[[i]] <- X
  11. tmp1 <- 1
  12. tmp2 <- 1
  13. for(j in 1:n){
  14. if(j != k[i]){
  15. b1 <- B[j,k[i]]
  16. b2 <- B[k[i],j]
  17. if(b1 > b2){
  18. tmp1 <- tmp1 * X[[j]]^my.non.negative(b1)
  19. tmp2 <- tmp2 * X[[j]]^my.non.negative(b2)
  20. }else{
  21. tmp1 <- tmp1 * X[[j]]^my.non.negative(b2)
  22. tmp2 <- tmp2 * X[[j]]^my.non.negative(b1)
  23. }
  24.  
  25. }
  26. }
  27. tmp <- 1/X[[k[i]]] * (tmp1 + tmp2)
  28. ret[[i]][[k[i]]] <- tmp
  29. ret[[i]][[k[i]]] <- Simplify(ret[[i]][[k[i]]])
  30. }
  31. if(nk==1){
  32. return(ret[[1]])
  33. }else{
  34. return(ret)
  35. }
  36. }
  37.  
  38. my.y.mut <- function(Y,B,k=1:length(B[,1])){
  39. ret <- list()
  40. n <- length(B[,1])
  41. nk <- length(k)
  42. for(i in 1:nk){
  43. ret[[i]] <- Y
  44. Yk <- Y[[k[i]]]
  45. for(j in 1:n){
  46. if(j == k[i]){
  47. ret[[i]][[j]] <- 1/Yk
  48. }else{
  49. b <- B[j,k[i]]
  50. ret[[i]][[j]] <- Y[[j]] * (1+Yk^sign(b))^b
  51. }
  52. }
  53. ret[[i]][[j]] <- Simplify(ret[[i]][[j]])
  54. }
  55. if(nk==1){
  56. return(ret[[1]])
  57. }else{
  58. return(ret)
  59. }
  60.  
  61. }
  62. my.Ebira.mut <- function(B,ks=1:length(B[,1])){
  63. ret <- list()
  64. n <- length(ks)
  65. for(k in 1:n){
  66. ret[[k]] <- matrix(0,n,n)
  67. for(i in 1:n){
  68. for(j in 1:n){
  69. if(i == ks[k] | j == ks[k]){
  70. ret[[k]][i,j] <- (-1) * B[i,j]
  71. }else{
  72. tmp1 <- B[i,ks[k]]
  73. tmp2 <- -B[ks[k],j]
  74. if(tmp1 <= 0){
  75. tmp1 <- 0
  76. }
  77. if(tmp2 <= 0){
  78. tmp2 <- 0
  79. }
  80. ret[[k]][i,j] <- B[i,j] + tmp1 * B[ks[k],j] + tmp2 * B[i,ks[k]]
  81. }
  82. }
  83.  
  84. }
  85. }
  86. if(n == 1){
  87. return(ret[[1]])
  88. }
  89. return(ret)
  90. }
  91. # PDFの箙変換則をRのベクトル演算に合わせて記載
  92. my.Ebira.mut2 <- function(B,ks=1:length(B[,1])){
  93. ret <- list()
  94. n <- length(ks)
  95. for(k in 1:n){
  96. ret[[k]] <- B
  97. # 変わるのはk行・k列
  98. out.K <- B[ks[k],]
  99. in.K <- B[,ks[k]]
  100. # 非負のみを問題にする
  101. in.K.nn <- in.K * (in.K >= 0)
  102. out.K.nn <- out.K * (out.K >= 0)
  103. prod.K <- matrix(in.K.nn,ncol=1) %*% matrix(out.K.nn,nrow=1)
  104.  
  105. ret[[k]] <- ret[[k]] + prod.K + (-1) * t(prod.K)
  106.  
  107. ret[[k]][,ks[k]] <- (-1) * in.K
  108. ret[[k]][ks[k],] <- (-1) * out.K
  109. }
  110. if(n == 1){
  111. return(ret[[1]])
  112. }
  113. return(ret)
  114. }
  115. # Xの双対変数を作る
  116. my.YfromX <- function(X,B){
  117. n <- length(X)
  118. Y <- list()
  119. for(i in 1:n){
  120. Y[[i]] <- 1
  121. for(j in 1:n){
  122. if(j != i){
  123. Y[[i]] <- Y[[i]] * X[[j]]^B[j,i]
  124. }
  125. }
  126. }
  127. Y
  128. }
  129.  
  130.  
  131. n <- 5
  132. B <- matrix(sample(0:6,n^2,replace=TRUE),n,n)
  133. B <- B + (-1) * t(B)
  134.  
  135. # Symbolic calculation
  136. library(Ryacas)
  137.  
  138. X <- list()
  139. Y <- list()
  140. for(i in 1:n){
  141. tmp <- paste("x",i,sep="")
  142. X[[i]] <- Sym(tmp)
  143. tmp <- paste("y",i,sep="")
  144. Y[[i]] <- Sym(tmp)
  145.  
  146. }
  147.  
  148. Ebira.x <- my.x.mut(X,B)
  149. Ebira.y <- my.y.mut(Y,B)
  150.  
  151. # n=2で、変異のために選択するノードを交互にする
  152. # 交互にしないとき=2連続で同じノードで変異すると、それは元に戻る性質を持っている
  153.  
  154.  
  155. X <- list()
  156. for(i in 1:n){
  157. tmp <- paste("x",i,sep="")
  158. X[[i]] <- Sym(tmp)
  159. }
  160.  
  161. B <- matrix(c(0,-1,1,0),2,2)
  162.  
  163. ks <- rep(c(1,2),2)
  164.  
  165. x.series <- list()
  166. x.series[[1]] <- X
  167. print(x.series[[1]])
  168. for(i in 1:length(ks)){
  169. x.series[[i+1]] <- my.x.mut(x.series[[i]],B,k=ks[i])
  170. print(x.series[[i+1]])
  171. }
  172.  
  173. # Y変数をx変数の双対にする
  174.  
  175. n <- 3
  176. B <- matrix(sample(0:6,n^2,replace=TRUE),n,n)
  177. B <- B + (-1) * t(B)
  178.  
  179.  
  180. X <- list()
  181. Y <- list()
  182. for(i in 1:n){
  183. tmp <- paste("x",i,sep="")
  184. X[[i]] <- Sym(tmp)
  185. }
  186.  
  187.  
  188. Y <- my.YfromX(X,B)
  189.  
  190. Ebira.x <- my.x.mut(X,B,k=1)
  191.  
  192.  
  193. B. <- my.Ebira.mut2(B)
  194.  
  195. Y. <- my.YfromX(Ebira.x,B.[[1]])
  196.  
  197.  
  198. Ebira.y <- my.y.mut(Y,B,k=1)
  199.  
  200. # どの項も同一だが、Simplify()が不完全なので
  201. # そのように見えにくいかも
  202. for(i in 1:n){
  203. print(Simplify(Y.[[i]]/Ebira.y[[i]]))
  204. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement