Как задать условие IFELSE в сочетании с AND и максимально достижимым значением? - PullRequest
0 голосов
/ 16 апреля 2019

Мои черепахи - фирмы, и у них есть собственные черепахи, которые являются фирмой на уровне автоматизации. При настройке этот параметр является случайным значением от 0 до 1.

На ходу оно пропорционально возрастает вместе с инвестициями в НИОКР. Он должен подняться до 0,99, так как достигается полная автоматизация на уровне 99%. Вот почему я добавил условие о том, что Автоматизация IFELSE на уровне фирмы ниже 1 И все еще ниже 1 в случае инвестиций в НИОКР SET растет пропорционально инвестициям в НИОКР. в противном случае устанавливается на уровень предыдущего раунда, потому что тогда фирмы должны прекратить инвестировать И установить нулевые инвестиции в НИОКР.

breed [ firms firm ]


firms-own [   
  firm-level-of-automation    ;; efficiency in automation on the firm level
  r&d-investment   ;; particular share of the total income which is used to invest in R&D
   income   ;; defined value
]

to setup
 ask firms [ 
    set firm-level-of-automation 0 + random-float 1 if firm-level-of-automation > 1 [ set firm-level-of-automation 1 ]   ;; initially random between >0 and <1
    set r&d-investment income * 0.04 ]   ;; R&D investment is a particular share of a firm's income
end

to go  
  tick   
  ask firms [
    ifelse ( firm-level-of-automation < 1 ) AND ( firm-level-of-automation + ( r&d-investment * 0.02 ) < 1 ) [   ;; IF automation on the firm level is below 1 AND still below 1 in case R&D investment would happen
      set firm-level-of-automation firm-level-of-automation + ( r&d-investment * 0.02 ) ]   ;; initially random between >0 and <1 but increases proportionally according to R&D investment
    [ set firm-level-of-automation 0.99 ]
end

Код, который у меня есть, не позволяет повысить уровень автоматизации фирмы до 0,99. Также было бы лучше узнать последние инвестиции в НИОКР, чтобы заполнить этот пробел.

1 Ответ

1 голос
/ 16 апреля 2019

Основная проблема в том, что вы не инициализировали значение для income, в то время как ваш Ifelse в порядке. Если вы этого не сделаете, для r&d-investment не будет значения, которое можно добавить к firm-level-of-automation с помощью оператора Ifelse. Пожалуйста, проверьте исправленный код ниже. Добавленные строки прокомментированы.

breed [ firms firm ]


firms-own [   
  firm-level-of-automation    ;; efficiency in automation on the firm level
  r&d-investment   ;; particular share of the total income which is used to invest in R&D
   income   ;; defined value
]

to setup
  ca ;; ADDED

  create-firms 10 [set color red setxy random-xcor random-ycor set size 2] ;;ADDED, for illustration


 ask firms [ 
    set firm-level-of-automation 0 + random-float 1 if firm-level-of-automation > 1 [ set firm-level-of-automation 1 ]   ;; initially random between >0 and <1
    set income 100  ;; ADDED, needed to be initilaized, otherwise r&d-investment  would remain r&d-investment 0. The value 100 is choosen arbitrarily. 
    set r&d-investment income * 0.04  ;; R&D investment is a particular share of a firm's income

  ]   
  reset-ticks ;; ADDED, otherwise tick counter will not start
end

to go  

  ask firms [
    ifelse ( firm-level-of-automation < 1 ) AND ( firm-level-of-automation + ( r&d-investment * 0.02 ) < 1 ) [   ;; IF automation on the firm level is below 1 AND still below 1 in case R&D investment would happen
      set firm-level-of-automation firm-level-of-automation + ( r&d-investment * 0.02 ) ]   ;; initially random between >0 and <1 but increases proportionally according to R&D investment
    [ set firm-level-of-automation 0.99 ]
  ]

  tick ;; ADDED 
end

Это у вас работает?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...