我有以下描述一群人的合金模型。简化问题。这是一个示例代码片段。
sig groupofpeople {
member: set person,
country: Country
}{
#person=2
}
sig people {
teamleader: Bool,
position: String
}
所以现在我们在一个组中有两个人。接下来我想对组中的人添加一些限制。例如,我希望一个小组中的两个人始终有一个团队负责人和一个团队成员。我使用以下事实来做到这一点:
fact {
all n: people , m: people - n {
n.teamleader not in m.teamleader
}
}
现在我遇到了一个阻碍我前进的问题。我正在寻找的理想模型是,如果一个小组的国家是“美国”,那么团队负责人的职位是“US_TL”,团队成员的职位是“US_TM”。如果国家是“UK”,那么队长的位置是“UK_TL”,团队成员的位置是“UK_TM”,以此类推。
我试图添加类似的东西:
all n: groupofpeople {
(n.country in US => (
n.member.position="US_TL" or
n.member.position= "US_TM")) or
(n.country in UK => (
n.member.position ="UK_TL" or
n.member.position = "UK_TM"))
}
但是预测显然有问题,模型无法为我生成正确的解决方案。您能帮我找出模型中的问题吗?