2017-02-23 1 views
-3

이중 숫자 [-25, + 25]를 생성하고 싶지만 저에게는 효과가 없습니다!. 이 코드 사용 :랜덤 더블 가우스 분포

//=============== method set random individuals (genes)====================== 
public void rand_gene() { 
    double rand = new Random().nextDouble(); 
    for (int i=0 ;i<size;i++) { 
     this.setGene(i, -25+(rand)); 
    System.out.print(genes[i]+" "); 
     } } 

을 나는 혼수 상태 후이 개 번호로 반올림합니다.

어떤 도움이 필요합니까?

+0

가우스 분포가 필요합니까? 당신이 생성하는 것은 균일 한 분포입니다. 또한 Gaussian은 한정되어 있지 않으므로 잘린 Gaussian 분포를 원하십니까? 마지막으로, "2 자리 숫자로 반올림"한다는 것은 무엇을 의미합니까? 값을 {-25.00, -24.99, -24.98, ..., + 24.98, + 24.99, +25.00} 중에서 선택 하시겠습니까? –

+0

나는 진화 전략 알고리즘을위한 정규 분포를 생성하고있다. 그렇다. [-25.00, ...., + 25.00]을 의미한다. – Nori

+0

정규 분포의 무한한 꼬리를 어떻게 다루고 싶습니까? +/- 25에서 자르시겠습니까? 분포에 대해 평균과 표준 편차는 무엇입니까? (나는 0을 의미한다고 가정하고 있지만 자르면, 표준 편차에 대한 정보가없고, 평균에 대한 보장도 없다.) 당신이 필요로하는 것에 대한 자세한 내용을 제공해주십시오.) –

답변

0

코드에서 가장 근본적인 문제는 임의의 단일 값을 생성하고 모두 i에 사용한다는 것입니다. 하지만 코드에는 다른 문제가 있습니다.

가우시안 분포는 무한한 꼬리를 가지므로 임의의 변수를 [-25, +25]로 제한하려면 가우스 분포가 될 수 없습니다. 일반적인 접근 방법은 truncated normal distribution을 사용하는 것입니다. 웹 검색으로 찾을 수있는 임의의 변수를 생성하는 여러 라이브러리가 있습니다. Stochastic Simulation in Java 라이브러리부터 시작하거나 Broadwick (특히 TruncatedNormalDistribution class)부터 시작합니다.

불쌍한 사람의 근사치는 다음과 같이 정규 분포 생성기로 간단한 샘플 거부 알고리즘을 사용하는 것입니다.

당신이 값이 — 쉽게 100을 곱하여 가장 가까운 정수로 반올림 한 다음 100

로 나누어 수행됩니다 2 소수점 반올림 할 다른 문제 — 다음은 당신이 원하는 일을 필자의 :

// initialize a random number generator 
// for production work, consider using a better RNG than java.util.Random 
private Random rng = new Random(); 
private double sigma = /* desired standard deviation */ 

public void rand_gene() { 
    for (int i = 0; i < size; ++i) { 
     setGene(i, nextRand()); 
    } 
} 

/** Return a random Gaussian in the range [-25, +25] */ 
private double nextRand() { 
    double val; 
    do { 
     val = sigma * rng.nextGaussian(); 
     val = Math.round(val * 100)/100.0; 
    } while (val < -25 || val > 25); 
    return val; 
} 
+0

thx를 회신하는데 쓰지 만, 나는 아직도 내가 뭘하는지 알고 혼란 스럽다. 그 \t 나는 sphere fitness function sum xi를 사용하여 [1, n]에서 i에 대해 ri ~ N (0, σ^2)를 갖는 임의의 벡터 r을 생성한다는 것을 의미하는 진화 전략 (1 + 1)^2, 내 범위는 +/- 25입니다. 알고리즘이 Adabt에 관한 코드입니까? – Nori

+0

@ 노리 - 글쎄, 내가 여기서 제안하는 코드는 임의의 벡터 _r_를 생성하는 데 사용해야한다고 들린다. (그것은 setGene (i, value)가 _r_의 i 번째 요소를 value로 설정한다고 가정합니다.) 결과의 각 요소는 대략 N (n, σ^2)이 될 것이고 +/- 25. –

+0

위대한, 내 질문 어리석은 보인다하지만 시그마는 어떨까요? 왜 우리는 nextGaussian 메서드를 무작위로 수행 할지라도 할당해야합니다! 내 경우에는이 'val = sigma * rng.nextGaussian();'이 내 구의 함수에 어떻게 영향을 미칠 수 있습니까?) – Nori

관련 문제