2016-06-27 23 views
1

私は論理的に私のを整理するのに問題がありますが、ifelseという条件がNetLogoにあります。NetLogo:間違ったifelse条件?

私は1年以内に(1ティック)費やす必要のある目標金を持っています。また、私は今年中に収穫する必要のある木材の価値を持っています。このように、3つの可能性が出てくることができます。

  • 1:私は私の木材の目標
  • 2を満たすために十分なお金を持っている:私は私の収穫の目標を達成するために費やす必要がより多くのお金 持っている - 私はお金を節約 - money saved, timber meet
  • 3:私は私の収穫の目標を達成する必要があまりお金を持って - 私は 収穫することができない私はcorreときmoney spent, timber not meet

しかし、私のwhileループは、予想通り、すなわち動作しない十分な私の金を使って木材のゴーラを見て、何らかの理由で私は "money spent, timber not meet"に状態になりますが、これは真実ではありません。条件ifelseとは、どのように私は、出力としての私の3つの期待される出力を持つためにそれらを手配することができますが

してください、あなたは私ので見ることができますか?または、コードをもっと良く書くにはどうすればいいですか?

ありがとうございました!

ながらifelseループ:

while [ real_money_year >= 0 ] [ ;and real_timber_year <= timber_target_year 
     ifelse real_money_year > 0 ; continue if you have enough money 
     [ 
      ifelse real_timber_year < timber_target_year ; is your timber goal meet? 
      [ ; timber goal is not meet and DR have enough money to harvest 
       move-to one-of patches with [patch_timb_stock > 0] 
       pen-down ; see the path 
       set real_timber_year patch_timb_stock + real_timber_year ; increase timber gain after each harvest 
       set real_money_year real_money_year - patch_harvest_cost ; decrease money after each harvest 
       set pcolor magenta 
       print "harvest" 
       ] 
      [;timber value is meet, however we have more money to spend 
       print "money saved, timber meet" 
       stop 
      ] 
     ] 
     [ ; there is not enough money to meet timber goals 
      print "money spent, timber not meet" 
      stop 
     ] 
    ] 

コード全体:あなただけreal_money_year = 0場合、その条件に到達することができるはず

globals [ 


    ;timber_target_year  ; what is defined timber target per year? 
    ;money_target_year  ; how much money do I have to spend per year 

    ; values that DR is able to spend within a year 
    real_timber_year   ; how much do I really harvest in one year 
    real_money_year   ; how much money did I really spend in one year? 
] 

patches-own [ 
    patch_harvest_cost ; what is the cost of harvest of specific patch? 
    patch_timb_stock  ; what is the timber stack of the patch? 
] 

to setup 
    clear-all 
    setup-rangers ; create DR 
    setup-patches ; create forest 
    reset-ticks 
end 

to setup-rangers 
    crt 1 [ 
    set color red ] 
end ; setup ranger 

to setup-patches 
    ask patches [ 
    set pcolor green 
    set patch_harvest_cost p_harvest_cost 
    set patch_timb_stock p_timber_stock 
    ] 
    set real_money_year money_target_year 
end ; setup patches 


to go 
    ask turtles [ 
    harvest 
    ] 
    tick 
end 




to harvest 

    while [ real_money_year >= 0 ] [ ;and real_timber_year <= timber_target_year 
     ifelse real_money_year > 0 ; continue if you have enough money 
     [ 
      ifelse real_timber_year < timber_target_year ; is your timber goal meet? 
      [ ; timber goal is not meet and DR have enough money to harvest 
       move-to one-of patches with [patch_timb_stock > 0] 
       pen-down ; see the path 
       set real_timber_year patch_timb_stock + real_timber_year ; increase timber gain after each harvest 
       set real_money_year real_money_year - patch_harvest_cost ; decrease money after each harvest 
       set pcolor magenta 
       print "harvest" 
       ] 
      [;timber value is meet, however we have more money to spend 
       print "money saved, timber meet" 
       stop 
      ] 
     ] 
     [ ; there is not enough money to meet timber goals 
      print "money spent, timber not meet" 
      stop 
     ] 
    ] 

end 

答えて

2

ので、そのためのテスト。さらにポイントは、あなたはより多くのようなロジックをしたいようです:

while [(real_money_year > 0) and (real_timber_year < timber_target_year)] [ 
    move-to one-of patches with [patch_timb_stock > 0] ;NOTE: assumes such a patch exists! 
    set real_money_year real_money_year - patch_harvest_cost 
    set real_timber_year (patch_timb_stock + real_timber_year) 
] 
ifelse (real_timber_year >= timber_target_year) [ 
    print (word "timber goal met, money saved = " real_money_year) ;possibly 0 
][ 
    print "money spent, timber goal not met" 
] 
+0

クール、ありがとう@アラン、それは動作します! :)はい、私はそれを複雑にしてしまったと思います....私は 'ifelse'が' while'に含まれていないと驚いています。それはなぜですか? – maycca

関連する問題