Netlogo 在两个品种之间创建条件链接
我正在写一个房地产市场及其政治影响的NetLogo模型。模型中有两个品种:家庭和房屋。在我的开发过程中,我遇到的一个困难是让家庭通过嵌套条件语句定义的两种链接(自有或租赁)中的一种匹配房屋。这导致了两个我至今还没有克服的困难Netlogo 在两个品种之间创建条件链接,netlogo,agent-based-modeling,Netlogo,Agent Based Modeling,我正在写一个房地产市场及其政治影响的NetLogo模型。模型中有两个品种:家庭和房屋。在我的开发过程中,我遇到的一个困难是让家庭通过嵌套条件语句定义的两种链接(自有或租赁)中的一种匹配房屋。这导致了两个我至今还没有克服的困难 在命令setup market中,我试图为每个家庭定义一组可能要购买的房子,如果这些房子满足一组条件,那么家庭就会购买(并创建一个链接)。如果它买不起,那么它将尝试租赁。如果负担不起租金,该家庭将死亡 我的代码不断导致以下错误: IFELSE预期输入为真/假,但得到的是海龟
setup market
中,我试图为每个家庭定义一组可能要购买的房子,如果这些房子满足一组条件,那么家庭就会购买(并创建一个链接
)。如果它买不起,那么它将尝试租赁。如果负担不起租金,该家庭将死亡IFELSE预期输入为真/假,但得到的是海龟(房子XXX)。
业主占用的和承租人设置为1
(它们应保持为0,如果保持未链接,则家庭应死亡)
CREATE-LINK-预期输入为海龟,但没有得到任何人。
出现在以下行:CREATE-LINK WITH the-potentialHomes[设置红色
undirected-link-breed [own-links own-link]
undirected-link-breed [rent-links rent-link]
breed [city-centers city-center]
breed [households household]
households-own
[
age
money
income
monthly-income
consumption
monthly-consumption
hh-size race
preference
net-income
net-monthly-income
myHouse
]
breed [houses house]
houses-own
[
cost
down-payment
mortgage-payment
rent
rent-premium
rooms
onMarket
owner-occupied
rental
onMarket?
]
patches-own [
seed? ;;district seed
district ;;district number
full? ;;is the district at capacity?
quadrant
]
to setup
clear-all
reset-ticks
setup-patches
set-default-shape households "person"
create-households num-households [ setxy random-xcor random-ycor ]
set-default-shape houses "house"
create-houses num-houses [ setxy random-xcor random-ycor ]
setup-households
setup-houses
setup-market
generate-cities
end
to generate-cities
let center-x random-xcor / 1.5 ;;keep cities away from edges
let center-y random-ycor / 1.5
end
to setup-patches
ask patches with [pxcor > 0 and pycor > 0] [set quadrant 1 set pcolor 19 ]
ask patches with [pxcor > 0 and pycor < 0] [set quadrant 2 set pcolor 49 ]
ask patches with [pxcor < 0 and pycor < 0] [set quadrant 3 set pcolor 139 ]
ask patches with [pxcor < 0 and pycor > 0] [set quadrant 4 set pcolor 89 ]
end
to setup-households
ask households
[ set age random-poisson 38
set money random-exponential 30600
set income random-exponential 64324
set monthly-income income / 12
set consumption .5 * income
set monthly-consumption consumption / 12
set hh-size random 6 + 1
set net-income income - consumption
set net-monthly-income monthly-income - monthly-consumption
]
end
to setup-houses
ask houses
[ set cost random-normal 300000 50000
set down-payment cost * down-payment-rate
set mortgage-payment (cost - down-payment) / 360
set rooms random-exponential 3
set onMarket 1
set rent mortgage-payment + mortgage-payment * .25
set owner-occupied 0
set rental 0
]
end
to setup-market
ask houses
[ set onMarket? TRUE ]
ask households
[ ifelse any? houses with [ [money] of myself > down-payment and [net-monthly-income] of myself > mortgage-payment ]
[ let potentialHomes houses with [[money] of myself > cost and onMarket? ]
create-link-with one-of potentialHomes [
set color red
]
]
[
ifelse any? houses with [ [net-monthly-income] of myself > rent]
[ let potentialRentals houses with [ [net-monthly-income] of myself > rent and onMarket? ]
create-link-with one-of potentialRentals [ set color blue ]
]
[ die ]
]
]
ask houses
[ if any? link-neighbors [set onMarket FALSE ]
;if any? link-neighbors and color red [ set owner-occupied 1 ]
;if any? link-neighbors and color blue [ set rental 1 ]
]
end
to go
move-households
tick
end
to move-households
ask households [
move-to myHouse
]
end
无向链接品种[自有链接自有链接]
无向链接繁殖[租金链接租金链接]
繁殖[城市中心城市中心]
品种[家庭]
家庭拥有
[
年龄
钱
收入
月收入
消耗
月消费量
hh码比赛
偏爱
净收入
月净收入
我家
]
繁殖[房屋]
自有房屋
[
成本
首期付款
按揭付款
租
租金溢价
房间
市场上
业主占用
租金
在市场上?
]
修补程序自己的[
种子;地区种子
地区;地区号码
满了吗?;这个地区的载客量够了吗?
象限
]
设置
清除所有
重置滴答声
安装补丁
将默认形状设置为“人”
创建住户数量住户[setxy random xcor random ycor]
将默认形状房屋设置为“房屋”
创建房屋数房屋[setxy random xcor random ycor]
建立家庭
安置所
设置市场
生成城市
结束
创建城市
让中心x随机xcor/1.5;;使城市远离边缘
设中心y随机ycor/1.5
结束
设置修补程序
使用[pxcor>0和pycor>0][设置象限1设置pcolor 19]询问补丁
使用[pxcor>0和pycor<0][设置象限2设置pcolor 49]询问贴片
使用[pxcor<0和pycor<0][设置象限3设置pcolor 139]询问贴片
使用[pxcor<0和pycor>0][设置象限4设置pcolor 89]询问贴片
结束
安家
询问住户
[设置年龄随机泊松38
设置货币随机指数30600
设置收入随机指数64324
设定月收入/12
设定消费。5*收入
设置月消耗量/12
将hh大小随机设置为6+1
设定净收入-消费
设置月净收入月收入-月消费
]
结束
安家
询问房屋
[设置成本随机正常值300000 50000
设定首期付款成本*首期付款率
设置抵押付款(成本-首付)/360
随机指数3集
在市场1上设置
设置租金抵押付款+抵押付款*.25
设置所有者占用0
将租金设置为0
]
结束
建立市场
询问房屋
[在市场上设置?正确]
询问住户
[如果还有其他情况,我自己的房子[[钱]>首期付款和我自己的[月净收入]>抵押付款]
[用我自己的[[钱]让潜在的房子在市场上花费吗?]
创建与其中一个潜在家庭的链接[
设置颜色为红色
]
]
[
如果还有?拥有[[我的月净收入]和租金]的房子
[let PotentialRental以[[我的月净收入]>租金和市场价格出租房屋?]
创建与潜在资源之一的链接[设置蓝色]
]
[死亡]
]
]
询问房屋
[如果有的话?链接邻居[在市场上设置为FALSE]
;如果有?链接邻居并将其涂成红色[设置所有者占用1]
;如果有?链接邻居并将其涂成蓝色[设置为1]
]
结束
外带
搬家
打上钩
结束
搬家
询问住户[
搬到我家
]
结束
您不必“怀疑”问题所在,NetLogo指向问题行。运行您的代码,问题实际上是如果有一栋房子有[[我的净月收入]租金]
。看那一行,你从池中随机挑选了一所租金低于收入的房子。但是你没有条件让ifelse
进行测试
在以前的构造中,最后有!=nobody
,但在这一行中您忘记了这一点。这将修复错误,但如果您使用any?
来代替,您的代码将不那么容易出错。您似乎在使用其中一个…=nobody
来测试是否有任何海龟满足条件。这就是w帽子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 ]
你可以有:
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 ]
我应该补充一点,这里有一个潜在的逻辑问题。如果说有租金低于收入的房子,那么代码会进入第一个(真实的)行动。但是不能保证有任何房子满足新的条件,这是不同的
此外,NetLogo具有true
和false
的概念,因此您无需使用
let potentialRentals houses with [[money] of myself > rent and onMarket = 1 ]
let potentialRentals houses with [[money] of myself > rent and onMarket? ]