2017-02-23 10 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]+" "); 
     } } 

を、私は昏睡状態の後に2つの番号にそれを丸めます。

助けてくださいか?

+0

ガウス分布が必要ですか?あなたが生成しているのは一様な分布です。また、ガウス分布は有界ではないので、切り捨てガウス分布が必要ですか?最後に、「2つの数字に丸める」とはどういう意味ですか?値を{-25.00、-24.99、-24.98、...、+ 24.98、+ 24.99、+ 25.00}から選択することを意味しますか? –

+0

私は進化戦略アルゴリズムの正規分布を生成しています。はい、私は[-25.00、....、+ 25.00]を意味します。 – Nori

+0

正規分布の無限の尾をどのように扱いたいですか? +/- 25で切り捨てたいですか?どの平均と標準偏差が分布にしたいですか? (私は0を意味していると仮定していますが、切り捨てている場合は標準偏差についての情報はありませんし、平均についての保証もありません)。 –

答えて

0

コードの最も基本的な問題は、すべてのiに1つのランダム値を生成して使用することです。しかし、あなたのコードには他の問題もあります。

Gaussian(a.k.a. normal)分布には無限のテールがあるため、ランダム変数を[-25、+25]に制限したい場合はガウス分布にすることはできません。典型的な方法は、truncated normal distributionを使用することです。このようなランダム変数を生成するライブラリがいくつかあります。これらはWeb検索で見つけることができます。 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を尊重したnextGaussian()でシグマを含む別のランダムベクトルに関連付ける必要があります。その\t 私は、sphere fitness function sum xiを使って、[1、n]のiに対してri〜N(0、σ^ 2)を持つランダムなベクトルrを生成することを意味する進化戦略(1 + 1)^2、私の範囲は+/- 25です。私のアルゴリズムとadabtに関するコードはありますか? – Nori

+0

@Nori - まあ、ランダムなベクトル_r_を生成するためにここで提案するコードのように思えます。 (これは、 'setGene(i、value)'が_r_のi番目の要素を 'value'に設定するものと仮定しています)。結果の各要素はおよそN(n、σ^ 2) 25。 –

+0

素晴らしい、私の質問はばかげているようだが、シグマはどうですか? nextGaussianメソッドをランダムに実行しても、なぜ私たちはそれを割り当てなければならないのですか?私の場合、この 'val = sigma * rng.nextGaussian();'は私の球の関数にどのように影響しますか? ) – Nori