1

私のシミュレーション モデルには、サーフェス上のエージェントが含まれています。エージェントは で表されclass Agent、その場所は で表され、class Point表面自体は で表されclass Surfaceます。各ポイントは、実際には単なる数字のペアです。

エージェントの動きをモデル化するには、エージェントがどのサーフェス上にいるかを知る必要があります (たとえば、トーラスでは土地の端にヒットすることはありませんが、円柱ではヒットします)。

私の質問は、オブジェクトclass Pointへの参照をインスタンス属性として に追加する必要があるかどうかです。Surface

もしclass Pointそうすると、より複雑になり、効率が低下します (数値のペアを扱う代わりに、数値のペアと参照を扱うことになります)。class Surfaceこれは、1 回のプログラム実行でインスタンス化されるインスタンスが 1 つしかないため、特に厄介です。

class Agentそうしないと、moveメソッドを提供できません。代わりに、サーフェスと個々のエージェントの両方を認識している外部クラスからエージェントの動きをモデル化する必要があります。このアプローチは、論理的にあまり魅力的ではないようです。

4

1 に答える 1

1

追加の属性を追加することが効率の問題になる理由はわかりません。速度には影響せず、オブジェクトのサイズが 10 バイト程度増加するだけです。何百万人ものエージェント (Mssterrr Annderssssonnn) を扱っていない限り、私はそれについて心配しません。

または、モジュール内でローカルとして作成され、モジュール メソッドを介してアクセスされる単一のサーフェスを使用することもできます (グローバルよりも少しきれいです)。次のようなものです:

 import TheSurface
 class Agent:
  ...
   def Move(self,x,y):
     surface = TheSurface.getSurface()
     surface.canIMoveTo(x,y)
     ....

TheSurface.py には、サーフェスを作成するある種の初期化メソッドがあり、プログラムの開始時に呼び出す必要があります。@DesignPattern の人々: これは「シングルトン」パターンですか?

Surface を使用してエージェントを作成し、それを属性として保存することをお勧めします。ただし、なぜそれを Point に追加するのかわかりません。

構造は次のようなものです。

  • エージェントは表面にいます
  • エージェントはポイントにいます

したがって、ポイントがサーフェス上にあると推測でき、それを個別にモデル化する必要はありません。おそらくエージェントに何らかの形で関与していないポイントを扱っている場合を除きますが、その場合はサーフェスのコンテキストが得られます。とりあえず。それは常に「そうです、今度はこのサーフェスにいくつかのツリーを配置する必要があります - createTree(surface,point)」などです。サーフェス上のすべてのものにはサーフェスとポイントがあります。

于 2011-01-31T08:53:34.243 に答える