- 「周辺度数」は尺度の組合せごとにあるから、「あるパターンで周辺度数が制約されている」というのは、「制約されている尺度の組合せの集合」として定義される
- 今、ある尺度の組合せが制約されているとすると、その組合せの部分集合の尺度の組合せも(もれなく)制約されているから、「制約されている尺度の組合せのすべて」を列挙しなくても、「包含関係にある組合せの小さい方の組合せを省略」して、「大きい方の組合せ」のみを列挙しても、制約の状態を一意に説明できる
- このように「大きい方の組合せの集合」で表すことを、「複体」での制約表現と言う
- 以下のように、任意の尺度の組合せの集合から、包含関係に注意して、「複体」式の「大きい方の組合せ」のみを取り出してみる
- 制約のある尺度の組合せをFace、「大きいもののみを残した」ときの尺度の組合せをFacetsと言う
library(sets)
k<-5
s<-as.set(1:k)
powset<-set_power(s)
cnt<-1
thres<-0.2
for(i in powset){
if(runif(1)<thres){
Faces[[cnt]]<-i
cnt<-cnt+1
}
}
print(Faces)
MakeFacets<-function(Faces){
Subs<-outer(Faces,Faces,FUN="set_is_proper_subset")
diag(Subs)<-FALSE
tmp.facets<-abs(sign(apply(Subs,1,sum))-1)
Faces2<-list()
cnt<-1
for(i in 1:length(tmp.facets)){
if(tmp.facets[i]==1){
Faces2[[cnt]]<-Faces[[i]]
cnt<-cnt+1
}
}
tmp<-as.set(Faces2)
}
Facets<-MakeFacets(Faces)
print(Facets)
> print(Faces)
[[1]]
{1L}
[[2]]
{2L}
[[3]]
{2L, 3L}
[[4]]
{2L, 4L}
[[5]]
{1L, 4L, 5L}
[[6]]
{2L, 3L, 5L}
> Facets<-MakeFacets(Faces)
> print(Facets)
{{2L, 4L}, {1L, 4L, 5L}, {2L, 3L, 5L}}
>