如何在netlogo中创建黑名单?

如何在netlogo中创建黑名单?,netlogo,blacklist,Netlogo,Blacklist,我想知道如何编写黑名单这样的概念 我有150个客户和3个供应商。所有客户都可以根据特定规则在供应商之间进行选择。该模型应运行5年,每年客户评估其供应商,如果不可取,客户应更换其供应商。在接下来的几年中,客户将根据相同的规则在剩余的供应商(最后一家供应商现在应该在黑名单中只保留一年)之间进行选择。被客户封锁的供应商仅在黑名单上保留1年 注意。例如,客户1在第一年选择提供商1。第一年结束时,客户评估提供商1并决定更换提供商。现在是第二年了,客户可以在提供商2和提供商3之间进行选择。然后假设在第二年,

我想知道如何编写黑名单这样的概念

我有150个客户和3个供应商。所有客户都可以根据特定规则在供应商之间进行选择。该模型应运行5年,每年客户评估其供应商,如果不可取,客户应更换其供应商。在接下来的几年中,客户将根据相同的规则在剩余的供应商(最后一家供应商现在应该在黑名单中只保留一年)之间进行选择。被客户封锁的供应商仅在黑名单上保留1年


注意。例如,客户1在第一年选择提供商1。第一年结束时,客户评估提供商1并决定更换提供商。现在是第二年了,客户可以在提供商2和提供商3之间进行选择。然后假设在第二年,客户选择了提供商2,并且在第二年年底再次希望更改提供商。然后客户可以在第三年的提供商1和提供商3之间进行选择。

我相信您可以为每个客户使用一个列表(作为属性)。例如,如果您有
p
提供者(并且您给他们一个从0到p-1的id),那么您可以使用
设置黑名单n值p[-1]
来启动。当id=
n
的提供者进入列表时,您将其值设为零:
替换项目n黑名单0
。 每年,您都会要求客户增加黑名单中
=0
的值。像

foreach blacklist [ provider_id -> 
  if provider_id >= 0 [
    replace-item n blacklist (item provider_id blacklist + 1)
  ] 
]
最后,如果提供者
n
退出黑名单,您将
替换项目n黑名单-1


希望这有帮助。如果您有任何疑问,请询问

我相信您可以为每个客户使用一个列表(作为属性)。例如,如果您有
p
提供者(并且您给他们一个从0到p-1的id),那么您可以使用
设置黑名单n值p[-1]
来启动。当id=
n
的提供者进入列表时,您将其值设为零:
替换项目n黑名单0
。 每年,您都会要求客户增加黑名单中
=0
的值。像

foreach blacklist [ provider_id -> 
  if provider_id >= 0 [
    replace-item n blacklist (item provider_id blacklist + 1)
  ] 
]
最后,如果提供者
n
退出黑名单,您将
替换项目n黑名单-1


希望这有帮助。如果您有任何疑问,请询问

我认为您希望每个客户维护自己的黑名单,而不是拥有一个可供所有客户使用的单一黑名单。如果这是正确的,那么您需要为包含黑名单的客户创建turtles自己的属性

如果该黑名单是一个代理集,那么它最容易使用。这样,您可以在选择时使用
非成员?
排除提供程序。但是,如果您需要更复杂的操作,如记住将其添加到黑名单的顺序,则需要将其存储为代理列表(切勿使用
who
number这样的标识符)

这段代码创建一个黑名单,从选择中排除成员,并按概率从黑名单中添加和删除

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
bride[提供者]
培育[顾客]
客户拥有[黑名单]
设置
清除所有
创建提供程序3[设置XY随机XC或随机YC或设置红色]
创造客户10
[setxy random xcor random ycor
设置颜色为蓝色
集合黑名单(海龟集合[])
]
重置滴答声
结束
外带
询问客户
[让选项ifelse值为任何?黑名单
[具有[非会员?本人[黑名单]的提供商之一]]
[供应商之一]
;这里是关于从他们的选择中购买的东西
询问黑名单[如果随机浮动1<0.3[死亡]]
如果随机浮动1<0.2[设置黑名单(海龟设置黑名单选择)]
显示黑名单
]
打上钩
结束

我相信您希望每个客户都维护自己的黑名单,而不是拥有一个可供所有客户使用的单一黑名单。如果这是正确的,那么您需要为包含黑名单的客户创建turtles自己的属性

如果该黑名单是一个代理集,那么它最容易使用。这样,您可以在选择时使用
非成员?
排除提供程序。但是,如果您需要更复杂的操作,如记住将其添加到黑名单的顺序,则需要将其存储为代理列表(切勿使用
who
number这样的标识符)

这段代码创建一个黑名单,从选择中排除成员,并按概率从黑名单中添加和删除

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
bride[提供者]
培育[顾客]
客户拥有[黑名单]
设置
清除所有
创建提供程序3[设置XY随机XC或随机YC或设置红色]
创造客户10
[setxy random xcor random ycor
设置颜色为蓝色
集合黑名单(海龟集合[])
]
重置滴答声
结束
外带
询问客户
[让选项ifelse值为任何?黑名单
[具有[非会员?本人[黑名单]的提供商之一]]
[供应商之一]
;这里是关于从他们的选择中购买的东西
询问黑名单[如果随机浮动1<0.3[死亡]]
如果随机浮动1<0.2[设置黑名单(海龟设置黑名单选择)]
显示黑名单
]
打上钩
结束

这是更新列表的一种方法,但它不能回答问题-答案还需要说明如何避免选择黑名单上的提供商这是更新列表的一种方法,但它不能回答问题-答案还需要说明如何避免选择黑名单上的提供商