actualización respuesta, 12/22: El uso de observation que hay un homomorfismo entre las secciones y permutaciones de objetos en el cubo distintas, una lista de todas esas permutaciones mediante la representación de un grupo de simetrías del cubo Peter Shor como un subgrupo de SymmetricGroup [8] y el uso de GroupElements/Permute, encontrar las asignaciones de los centroides utilizando solucionador SAT de Mathematica, seleccione los conjuntos de puntos con valores singulares distintos, algunos detalles más y código completo dado herelistado todas las secciones interesantes de un tetraedro
pregunta
Una sección 2D interesante es un plano que pasa por el centro de un 3D simplex regular y otros 2 puntos, cada uno de los cuales es un centroide de un subconjunto no vacío de vértices. Está definido por dos subconjuntos de vértices. Por ejemplo, {{1}, {1,2}} da un plano definido por 3 puntos: centro del tetraedro, primer vértice y promedio del primer y segundo vértices.
Un conjunto interesante de secciones es un conjunto en el que no hay dos secciones que definan el mismo plano debajo del reetiquetado de los vértices. Por ejemplo, establecer {{{1}, {2}}, {{3}, {4}}} no es interesante. ¿Existe un enfoque eficiente para encontrar un interesante conjunto de secciones interesantes? Necesito algo que pueda generalizarse a un problema análogo para secciones 3D de 7D simplex y terminar de la noche a la mañana.
Mi intento de aproximación está a continuación. Un problema es que si se ignora la geometría, se conservarán algunas secciones equivalentes, así que obtendré 10 secciones en lugar de 3. Un problema mayor es que utilicé la fuerza bruta y definitivamente no escala y (necesita 10^17 comparaciones para 7D simplex)
http://yaroslavvb.com/upload/simplex-sections.png
Aquí está el código Mathematica para generar imagen de arriba.
entropy[vec_] := Total[Table[p Log[p], {p, vec}]];
hadamard = KroneckerProduct @@ Table[{{1, 1}, {1, -1}}, {2}];
(* rows of hadamard matrix give simplex vertex coordinates *)
vertices = hadamard;
invHad = Inverse[hadamard];
m = {m1, m2, m3, m4};
vs = Range[4];
(* take a set of vertex averages, generate all combinations arising \
from labeling of vertices *)
vertexPermutations[set_] := (
newSets = set /. Thread[vs -> #] & /@ Permutations[vs];
Map[Sort, newSets, {2}]
);
(* anchors used to define a section plane *)
sectionAnchors = Subsets[{1, 2, 3, 4}, {1, 3}];
(* all sets of anchor combinations with centroid anchor always \
included *)
anchorSets = Subsets[sectionAnchors, {2}];
anchorSets = Prepend[#, {1, 2, 3, 4}] & /@ anchorSets;
anchorSets = Map[Sort, anchorSets, {2}];
setEquivalent[set1_, set2_] := MemberQ[vertexPermutations[set1], set2];
equivalenceMatrix =
Table[Boole[setEquivalent[set1, set2]], {set1, anchorSets}, {set2,
anchorSets}];
Needs["GraphUtilities`"];
(* Representatives of "vertex-relabeling" equivalence classes of \
ancher sets *)
reps = First /@ StrongComponents[equivalenceMatrix];
average[verts_] := Total[vertices[[#]] & /@ verts]/Length[verts];
makeSection2D[vars_, {p0_, p1_, p2_}] := Module[{},
v1 = p1 - p0 // Normalize;
v2 = p2 - p0;
v2 = v2 - (v1.v2) v1 // Normalize;
Thread[vars -> (p0 + v1 x + v2 y)]
];
plotSection2D[f_, pointset_] := (
simplex =
Graphics3D[{Yellow, Opacity[.2],
GraphicsComplex[[email protected]@hadamard,
Polygon[Subsets[{1, 2, 3, 4}, {3}]]]}];
anchors = average /@ pointset;
section = makeSection2D[m, anchors];
rf = Function @@ ({{x, y, z, u, v},
And @@ Thread[invHad.{1, x, y, z} > 0]});
mf = Function @@ {{p1, p2, p3, x, y}, f[invHad.m /. section]};
sectionPlot =
ParametricPlot3D @@ {Rest[m] /. section, {x, -3, 3}, {y, -3, 3},
RegionFunction -> rf, MeshFunctions -> {mf}};
anchorPlot = Graphics3D[Sphere[Rest[#], .05] & /@ anchors];
Show[simplex, sectionPlot, anchorPlot]
);
plots = Table[
plotSection2D[entropy, anchorSets[[rep]]], {rep, reps}];
GraphicsGrid[Partition[plots, 3]]
¿Puedes explicar por qué {{1,2}, {3,4}} no es "interesante"? ¿Cuál es el reetiquetado que da la misma sección? – ysap
Se asignan los vértices 1 a 3 y los vértices 2 a 4. No es interesante porque las secciones tienen el mismo aspecto. En mi foto, puedes ver que solo hay dos formas distintas: triángulo y cuadrado. Todo lo demás es una especie de rotación/reflejo de esas formas –
He intentado varias veces encontrar la notación de {{1}, {1,2}} y {{{1}, {2}}, {{3} , {4}}}, pero simplemente no pudo. ¿Puedes proporcionar un enlace que lo explique? – Dialecticus