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

Netlogo 在两个品种之间创建条件链接,netlogo,agent-based-modeling,Netlogo,Agent Based Modeling,我正在写一个房地产市场及其政治影响的NetLogo模型。模型中有两个品种:家庭和房屋。在我的开发过程中,我遇到的一个困难是让家庭通过嵌套条件语句定义的两种链接(自有或租赁)中的一种匹配房屋。这导致了两个我至今还没有克服的困难 在命令setup market中,我试图为每个家庭定义一组可能要购买的房子,如果这些房子满足一组条件,那么家庭就会购买(并创建一个链接)。如果它买不起,那么它将尝试租赁。如果负担不起租金,该家庭将死亡 我的代码不断导致以下错误: IFELSE预期输入为真/假,但得到的是海龟

我正在写一个房地产市场及其政治影响的NetLogo模型。模型中有两个品种:家庭和房屋。在我的开发过程中,我遇到的一个困难是让家庭通过嵌套条件语句定义的两种链接(自有或租赁)中的一种匹配房屋。这导致了两个我至今还没有克服的困难

  • 在命令
    setup market
    中,我试图为每个家庭定义一组可能要购买的房子,如果这些房子满足一组条件,那么家庭就会购买(并创建一个
    链接
    )。如果它买不起,那么它将尝试租赁。如果负担不起租金,该家庭将死亡
  • 我的代码不断导致以下错误:

    IFELSE预期输入为真/假,但得到的是海龟(房子XXX)。

  • 代码后面还有一个问题(在用“;”)注释的两行中),我试图根据适当链接的存在将变量
    业主占用的
    承租人
    设置为
    1
    (它们应保持为0,如果保持未链接,则家庭应死亡)
  • 完整代码如下。带有“;这是给我带来麻烦的行”的行表示错误似乎发生的位置

    更新: 代码已用JenB的解决方案更新。产生的错误现在是:
    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? ]