2015-01-08 4 views
1

Кажется, я не могу получить логическое условие, что я ожидаю сообщить правду, чтобы действительно сообщить об этом. У меня есть несколько логических связей, связанных «и», каждый из которых сообщает об этом сам по себе, но при подключении Im становится ложным. Я должен иметь ошибку в моем коде, но не могу найти его. Любая помощь будет большой.Не может быть логичным, чтобы сообщить об этом

Ниже приведен соответствующий код:

globals [ 
     GF-Threshold 
     GF-Probablility] 

turtles own [ GF+?] 

patches own [ GF ] 

to setup [ 
    ask patches [ set GF 30] 
    ask turtles [ set GF+? false] 
    set GF-threshold 20 
    set GF-Probability .9 

to go [ 
    ask turtles [ check phenotype ] 

to check phenotype 
    [ if GF+? = false and GF > GF-threshold and random-float 1 < GF-Probability [ set GF+? true] 

У меня есть монитор для числа черепах с GF +? = true. Монитор показывает 0, когда я использую вышеуказанный код. Но я ожидаю, что логическое сообщение должно быть истинным, поэтому монитор будет показывать значение больше 0. Я пробовал каждую из своих логик самостоятельно, и при этом я вижу ненулевое значение. Что-то не так с моим кодом? Я также попытался использовать patch-here, думая, что, возможно, проблема связана с патчем и черепахой.

to check phenotype 
    [ if GF+? = false and [GF] of patch-here > GF-threshold and random-float 1 < GF-Probability [ set GF+? true] 

ответ

2

У меня нет проблем с кодом. Это то, что я использовал (я исправил синтаксис, чтобы он работал, я предполагаю, что вы удалили некоторые строки при создании кода примера). Это означает, что есть две возможности. Во-первых, вы не создали никаких черепах (мне пришлось добавить эту строку в настройку).

globals [ 
     GF-Threshold 
     GF-Probability] 

turtles-own [ GF+?] 

patches-own [ GF ] 

to setup 
    clear-all 
    create-turtles 50 
    ask patches [ set GF 30] 
    ask turtles [ set GF+? false] 
    set GF-threshold 20 
    set GF-Probability .9 
end 

to go 
    ask turtles [ check-phenotype ] 
end 

to check-phenotype 
    if GF+? = false and GF > GF-threshold and random-float 1 < GF-Probability 
     [ set GF+? true] 
end 

Во-вторых, ваш код монитора является проблемой. Вот код, который я использовал.

count turtles with [GF+? = true] 

Просто дополнительное примечание, я использовал свой синтаксис, чтобы проверить, был ли булево (GF +?) Истинным или ложным. Вы также можете сделать if GF+? вместо if GF+? = true и аналогичным образом if not GF+? вместо if GF+? = false.

+0

Действительно, синтаксис кода был неправильным. Спасибо за ваш пример кода. Я вижу, что этот код действительно работает сам по себе, но когда я помещаю его в модель, это не так. У меня должно быть что-то еще. Странно, если я использую 'if GF +? ! = true'in место 'if GF +? = false ", тогда я могу заставить монитор реагировать так, как я ожидаю. Мне это очень странно. Кроме того, я попытался использовать ваш пример с 'if not GF +? ', Но получил сообщение об ошибке« ожидаемый T/F, но получил нуль ». Возможно, это имеет какое-то отношение к тому, что я вижу? Я использую числовое значение, когда я думаю, что я использую логическое значение? Спасибо – user3887089

+0

observador> показать колдунов черепах с [GF +? = false] observer: 0 obsadorador> показать количество черепах с [GF +? ! = true] observer: 320 – user3887089

+0

Вышеуказанные команды были указаны в окне команд после процедур настройки. Я не понимаю, как это может дать разные ответы. – user3887089

Смежные вопросы