如何解决在两个品种之间建立条件链接
我正在编写一个Netlogo模型,用于描述房地产市场及其政治影响。模型中有两个品种:家庭和房屋。在我发展过程中遇到的一个困难是,通过嵌套条件语句定义的两种类型的链接(拥有或租赁)之一使房屋与房屋匹配。这导致了我至今无法克服的两个困难。
- 在命令
setup-market
中,我试图为每个家庭定义一组可能要购买的房屋,如果满足一组条件,则该家庭随后进行购买(并创建{{1 }}。如果买不起,那么它将尝试出租。如果负担不起房租,家庭将link
。
die
- 我稍后还会在代码中遇到另一个问题(在用“;”注释的两行中),我尝试将变量
IFELSE expected input to be a TRUE/FALSE but got the turtle (house XXX) instead.
和owner-occupied
设置为{ {1}}基于适当链接的存在(它们应保持为0,并且如果保持未链接,则家庭应死亡)。
完整代码如下。带有“ ;;这是给我麻烦的行”的行表示似乎在哪里发生错误。
更新:
JenB解决方案已更新了代码。现在产生的错误是:
renter
出现在以下行:1
CREATE-LINK-WITH expected input to be a turtle but got NOBODY instead.
解决方法
您无需“怀疑”问题所在的位置,NetLogo指向问题所在的行。运行代码,问题实际上是 saveisSelectedFont() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
setState(() {
prefs.setStringList(
"isSelectedFont",isSelectedFont.map((e) => e ? 'true' : 'false').toList(),);
});
}
getisSelectedFont() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
setState(() {
isSelectedFont = (prefs
.getStringList('isSelectedFont')
?.map((e) => e == 'true' ? true : false)
?.toList() ??
[true,false,false]);
});
}
onPressed: (int index) {
setState(() {
for (int i = 0; i < isSelectedFont.length; i++) {
isSelectedFont[i] = i == index;
}
saveisSelectedFont();
});
},
。沿着那条线,您从游泳池中抽出一个随机选择的房屋,其租金低于收入。但是您没有ifelse one-of houses with [ [net-monthly-income] of myself > rent]
进行测试的条件。
在以前的构造中,您最后有ifelse
,但是您在此行中忘记了它。这样可以解决该错误,但是如果您改用!= nobody
,则您的代码更不会出错。您似乎正在使用any?
来测试是否有满足条件的海龟。这就是one-of .... != nobody
的目的。
所以代替:
any?
您可以拥有:
ifelse one-of houses with [ [net-monthly-income] of myself > rent] != nobody
[ let potentialRentals houses with [[money] of myself > rent and onMarket = 1 ]
create-link-with one-of potentialRentals [ set color blue ]
]
[ die ]
我应该补充一点,这里存在潜在的逻辑问题。假设有租金低于收入的房屋,则代码进入第一个(真实)操作。但是,不能保证有满足新条件的房屋,这是不同的。
此外,NetLogo具有ifelse any? houses with [ [net-monthly-income] of myself > rent]
[ let potentialRentals houses with [[money] of myself > rent and onMarket = 1 ]
create-link-with one-of potentialRentals [ set color blue ]
]
[ die ]
和true
的概念,因此您无需使用1和0。按照约定(但不是必需),布尔变量名以问号结尾。因此,您可以使用false
而不是set onMarket? true
。你为什么要这样做?它使逻辑运算符更简洁,更易于阅读(从而减少了错误)。您的行:
set onMarket 1
看起来像:
let potentialRentals houses with [[money] of myself > rent and onMarket = 1 ]
您可以执行诸如let potentialRentals houses with [[money] of myself > rent and onMarket? ]
之类的事情,而不是if not onMarket?
或if onMarket? = false
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。