3

私が開発している環境シミュレーション中に問題が発生しました。問題を強調するために、以下のコードを添付しました。要約すると、品質の異なる 3 つの場所があるとします。動物は最高品質の場所に移動したいと考えていますが (数値が大きいほど品質が高くなります)、0.1 以下の違いの品質を区別できません (これはより大きなループの一部であるため、このプロセスは次のようになります)。何千回も繰り返されます)。

たとえば、この場合 (個人が場所 #2 から開始する場合):

a<-matrix(c(1,2,3,.6,.9,.7),nrow=2,ncol=3,byrow=TRUE)
attributes(a)$dimnames<-list(c("Location","Quality"),c())
a

          [,1] [,2] [,3]
Location  1.0  2.0  3.0
Quality   0.6  0.9  0.7

その個人は明らかに場所 2 を最良と判断し、そこにとどまるでしょう。

この場合 (個人が場所 #2 から開始する場合):

a<-matrix(c(1,2,3,.5,.7,.8),nrow=2,ncol=3,byrow=TRUE)
attributes(a)$dimnames<-list(c("Location","Quality"),c())
a

          [,1] [,2] [,3]
Location  1.0  2.0  3.0
Quality   0.5  0.7  0.8

個人は場所 #2 と #3 の品質を明確に区別することができず (差が検出されるには少なくとも 0.1 が必要なため)、これにより別の行動が引き起こされます (個人が # 2、またはこの例には存在しないより多くの場所を評価します)。ただし、場所 #2 と #3 の品質は近いが、場所 #1 はオプションとして削除されることを知っておく必要があります。

この場合 (再び、場所 #2 から開始)

a<-matrix(c(1,2,3,.9,.7,.6),nrow=2,ncol=3,byrow=TRUE)
attributes(a)$dimnames<-list(c("Location","Quality"),c())
a
         [,1] [,2] [,3]
Location  1.0  2.0  3.0
Quality   0.9  0.7  0.6

個人は場所 2 から場所 1 に移動します。

この場合 (再び、場所 #2 から開始)

a<-matrix(c(1,2,3,.8,.7,.6),nrow=2,ncol=3,byrow=TRUE)
attributes(a)$dimnames<-list(c("Location","Quality"),c())
a
         [,1] [,2] [,3]
Location  1.0  2.0  3.0
Quality   0.8  0.7  0.6

その個人は、ロケーション #1 との違いに基づいてロケーション #3 を排除し、ロケーション #2 に留まるか #1 に移動するかを選択できなくなります。

場所の相対的な品質を比較し、個人が場所を区別できない場合 (もしそうなら、どの場所を選択しているか)、または 1 つの場所が明らかに大きい (もしそうなら、別の行列のその場所に個人を移動できるように場所番号を返す必要がある)。

4

1 に答える 1

0

Location のクラスを作成することをお勧めします。rでどうやってそれを行うのかわかりませんが、その部分を理解できると確信しています。

これは私が提案するアルゴリズムです:

  • 位置ごとに、他の位置ごとに、有機体が品質の違いを認識できる場合は、ランクの低いものを「悪い」とマークします (おそらくブール配列を使用します。これにはオブジェクト内でフラグを使用しないでください。良いデザイン)
  • これらの for ループでは、フラグがマークされた Location を取得する場合は continue ステートメントを使用して、時間を節約します。
  • 次に、リストをもう一度調べて、フラグがマークされていないすべてのリストを新しいリストにコピーします。
  • リストの長さを調べて、それを意思決定に使用します。
于 2012-05-16T18:57:10.430 に答える