私は自分のプロジェクトのために単純な遺伝的アルゴリズム ライブラリを学習して実装しようとしています。現時点では、集団の進化、選択の準備ができており、Java と Scala で私の遺伝的進化エンジンにガウス突然変異演算子(GMO) のような単純で優れた突然変異演算子を実装しようとしています。
Gaussian Mutation Operator (GMO) に関する情報を論文A Mutation operator based on a Pareto ranking for multi-objective evolutionary algorithm (PM Mateo, I. Alberto) の 6 ページと 7 ページに見つけました。
しかし、Java でこのガウス突然変異演算子とこの演算子の他の有用なバリアントを実装する方法に関する他の情報を見つけるのに問題があります。私は何をすべきか?
random Java utilの関数を使用していrandom.nextGaussian()
ますが、このメソッドは 0 から 1 の間の乱数しか返しません。
そう、
a) この場合、戻り値の精度を変更するにはどうすればよいですか? (たとえば、ステップが 0.00001 に等しい 0 と 1 の間のランダムな倍精度数を取得したい。)
b) また、-1 と 1 の間ではなく、自分のゲノムの値についてローカルで検索したいので、この関数に対してどのようにmu
andを指定できますか? どうすればそのローカルな研究を自分のゲノム値に合わせて調整できますか?sigma
調査の結果、b) の質問に対する答えが見つかりました。次のようにガウス乱数を置き換えることができるようです。
newGenomeValue = oldGenomeValue + (( gaussiandRndNumber * sigma ) + mean )
ここでmean
= 私のゲノム値。
( 「How can I generate random numbers with a normal or Gaussian distribution?」の一番下のページの方法を参照してください。)