2014-10-16 2 views
0

이전 질문에서 : How do I put arena limits on a random walk? 커뮤니티는 세트 경기장에서 무작위 도보 기능을 만드는 것을 도왔습니다. 이 기능은 지역을 통과하는 물고기를 시뮬레이트하기 위해 고안되었지만 이제는 특정 조건이 충족 될 때 언제 정지할지 결정해야합니다.랜덤 보행시 정지 기능 통합

루프 기능 직전에 넣은 코드는 {{if(z>P)break}}입니다. 내가 이해할 수있는 것은 "이 조건이 만족되면 멈추고, 그렇지 않으면 최대 단계 수에 도달 할 때까지 계속 진행하십시오.

대신 무작위 도보가 결정적이되도록했습니다 (항상 동일한 경로를 얻고 결코는) step.max 전에 중지하지

홈페이지 질문 :. 나는 랜덤 워크 (random walk)를 어떻게 알 수 있습니까 중지하는 경우 Z> P 참고로

: 사전에

step.max<-125 
step.prob<-function(n.times=step.max){ 
draw=sample(0:100,1,replace=T) 
CS<-sample(draw,size=1,replace=TRUE) 
CS.max<-100 
step.num<-15 
SP<-((CS/CS.max)*(1-(step.num/step.max))+(step.num/step.max))*100 
if(SP>P){stop('Settled at step number',P)}else{SP 
    } 
} 
z<-step.prob(1) #renaming the above function to be easier to reference later 
P<-80 #preset cutoff point for value z, ranges from 0-100 
walkE <- function(n.times=125, 
       xlim=c(524058,542800), 
       ylim=c(2799758,2818500), 
       start=c(525000,2810000), 
       stepsize=c(4000,4000)) { 
    plot(c(0,0),type="n",xlim=xlim,ylim=ylim, 
      xlab="Easting",ylab="Northing") 
    x <- start[1] 
    y <- start[2]  
    steps <- 1/c(1,2,4,8,12,16) 
    steps.y <- c(steps,-steps,0) 
     steps.x <- c(steps,-steps[c(1,5,6)],0) 
    points(x,y,pch=16,col="red",cex=1) 
for (i in 1:n.times) { 
     repeat { 
      xi <- stepsize[1]*sample(steps.x,1) 
      yi <- stepsize[2]*sample(steps.y,1) 
      newx <- x+xi 
      newy <- y+yi 
      if (newx>xlim[1] && newx<xlim[2] && 
       newy>ylim[1] && newy<ylim[2]) break 
        } 
     lines(c(x,newx),c(y,newy),col="blue") 
     x <- newx 
     y <- newy 
if(z>P){stop(points(newx,newy,col="green",cex=1))} 
         #this is where I want it to stop if z>P 
     else 
if(z<P){points(newx,newy,pch=1,col="blue",cex=1)} 
    else 
if(step.max){points(newx,newy,pch=16,col="green",cex=1)} 
set.seed(101)} 
} 
walkE(step.max) #run above random walk function walkE looped for the step.max number 

감사합니다! !

답변

0

stop(...) 함수를 사용자 정의 step.prob 함수에 삽입하여 쉽게 구현할 수 있습니다.

step.prob<-function(n.times=step.max, p){ 
    draw=sample(0:100,1,replace=T) 
    CS<-sample(draw,size=1,replace=TRUE) 
    CS.max<-100 
    CS.max 
    step.num<-15 
    SP<-((CS/CS.max)*(1-(step.num/step.max))+(step.num/step.max))*100 
    if(SP > p) { 
    stop('Your random walk exceeded ', p) 
    } else { 
    SP 
    } 
} 

break 명령을 살펴보십시오.

그래서, 랜덤 워크 (random walk) 값이> P 일 때 :

step.prob(p=300000) 
# Error in step.prob(p = 3) : Your random walk exceeded 3 

그리고 당신은 페이지에 함수에 의해 반환 된 값을 설정하려면 그냥 stop 명령 앞에 SP <- p에 추가 할 수 있습니다.

+0

n8sty에 대한 의견을 보내 주셔서 감사합니다. 귀하의 제안은 문제의 일부를 수정하는 것으로 보이지만 여전히 결정 론적 결과를 얻고 있습니다 (확률 론적이어야 함). 왜 그런 단서가 있니? 코드를 업데이트하여 모든 것을 성가신 영광으로 볼 수 있습니다. 감사!! – Jesse001

+0

@ Jesse001 당신이 여기서 성취하려는 것을 정말로 모르겠습니다. 함수가'step.max' 나'p' 전에 멈추길 원합니까? 당신의 코드에있는 어떤 것도 특별히 명확하지 않습니다.'set.seed'를 사용하여 예상되는 출력을 포함 시키십시오. – n8sty

+0

내가하고 싶은 것은 각 단계 전에 위에서 쓴대로 step.prob로 정의 된 함수 z를 실행하는 것입니다. 미리 설정된 컷오프 포인트 인 z> P이면 걷는 것을 멈춰야합니다. 그 조건이 만족스럽지 않으면 walk가 step.max에 도달 할 때까지 계속 진행해야합니다. 위 코드를 편집하고 어젯밤에 약간의 작업을 진행했습니다. – Jesse001