netlogo - 选择列表中的元素
问题描述
我有一个由两只海龟组成的列表(为简单起见,houses
和landlords
)。感谢这里提供的一些建议,我从列表中选择了最高价的房子,但不幸的是房东不是那房子的主人,而只是乌龟之前选择了一个勾号。我知道这只海龟的定义出了点问题。在提出建议之后,我写的是:
let selected_house max-one-of turtle-set my-list [price]
let selected_landlord [my-landlord] of selected_house
print (word "Landlord" [selected_landlord] of selected_house)
let new_list (list selected_house selected_landlord)
print (word "Landlord " selected_landlord "of house: " selected_house " by price: " [price] of selected_house)
但如果,比方说,我有:
列表:
"Landlord 2 is the owner of house 4 by price 400000"
"Landlord 5 is the owner of house 1 by price 100000"
"Landlord 4 is the owner of house 3 by price 300000"
然后我selected_house/landlord
用来选择价格最高的房子的主人,我应该得到(house 4, landlord 2)
; 但是,我得到了(house 4, landlord 5)
,即房东之前选择了一个勾号。
我将房东和房子定义如下(我有类似的练习,但主题不同):
if breed = landlords [
hatch-houses n_house [
set price precision (random-float 1) 3
set this-house self
set this-landlord myself
ask myself [
set my-list fput (list this-house this-landlord) my-list
]
]
wherethis-house
和this-landlord
are 全局变量和my-list
is landlords' own
。
你能帮我理解和解决这部分代码的问题吗?
我认为,当我创建第一个元素 = 房子和第二个元素 = 房东的列表时,可以添加一些条件以使选择尽可能简单(例如,一旦选择了第一个项目,即房子以最高价格,将列表中每个元素的第二项设置为房屋的房东)。
解决方案
我不确定为什么this-house
和this-landlord
是全局变量,我认为(没有完整的代码继续)这可能是你的问题。如果我理解你的模型,每个房东都有一套房子,你希望能够找到最贵的房子和拥有它的房东。如果每个房子都跟踪它的房东和价格,并且每个房东都跟踪他们的房子,那么这应该允许您将任何房子与其房东联系起来,或者查看房东拥有的所有房子。
以下模型可能会给您一个关于如何进行的想法。它创建了房东,然后每个房东都以随机价格创建房屋。然后它会找到最昂贵的房子和它的房东。然后对于每个房东,它会找到该房东最昂贵的房子。房东可以用 [houselord] 保留一份房屋清单,但第二项对于房东的所有房屋都是一样的。
breed [landlords landlord]
breed [houses house]
landlords-own [my-houses my-house-list]
houses-own [price my-landlord]
to test
clear-all
create-landlords 10
ask landlords [
hatch-houses 5 [
set price precision (random-float 1) 3
set my-landlord myself
]
set my-houses houses with [my-landlord = myself]
]
let most-expensive max-one-of houses [price]
show (word "The mostexpensive house is house " most-expensive " owned by " [my-landlord] of most-expensive " with price =" [price] of most-expensive)
ask landlords [
let my-most-expensive max-one-of my-houses [price]
show (word "landlord " self "'s most expensive house is house " most-expensive " with price =" [price] of my-most-expensive)
]
end
另一方面,您可以将所有房东的所有房屋列表保存为一个全局列表,如果您list-houses
在测试后运行,您将获得这样的列表,然后您可以按价格、房东或其他方式对其进行排序。
globals [house-list]
to list-houses
set house-list []
ask houses [
set house-list fput (list self my-landlord price) house-list
]
show house-list
let sorted-by-price sort-by [[a b] -> item 2 a > item 2 b] house-list
let most-expensive first sorted-by-price
show (word "the most expensive house is house " item 0 most-expensive " with owner " item 1 most-expensive " and price " item 2 most-expensive)
end
推荐阅读
- coldfusion - 调用
不在表单范围内的文件的 MIME 验证算法? - python - 比较对应于 2 个不同日期的值的平均值?
- r - 如何将 Markdown 文件转换为 R DataFrame
- python - 图片高亮效果
- codenameone - 使用 Codename One Preferences 更新“iOS 分发证书”的正确方法
- python - 尝试对两个数据集进行左连接但得到奇怪的结果
- html - 带有父 Div 的粘性侧边栏
- arrays - 使用 ARRAY[] 和 '{}'::int[] 创建数组是否存在性能差异?
- electron - Spectron 可用方法无法正常工作
- asp.net - asp.net core 3.1 应用程序在进程中运行忽略 appsettings.json