2017-10-28 1 views
2

2人のエージェントのチームを互いに見て戦わせる必要があります。 各チームは勝つ機会が50%あります。 エージェントが最初に設定したエネルギーよりも少ないエネルギーを持つ場合、そのエネルギーの50%が失われます。 どうすればいいですか?私のコードは間違っているようです。ありがとうございました。2人のエージェントを戦う方法

to move-teamA 
ask teamA 
[ 
ifelse any? teamB-on patch-right-and-ahead -90 1 or any? teamB-on patch- 
ahead 1 
[ 
    fd 1 
    if energy < advance_energy [set energy (energy/2)]        
    let x random 1 
      if x = 0 [fd 1] 
      if x = 1 [die]] 
end 
+0

あなたのエージェントは死ぬことはなく、エネルギーが失われないという問題はありますか?前者の場合、 'random 1'は常に0を返します。' x'を0または1にするには 'random 2'を実行します。後者の場合、いくつかのセットアップコードのように詳細を含めることができますか?進歩的なエネルギーとは何ですか? [MCVE](https://stackoverflow.com/help/mcve)を提供する際のガイドラインを見て、あなたの質問に答えるのを助けるものを見てみたいかもしれません。 –

+0

こんにちは@LukeC助けてくれてありがとう。 問題はエージェントが決して死ぬことではありません。私は に変更しました。x = 2の場合 x = 0の場合[fd 1] x = 1の場合 コードはコンパイルされますが、何もしません。 –

答えて

1

このアプローチを見てみてください。私はそれがあなたがやろうとしていることのより簡単なバージョンだと思います。 energyのコンポーネントは無視されましたが、どのように設定すればよいか分かりませんが、好きなように配置することができます。

breed [ teamA one-teamA ] 
breed [ teamB one-teamb ] 

to setup 
    ca 
    create-teamA 10 [ 
    setxy random-xcor random-ycor 
    set color red 
    ] 
    create-teamB 10 [ 
    setxy random-xcor random-ycor 
    set color blue 
    ] 
    reset-ticks 
end 

to go 
    ask turtles [ 
    let enemy one-of turtles in-cone 1 90 with [ breed != [breed] of myself ] 
    ifelse enemy != nobody [ 
     ifelse random 2 = 1 [ ; if visible enemy exists, flip coin 
     ask enemy [ die ] ; if 1, enemy dies, I move forward 
     fd 1 
     ] [ 
     die 
     ]      ; if 0, I die 
    ] [ 
     fd 1 
    ]      ; if no enemy, move forward 
    ] 
    tick 
end 
関連する問題