0

NetLogo でのプログラミングについて少し助けが必要です。ロボットが迷宮を歩かなければなりませんでした。ロボットは、黒いパッチ (紫のパッチは障害物を表します) の上のみを歩くことができます。目標またはゴールラインを表す緑色のパッチが 1 つあります。ロボットは前後左右に移動し、目標に向かって進まなければなりません。

その手順を1回だけ呼び出すと、ロボットがターゲットまで歩くようにする手順「検索」を作成する必要がありました。ロボットは周りを見回して、常により広いスペースのある方向に移動する必要があります。彼の周りのすべての方向に同じ数の空きパッチがある場合、ロボットはターゲットに向かう方向をランダムに選択する必要があります。ターゲットに来たら、停止する必要があります。

3 つの手順 (check-forward、check-left、check-right) を作成して、無料のパッチの数に関する情報と、エージェントがいつターゲットに到達したかを確認する手順 check-target を取得しました。手順「検索」を作成しましたが、機能する場合と機能しない場合があります..どこに問題があるのか​​ わかりません。私が間違っていることを教えてください!

これは写真です: http://i.imgur.com/LPU2dmN.jpg

これが私のコードです:

breed [agents agent] 
agents-own[
target      // finish
num_forward //number of free patches forward
num_right   //number of free patches right
num_left    //number of free patches left
chance]     //number of directions where there is the same number of free patches    
              (pick one of them randomly)

to check-target
ask agent 0[ifelse [pcolor = green] of patch-here
[set target true]
[set target false]]
end

to check-forward
ask agent 0 [ifelse [pcolor] of patch-ahead 1 = black or [pcolor] of patch-ahead 1 = 
green
[ifelse [pcolor] of patch-ahead 2 = black or [pcolor] of patch-ahead 2 = green
[set num_forward 2]
[set num_forward 1]]
[set num_forward 0]]
end

to check-left
ask agent 0 [ifelse [pcolor] of patch-left-and-ahead 90 1 = black or [pcolor] of patch 
left-and-ahead 90 1 = green
[ifelse [pcolor] of patch-left-and-ahead 90 2 = black or [pcolor] of patch-
left-and-ahead 90 2 = green
[set num_left 2]
[set num_left 1]]
[set num_left 0] ]
end

to check-right
ask agent 0 [ifelse [pcolor] of patch-right-and-ahead 90 1 = black or [pcolor] of 
patch-right-and-ahead 90 1 = green
[ifelse [pcolor] of patch-right-and-ahead 90 2 = black or [pcolor] of patch-right-
and-ahead 90 2 = green
[set num_right 2]
[set num_right 1]]
[set num_right 0]]
end

to search 
ask agent 0[
while [target = false][
if((num_forward = 2 and num_right = 2 and num_left = 2) or (num_forward = 1 and 
num_right = 1 and num_left = 1))
[set chance random 3
if chance = 0 [forward] //procedure 'forward' moves by one patch forward
if chance = 1 [right]   //procedure 'right' rotates 90° right and moves forward
if chance = 2 [left]]   //procedure 'left' rotates 90° left and moves forward

if(num_forward > num_left and num_right > num_left and num_forward = 2 and num_right = 
2) or (num_forward > num_left and num_right > num_left and num_forward = 1 and 
num_right = 1)
[set chance random 2
ifelse chance = 0 [forward][right]]

if(num_forward > num_right and num_left > num_right and num_forward = 2 and num_left = 
2) or (num_forward > num_right and num_left > num_right and num_forward = 1 and 
num_left = 1)
[set chance random 2
ifelse chance = 0 [forward][left]]

if(num_right > num_forward and num_left > num_forward and num_right = 2 and num_left = 
2) or (num_right > num_forward and num_left > num_forward and num_right = 1 and 
num_left = 1)
[set chance random 2
ifelse chance = 0 [right][left]]

if(num_forward > num_right and num_forward > num_left)[forward]
if(num_right > num_left and num_right > num_forward)[right]
if(num_left > num_forward and num_left > num_right)[left]
if(num_forward = 0 and num_right = 0 and num_left = 0)[backward]  //procedure 
                                                                  'backward' moves by 
                                                                   one patch back
check-target]]
end
4

2 に答える 2

0

あなたの質問は、あなたが以前に尋ねた別の質問で Seth によって回答されています。

迷宮の NetLogo カメ

回答があったときに最新情報を入手するには、質問を購読する必要があるかもしれません:)

于 2013-11-04T11:05:49.083 に答える