2016-06-27 3 views
1

논리적으로 내 을 구성하는 데 문제가 있습니다. 반면에ifelse 조건이 NetLogo에 있습니다.NetLogo : 올바른 상태 및 ifelse 조건?

나는 1 년 (1 틱) 이내에 지출해야하는 목표 돈이 있습니다. 또한, 나는 올해 안에 수확 할 필요가있는 목재 가치를 목표로 삼았습니다. 따라서, 3 가능성이 등장 할 수

  • 1 : 나는
  • 이 내 목재 목표
  • 을 충족하기에 충분한 돈을 가지고 : 나는 내 수확의 목표를 달성하기 위해 지출해야 할 더 많은 돈 이 - 나는 돈을 절약을 - money saved, timber meet
  • 3 : 나는 내 수확의 목표를 달성하기 위해 필요한 적은 돈을 가지고 - 나는 수확 할 수없는 내가 corre 때 money spent, timber not meet

하지만, 내 while 루프가 예상대로 즉 작동하지 않습니다 충분 내 돈을 보내고 목재 골란을 만난다. 웬일인지 내가 "money spent, timber not meet"에 이르게된다. 그것은 사실이 아니다. 에서 볼 수

제발, 내 동안과 내 3 개 예상 출력 출력으로 가지고 그것들을 배열 할 수있는 방법 조건 ifelse? 또는 코드를 더 잘 작성하려면 어떻게해야합니까?

감사합니다.

그동안 및 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 
     ] 
    ] 

전체 코드 :

그것에 대해
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

에만 real_money_year = 0 경우 해당 조건에 도달 할 수 있어야한다, 그래서 시험. 더 요점은, 당신은 논리가 더 많은 것을 좋아하는 것을 보이는 것을 보입니다 :

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