我想知道如何将这个概念编码为黑名单?
我有150个客户和3个提供商。所有客户都有可能根据特定规则在提供商之间进行选择。该模型应运行5年,每年客户评估其提供商,如果不合适,客户应更改其提供商。在接下来的几年中,客户根据相同的规则在剩余的提供商之间进行选择(最后一个提供商现在应该在黑名单中仅1年)。被客户阻止的提供商仅在黑名单中保留1年。
请注意。例如,客户1在第一年选择提供商1。在第一年结束时,客户评估提供者1并决定更改提供者。现在是第二年,客户可以在提供商2和3之间进行选择。然后假设第二年,客户选择提供商2并且在第二年结束时再次想要更改提供商。然后,客户可以在第三年选择提供者1和3。
答案 0 :(得分:2)
我相信您希望每个客户都维护自己的黑名单,而不是只有一个可供所有客户使用的黑名单。如果这是正确的,那么您需要为包含黑名单的客户创建一个海龟自己的属性。
如果黑名单是代理集,则最容易使用。这样,您可以在选择时使用not member?
排除提供商。但是,如果您需要更复杂的操作(例如记住它们被添加到黑名单中的顺序),则需要将其存储为代理列表(从不使用who
编号之类的标识符)。
此代码会创建一个黑名单,从选择中排除成员,并以概率方式从黑名单中添加和删除。
breed [providers provider]
breed [customers customer]
customers-own [blacklist]
to setup
clear-all
create-providers 3 [setxy random-xcor random-ycor set color red]
create-customers 10
[ setxy random-xcor random-ycor
set color blue
set blacklist (turtle-set [])
]
reset-ticks
end
to go
ask customers
[ let choice ifelse-value any? blacklist
[ one-of providers with [not member? self [blacklist] of myself] ]
[ one-of providers ]
; stuff here about purchasing from their choice
ask blacklist [ if random-float 1 < 0.3 [ die ] ]
if random-float 1 < 0.2 [ set blacklist (turtle-set blacklist choice) ]
show blacklist
]
tick
end
答案 1 :(得分:1)
我相信您可以为每个客户使用一个列表(作为属性)。例如,如果您有railroadGreaterNotInput
个提供商(并且您为其提供了从0到p-1的ID),那么您可以使用railroadGreaterFile
加注星标。当id = p
的提供商转到列表时,您将其值设为零:set blacklist n-values p [-1]
。
每年,您要求客户增加其n
黑名单的值。像,
replace-item n blacklist 0
最后,如果提供商>= 0
退出黑名单,您foreach blacklist [ provider_id ->
if provider_id >= 0 [
replace-item n blacklist (item provider_id blacklist + 1)
]
]
!
希望这会有所帮助。如果您有任何疑问,请询问!