微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在两个品种之间建立条件链接

如何解决在两个品种之间建立条件链接

我正在编写一个Netlogo模型,用于描述房地产市场及其政治影响。模型中有两个品种:家庭和房屋。在我发展过程中遇到的一个困难是,通过嵌套条件语句定义的两种类型的链接(拥有或租赁)之一使房屋与房屋匹配。这导致了我至今无法克服的两个困难。

  1. 在命令setup-market中,我试图为每个家庭定义一组可能要购买的房屋,如果满足一组条件,则该家庭随后进行购买(并创建{{1 }}。如果买不起,那么它将尝试出租。如果负担不起房租,家庭将link

我的代码不断导致以下错误

die

  1. 我稍后还会在代码中遇到另一个问题(在用“;”注释的两行中),我尝试将变量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 举报,一经查实,本站将立刻删除。