diff --git a/Documentation/Images/MyrheimMeyer.png b/Documentation/Images/MyrheimMeyer.png deleted file mode 100644 index 7119a5a51..000000000 Binary files a/Documentation/Images/MyrheimMeyer.png and /dev/null differ diff --git a/Documentation/SymbolsAndFunctions/HypergraphPlot.md b/Documentation/SymbolsAndFunctions/HypergraphPlot.md index 4656cc155..11d677e59 100644 --- a/Documentation/SymbolsAndFunctions/HypergraphPlot.md +++ b/Documentation/SymbolsAndFunctions/HypergraphPlot.md @@ -16,7 +16,9 @@ the ordering: In[] := HypergraphPlot[{{1, 2, 3}, {3, 4, 5}, {5, 6, 7, 1}}] ``` -<img src="/Documentation/Images/HypergraphPlot.png" width="478"> +<img src="/Documentation/Images/HypergraphPlot.png" + width="478" + alt="Out[] = ... plot of a hypergraph with 3 hyperedges ..."> Edges of any arity can be mixed. The binary edges are displayed as non-filled arrows, and the unary edges are shown as circles around the vertices: @@ -25,7 +27,9 @@ circles around the vertices: In[] := HypergraphPlot[{{1, 2, 3}, {3, 4}, {4, 3}, {4, 5, 6}, {1}, {6}, {6}}] ``` -<img src="/Documentation/Images/BinaryAndUnaryEdgesPlot.png" width="478"> +<img src="/Documentation/Images/BinaryAndUnaryEdgesPlot.png" + width="478" + alt="Out[] = ... plot of a hypergraph with binary and unary edges ..."> Self-loops are shown as convex polygons around the appropriate number of circular arrows: @@ -33,7 +37,9 @@ Self-loops are shown as convex polygons around the appropriate number of circula In[] := HypergraphPlot[{{1, 1, 1}, {1, 2, 3}, {3, 4, 4}}] ``` -<img src="/Documentation/Images/SelfLoopsPlot.png" width="478"> +<img src="/Documentation/Images/SelfLoopsPlot.png" + width="478" + alt="Out[] = ... plot of a hypergraph with self-loops ..."> Note the difference between a hyper-self-loop and two binary edges pointing in opposite directions: @@ -41,7 +47,9 @@ Note the difference between a hyper-self-loop and two binary edges pointing in o In[] := HypergraphPlot[{{1, 2, 1}, {2, 3}, {3, 2}}] ``` -<img src="/Documentation/Images/HyperSelfLoopDoubleBinaryEdgesComparison.png" width="478"> +<img src="/Documentation/Images/HyperSelfLoopDoubleBinaryEdgesComparison.png" + width="478" + alt="Out[] = ... plot of a hypergraph with a hyper-self-loop and 2 binary edges ..."> Multiedges are shown in a darker color (because of overlaid partially transparent polygons), or as separate polygons depending on the layout (and are admittedly sometimes hard to understand): @@ -50,7 +58,9 @@ depending on the layout (and are admittedly sometimes hard to understand): In[] := HypergraphPlot[{{1, 2, 3}, {3, 4, 5}, {3, 4, 5}, {1, 6, 6}, {1, 6, 6}}] ``` -<img src="/Documentation/Images/MultiedgesPlot.png" width="478"> +<img src="/Documentation/Images/MultiedgesPlot.png" + width="478" + alt="Out[] = ... plot of a hypergraph with multiedges ..."> Many [`WolframModel`](WolframModelAndWolframModelEvolutionObject/WolframModelAndWolframModelEvolutionObject.md) properties, such as [`"FinalStatePlot"`](WolframModelAndWolframModelEvolutionObject/Properties/PlotsOfStates.md) @@ -68,7 +78,9 @@ case `"Cyclic"` should be used as the second argument to `HypergraphPlot`: In[] := HypergraphPlot[{{1, 2, 3}, {3, 4, 5}, {5, 6, 7, 1}}, "Cyclic"] ``` -<img src="/Documentation/Images/CyclicPlot.png" width="478"> +<img src="/Documentation/Images/CyclicPlot.png" + width="478" + alt="Out[] = ... plot of a cyclic hypergraph with 3 hyperedges ..."> ## GraphHighlight and GraphHighlightStyle @@ -79,7 +91,9 @@ In[] := HypergraphPlot[{{1, 2, 3}, {3, 4, 5}, {5, 6, 7, 1}, {7, 8, 2}, {4, 9}, {9}}, GraphHighlight -> {{1, 2, 3}, 4, {9}}] ``` -<img src="/Documentation/Images/PlotWithHighlight.png" width="478"> +<img src="/Documentation/Images/PlotWithHighlight.png" + width="478" + alt="Out[] = ... plot of a hypergraph with highlighted vertices and edges ..."> For a hypergraph with multiedges, only the specified number of edges will be highlighted: @@ -88,7 +102,9 @@ In[] := HypergraphPlot[{{1, 2, 3}, {1, 2, 3}, {3, 4}, {3, 4}, {3, 4}, {4}, {4}}, GraphHighlight -> {{1, 2, 3}, {3, 4}, {3, 4}, {4}}] ``` -<img src="/Documentation/Images/PlotWithMultiedgeHighlight.png" width="478"> +<img src="/Documentation/Images/PlotWithMultiedgeHighlight.png" + width="478" + alt="Out[] = ... plot of a hypergraph with partially highlighted multiedges ..."> The style of the highlight can be specified with **`GraphHighlightStyle`**: @@ -98,7 +114,9 @@ In[] := HypergraphPlot[{{1, 2, 3}, {3, 4, 5}, {5, 6, 7, 1}, {7, 8, 2}, {4, GraphHighlightStyle -> Directive[Darker @ Green, Thick]] ``` -<img src="/Documentation/Images/PlotWithGreenHighlight.png" width="478"> +<img src="/Documentation/Images/PlotWithGreenHighlight.png" + width="478" + alt="Out[] = ... plot of a hypergraph with green highlighted vertices and edges ..."> ## "HyperedgeRendering" @@ -113,7 +131,9 @@ In[] := HypergraphPlot[{{1, 2, 3}, {3, 4, 5}, {5, 6, 7, 1}, {7, 8, 2}, {4, VertexLabels -> Automatic] ``` -<img src="/Documentation/Images/SubgraphsHyperedgeRendering.png" width="478"> +<img src="/Documentation/Images/SubgraphsHyperedgeRendering.png" + width="478" + alt="Out[] = ... plot of a hypergraph represented as a graph with multiple edges used for each hyperedge ..."> ## VertexCoordinates @@ -125,7 +145,9 @@ In[] := HypergraphPlot[{{1, 2, 3}, {2, 4, 5}, {2, 6, 7, 8}, {8, 9, 1}}, Axes -> True] ``` -<img src="/Documentation/Images/PlotWithCustomCoordinates.png" width="478"> +<img src="/Documentation/Images/PlotWithCustomCoordinates.png" + width="478" + alt="Out[] = ... plot of a hypergraph with custom vertex coordinates overlayed on top of axes ..."> Unfortunately, due to limitations of [`GraphEmbedding`](https://reference.wolfram.com/language/ref/GraphEmbedding.html), specifying coordinates of two or more vertices breaks the scaling of distances. As a result, vertices and arrowheads @@ -137,7 +159,9 @@ In[] := HypergraphPlot[{{1, 2, 3}, {2, 4, 5}, {2, 6, 7, 8}, {8, 9, 1}}, VertexCoordinates -> {1 -> {0, 0}, 2 -> {1, 0}}] ``` -<img src="/Documentation/Images/IncorrectlyScaledPlot.png" width="466"> +<img src="/Documentation/Images/IncorrectlyScaledPlot.png" + width="466" + alt="Out[] = ... plot of a hypergraph where vertices and arrowheads are too large ..."> ```wl In[] := HypergraphPlot[{{1, 2, 3}, {2, 4, 5}, {2, 6, 7, 8}, {8, 9, 1}}, @@ -145,7 +169,9 @@ In[] := HypergraphPlot[{{1, 2, 3}, {2, 4, 5}, {2, 6, 7, 8}, {8, 9, 1}}, VertexSize -> 0.03, "ArrowheadLength" -> 0.06] ``` -<img src="/Documentation/Images/PlotWithCompensatedScale.png" width="448"> +<img src="/Documentation/Images/PlotWithCompensatedScale.png" + width="448" + alt="Out[] = ... plot of the same hypergraph with reasonably sized vertices and arrowheads ..."> ## VertexLabels @@ -157,7 +183,9 @@ In[] := HypergraphPlot[{{1, 2, 3}, {2, 4, 5}, {2, 6, 7, 8}, {8, 9, 1}}, VertexLabels -> Automatic] ``` -<img src="/Documentation/Images/PlotWithVertexLabels.png" width="478"> +<img src="/Documentation/Images/PlotWithVertexLabels.png" + width="478" + alt="Out[] = ... plot of a hypergraph with labeled vertices ..."> ## VertexSize and "ArrowheadLength" @@ -169,7 +197,9 @@ In[] := HypergraphPlot[{{1, 2, 3, 4}, {1, 5, 6}, {2, 7, 8}, {4, 6, 9}}, VertexSize -> 0.1, "ArrowheadLength" -> 0.3] ``` -<img src="/Documentation/Images/PlotWithCustomElementSizes.png" width="478"> +<img src="/Documentation/Images/PlotWithCustomElementSizes.png" + width="478" + alt="Out[] = ... plot of a hypergraph with enlarged vertices and arrowheads ..."> Note that unlike [`GraphPlot`](https://reference.wolfram.com/language/ref/GraphPlot.html), both vertices and arrowheads have a fixed size relative to the layout (in fact, the arrowheads are drawn manually as polygons). This fixed size @@ -184,7 +214,9 @@ In[] := HypergraphPlot[{{1, 2, 3}, {3, 4, 5}, {5, 6, 7}, {7, 8, 9}, {9, 10, VertexStyle -> Transparent] ``` -<img src="/Documentation/Images/PlotWithNoArrowsAndVertices.png" width="478"> +<img src="/Documentation/Images/PlotWithNoArrowsAndVertices.png" + width="478" + alt="Out[] = ... plot of a hypergraph with no arrowheads and vertices ..."> As a neat example, one can even draw unordered hypergraphs: @@ -196,7 +228,9 @@ In[] := HypergraphPlot[{{1, 2, 2}, {2, 3, 3}, {3, 1, 1}}, EdgeForm[Directive[Hue[0.63, 0.7, 0.5], Opacity[0.7]]]]|>] ``` -<img src="/Documentation/Images/UnorderedPlot.png" width="478"> +<img src="/Documentation/Images/UnorderedPlot.png" + width="478" + alt="Out[] = ... plot of a hypergraph with no edges and vertices, only polygons ..."> ## "MaxImageSize" @@ -207,13 +241,17 @@ hypergraphs. To demonstrate that, consider the difference: In[] := HypergraphPlot[#, "MaxImageSize" -> 100] & /@ {{{1}}, {{1, 1}}, {{1, 2, 3}}} ``` -<img src="/Documentation/Images/PlotWithMaxImageSize.png" width="254"> +<img src="/Documentation/Images/PlotWithMaxImageSize.png" + width="254" + alt="Out[] = {... 3 small plots of hypergraphs of different sizes but consistent vertex sizes ...}"> ```wl In[] := HypergraphPlot[#, ImageSize -> 100] & /@ {{{1}}, {{1, 1}}, {{1, 2, 3}}} ``` -<img src="/Documentation/Images/PlotWithImageSize.png" width="457"> +<img src="/Documentation/Images/PlotWithImageSize.png" + width="457" + alt="Out[] = {... 3 small plots of hypergraphs of the smae size but different vertex sizes ...}"> ## Style Options @@ -226,7 +264,9 @@ In[] := HypergraphPlot[{{1, 2, 3}, {3, 4, 5}, {5, 6, 7, 1}, {7, 8, 2}, {4, 9}, {9}}, PlotStyle -> Directive[Blue, Dotted]] ``` -<img src="/Documentation/Images/PlotWithCustomPlotStyle.png" width="478"> +<img src="/Documentation/Images/PlotWithCustomPlotStyle.png" + width="478" + alt="Out[] = ... plot of a hypergraph with blue vertices and blue dotted edges ..."> **`VertexStyle`** works similar to [`GraphPlot`](https://reference.wolfram.com/language/ref/GraphPlot.html): @@ -235,7 +275,9 @@ In[] := HypergraphPlot[{{1, 2, 3}, {3, 4, 5}, {5, 6, 7, 1}, {7, 8, 2}, {4, 9}, {9}}, PlotStyle -> Directive[Blue, Dotted], VertexStyle -> Red] ``` -<img src="/Documentation/Images/PlotWithCustomVertexStyle.png" width="478"> +<img src="/Documentation/Images/PlotWithCustomVertexStyle.png" + width="478" + alt="Out[] = ... plot of a hypergraph with red vertices and blue dotted edges ..."> **`EdgeStyle`** controls edge lines, and `"EdgePolygonStyle"` inherits from it (automatically adding transparency): @@ -245,7 +287,9 @@ In[] := HypergraphPlot[{{1, 2, 3}, {3, 4, 5}, {5, 6, 7, 1}, {7, 8, 2}, {4, EdgeStyle -> Darker @ Green] ``` -<img src="/Documentation/Images/PlotWithCustomEdgeStyle.png" width="478"> +<img src="/Documentation/Images/PlotWithCustomEdgeStyle.png" + width="478" + alt="Out[] = ... plot of a hypergraph with red vertices and green edge arrows and polygons ..."> Finally, **`"EdgePolygonStyle"`** controls the hyperedge polygons: @@ -257,7 +301,9 @@ In[] := HypergraphPlot[{{1, 2, 3}, {3, 4, 5}, {5, 6, 7, 1}, {7, 8, 2}, {4, Directive[Lighter[Green, 0.9], EdgeForm[Dotted]]] ``` -<img src="/Documentation/Images/PlotWithCustomEdgePolygonStyle.png" width="478"> +<img src="/Documentation/Images/PlotWithCustomEdgePolygonStyle.png" + width="478" + alt="Out[] = ... plot of a hypergraph with red vertices, green edge arrows and polygons with dotted edges ..."> It is possible to specify styles separately for each edge and vertex. Vertex styles are specified in the same order as `Union @* Catenate` evaluated on the list of edges: @@ -268,7 +314,9 @@ In[] := HypergraphPlot[{{1, 2, 3}, {3, 4, 5}, {5, 6, 7, 1}, {7, 8, 2}, {4, VertexStyle -> ColorData[98] /@ Range[9]] ``` -<img src="/Documentation/Images/PlotWithElementwiseStyles.png" width="478"> +<img src="/Documentation/Images/PlotWithElementwiseStyles.png" + width="478" + alt="Out[] = ... plot of a hypergraph with differently colored vertices and edges ..."> Alternatively, one can specify different styles for different patterns of elements. In this case, styles are specified as [`Association`](https://reference.wolfram.com/language/ref/Association.html)s with patterns for keys. This can be @@ -283,7 +331,9 @@ In[] := HypergraphPlot[WolframModel[{{1, 2, 3}, {4, 5, 6}, {2, 5}, {5, 2}} -> EdgeStyle -> <|{_, _} -> Darker @ Green, {_, _, _} -> Darker @ Red|>] ``` -<img src="/Documentation/Images/PlotWithAritywiseStyles.png" width="478"> +<img src="/Documentation/Images/PlotWithAritywiseStyles.png" + width="478" + alt="Out[] = ... plot of a hypergraph with green 2-edges and red 3-edges ..."> ## Graphics Options @@ -299,4 +349,6 @@ In[] := HypergraphPlot[WolframModel[{{1, 2}} -> {{1, 3}, {1, 3}, {3, 2}}, PlotRange -> {{30, 50}, {20, 40}}, Axes -> True] ``` -<img src="/Documentation/Images/PlotOfHypergraphFragment.png" width="478"> +<img src="/Documentation/Images/PlotOfHypergraphFragment.png" + width="478" + alt="Out[] = ... plot of a hypergraph fragment in black and white with gridlines and axes ..."> diff --git a/Documentation/SymbolsAndFunctions/RulePlotOfWolframModel.md b/Documentation/SymbolsAndFunctions/RulePlotOfWolframModel.md index eacf977dc..149e59f72 100644 --- a/Documentation/SymbolsAndFunctions/RulePlotOfWolframModel.md +++ b/Documentation/SymbolsAndFunctions/RulePlotOfWolframModel.md @@ -10,7 +10,9 @@ In[] := RulePlot[WolframModel[{{1, 2}, {1, 2}} -> {{3, 2}, {3, 2}, {2, 1}, {1, 3}}]] ``` -<img src="/Documentation/Images/RulePlot.png" width="429"> +<img src="/Documentation/Images/RulePlot.png" + width="429" + alt="Out[] = ... input subhypergraph -> output subhypergraph ..."> The shared elements between rule sides (vertices `1` and `2` in the example above) are put at the same positions in the `RulePlot` and highlighted in a darker shade of blue. Shared edges are highlighted as well: @@ -19,7 +21,9 @@ the `RulePlot` and highlighted in a darker shade of blue. Shared edges are highl In[] := RulePlot[WolframModel[{{1, 2, 3}} -> {{1, 2, 3}, {3, 4, 5}}]] ``` -<img src="/Documentation/Images/RulePlotWithSharedEdges.png" width="429"> +<img src="/Documentation/Images/RulePlotWithSharedEdges.png" + width="429" + alt="Out[] = ... Wolfram model rule plot with the shared edge located at the same position on both sides ..."> Multiple rules can be plotted: @@ -29,16 +33,22 @@ In[] := RulePlot[WolframModel[{{{1, 1, 2}} -> {{1, 2, 1}, {3, 4, 2}} -> {{4, 3, 2}}}]] ``` -<img src="/Documentation/Images/MultipleRulesPlot.png" width="808"> +<img src="/Documentation/Images/MultipleRulesPlot.png" + width="808" + alt="Out[] = ... grid with 2 boxes showing different rules ..."> Passing a [`WolframModelEvolutionObject`](/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/WolframModelAndWolframModelEvolutionObject.md) plots its [`"Rules"`](/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/Properties/Rules.md) property: -<img src="/Documentation/Images/RulePlotWolframModelEvolutionObjectInput.png" width="575"> +<img src="/Documentation/Images/RulePlotWolframModelEvolutionObjectInput.png" + width="575" + alt="In[] := RulePlot[WolframModelEvolutionObject[...]]"> -<img src="/Documentation/Images/RulePlot.png" width="429"> +<img src="/Documentation/Images/RulePlot.png" + width="429" + alt="Out[] = ... input subhypergraph -> output subhypergraph ..."> Sometimes an incorrectly scaled layout might be produced due to the issue discussed above in [`VertexCoordinates`](HypergraphPlot.md#vertexcoordinates): @@ -48,7 +58,9 @@ In[] := RulePlot[WolframModel[{{1, 2}, {1, 3}, {1, 4}} -> {{2, 2}, {2, 2}, {2, 5}, {3, 2}}]] ``` -<img src="/Documentation/Images/IncorrectlyScaledRulePlot.png" width="429"> +<img src="/Documentation/Images/IncorrectlyScaledRulePlot.png" + width="429" + alt="Out[] = ... rule plot where vertices and arrowheads are too large ..."> `VertexCoordinates` can be used in that case to specify the layout manually: @@ -59,7 +71,9 @@ In[] := RulePlot[WolframModel[{{1, 2}, {1, 3}, {1, 4}} -> 4 -> {-1, 0}, 5 -> {2, 1}}] ``` -<img src="/Documentation/Images/RulePlotWithCustomCoordinates.png" width="429"> +<img src="/Documentation/Images/RulePlotWithCustomCoordinates.png" + width="429" + alt="Out[] = ... rule plot with reduced sizes for vertices and arrowheads ..."> Some of the [`HypergraphPlot`](HypergraphPlot.md) options are supported, specifically [`GraphHighlightStyle`](HypergraphPlot.md#graphhighlight-and-graphhighlightstyle) @@ -77,7 +91,9 @@ In[] := RulePlot[WolframModel[{{{1, 2}} -> {{1, 3}, {1, 3}, {3, 2}}, {{1, 2}, {1, 2}} -> {{1, 3}, {3, 2}}}], Spacings -> 0.03] ``` -<img src="/Documentation/Images/RulePlotWithSmallSpacings.png" width="747"> +<img src="/Documentation/Images/RulePlotWithSmallSpacings.png" + width="747" + alt="Out[] = ... plot of 2 rules with tight spaces between the rules and the frame ..."> **`"RulePartsAspectRatio"`** is used to control the aspect ratio of rule sides. As an example, it can be used to force rule parts to be square: @@ -87,4 +103,6 @@ In[] := RulePlot[WolframModel[{{1, 2}} -> {{1, 3}, {1, 3}, {3, 2}}], "RulePartsAspectRatio" -> 1] ``` -<img src="/Documentation/Images/SquareRulePlot.png" width="429"> +<img src="/Documentation/Images/SquareRulePlot.png" + width="429" + alt="Out[] = ... rule plot with square rule parts ..."> diff --git a/Documentation/SymbolsAndFunctions/UtilityFunctions/AcyclicGraphTake.md b/Documentation/SymbolsAndFunctions/UtilityFunctions/AcyclicGraphTake.md index 89d870773..e2cb0166a 100644 --- a/Documentation/SymbolsAndFunctions/UtilityFunctions/AcyclicGraphTake.md +++ b/Documentation/SymbolsAndFunctions/UtilityFunctions/AcyclicGraphTake.md @@ -12,10 +12,14 @@ In[] := graph = BlockRandom[ ] ``` -<img src="/Documentation/Images/AcyclicGraphTakeInput.png" width="478.2"> +<img src="/Documentation/Images/AcyclicGraphTakeInput.png" + width="478.2" + alt="Out[] = ... directed acyclic graph with 10 vertices and multiple branches ..."> ```wl In[] := AcyclicGraphTake[graph, {1, 9}] ``` -<img src="/Documentation/Images/AcyclicGraphTakeOutput.png" width="232.2"> +<img src="/Documentation/Images/AcyclicGraphTakeOutput.png" + width="232.2" + alt="Out[] = ... subgraph of the input graph with only vertices between 1 and 9 remaining ..."> diff --git a/Documentation/SymbolsAndFunctions/UtilityFunctions/BuildData.md b/Documentation/SymbolsAndFunctions/UtilityFunctions/BuildData.md index 188383bdc..f912de1da 100644 --- a/Documentation/SymbolsAndFunctions/UtilityFunctions/BuildData.md +++ b/Documentation/SymbolsAndFunctions/UtilityFunctions/BuildData.md @@ -18,6 +18,8 @@ If the build directory were not clean, it would have "\*" at the end. In[] := $SetReplaceBuildTime ``` -<img src="/Documentation/Images/BuildTime.png" width="277"> +<img src="/Documentation/Images/BuildTime.png" + width="277" + alt="Out[] = ... [Sun 12 Apr 2020 16:06:38 UTC] ..."> These constants are particularly useful for reporting issues with the code. diff --git a/Documentation/SymbolsAndFunctions/UtilityFunctions/CausalDensityDimension.md b/Documentation/SymbolsAndFunctions/UtilityFunctions/CausalDensityDimension.md index 7d64c0d43..5fdb25c67 100644 --- a/Documentation/SymbolsAndFunctions/UtilityFunctions/CausalDensityDimension.md +++ b/Documentation/SymbolsAndFunctions/UtilityFunctions/CausalDensityDimension.md @@ -21,7 +21,10 @@ to be the number of causal relations, i.e. the number of pairs *x* ≺ *y* betwe ratio between *C*<sub>*2*</sub> and *C*<sub>*1*</sub> is dependent on the dimensionality *d* into which the causal set embeds: -<img src="/Documentation/Images/MyrheimMeyer.png" width="203.8">, +$$ +\frac{\langle C_2 \rangle}{\langle C_1 \rangle^2} = + \frac{\Gamma\left(d + 1\right) \Gamma\left(\frac{d}{2}\right)}{4 \Gamma\left(\frac{3 d}{2}\right)}, +$$ where *d* is the dimensionality of the (flat) manifold. This expression comes from the fact that the probabilty that a random choice of elements in the causal set are causally connected is directly proportional to the volume @@ -46,7 +49,9 @@ sprinkledGraph = BlockRandom[Module[{coordinates, causalSet}, ], RandomSeeding -> 0] ``` -<img src="/Documentation/Images/CausalDensityDimensionInput.png" width="386.4"> +<img src="/Documentation/Images/CausalDensityDimensionInput.png" + width="386.4" + alt="Out[] = ... random causal set graph of 2 spacetime dimensions ..."> ```wl In[] := CausalDensityDimension[sprinkledGraph, {1, 50}] diff --git a/Documentation/SymbolsAndFunctions/UtilityFunctions/GeneralizedGridGraph.md b/Documentation/SymbolsAndFunctions/UtilityFunctions/GeneralizedGridGraph.md index b6e65e005..fe44834ff 100644 --- a/Documentation/SymbolsAndFunctions/UtilityFunctions/GeneralizedGridGraph.md +++ b/Documentation/SymbolsAndFunctions/UtilityFunctions/GeneralizedGridGraph.md @@ -9,7 +9,9 @@ it allows for additional specifiers in each direction of the grid: In[] := GeneralizedGridGraph[{5 -> "Directed", 5 -> "Circular"}] ``` -<img src="/Documentation/Images/GridGraph.png" width="478"> +<img src="/Documentation/Images/GridGraph.png" + width="478" + alt="Out[] = ... 5x5 grid graph, directed and circular on different dimensions ..."> Possible specifiers are `"Directed"` and `"Circular"`, and they can be combined: @@ -17,7 +19,9 @@ Possible specifiers are `"Directed"` and `"Circular"`, and they can be combined: In[] := GeneralizedGridGraph[{3 -> {"Directed", "Circular"}, 6}] ``` -<img src="/Documentation/Images/DirectedCircularGridGraph.png" width="478"> +<img src="/Documentation/Images/DirectedCircularGridGraph.png" + width="478" + alt="Out[] = ... 3x6 grid graph, directed and circular on the first dimension ..."> The same options as [`GridGraph`](https://reference.wolfram.com/language/ref/GridGraph.html) are supported. In addition `"VertexNamingFunction" -> "Coordinates"` names vertices according to their position in a grid: @@ -27,7 +31,9 @@ In[] := GeneralizedGridGraph[{4, 5, 2}, "VertexNamingFunction" -> "Coordinates", VertexLabels -> Automatic] ``` -<img src="/Documentation/Images/GridGraphWithCoordinateNamedVertices.png" width="478"> +<img src="/Documentation/Images/GridGraphWithCoordinateNamedVertices.png" + width="478" + alt="Out[] = ... 4x5x2 grid graph with vertices labeled by their coordinates ..."> Finally, it's possible to use different `EdgeStyle` in different directions by specifying it as a list: @@ -37,4 +43,6 @@ In[] := GeneralizedGridGraph[{4 -> "Directed", 5, 2}, EdgeStyle -> Darker /@ {Red, Green, Blue}] ``` -<img src="/Documentation/Images/GridGraphWithDifferentEdgeStyles.png" width="478"> +<img src="/Documentation/Images/GridGraphWithDifferentEdgeStyles.png" + width="478" + alt="Out[] = ... 4x5x2 grid graph with edges colored red, green, and blue in different directions ..."> diff --git a/Documentation/SymbolsAndFunctions/UtilityFunctions/HypergraphAutomorphismGroup.md b/Documentation/SymbolsAndFunctions/UtilityFunctions/HypergraphAutomorphismGroup.md index 8225bc23a..447dc9664 100644 --- a/Documentation/SymbolsAndFunctions/UtilityFunctions/HypergraphAutomorphismGroup.md +++ b/Documentation/SymbolsAndFunctions/UtilityFunctions/HypergraphAutomorphismGroup.md @@ -21,7 +21,9 @@ In[] := GroupOrder[ 8, 5}, {5, 9, 1}}]] ``` -<img src="/Documentation/Images/SymmetricHypergraphPlot.png" width="451"> +<img src="/Documentation/Images/SymmetricHypergraphPlot.png" + width="451" + alt=">> ... highly symmetric hypergraph plot ..."> ```wl Out[] = 24 diff --git a/Documentation/SymbolsAndFunctions/UtilityFunctions/HypergraphToGraph.md b/Documentation/SymbolsAndFunctions/UtilityFunctions/HypergraphToGraph.md index cc7695a55..28950e002 100644 --- a/Documentation/SymbolsAndFunctions/UtilityFunctions/HypergraphToGraph.md +++ b/Documentation/SymbolsAndFunctions/UtilityFunctions/HypergraphToGraph.md @@ -19,7 +19,9 @@ In[]:= HypergraphToGraph[ GraphLayout -> "SpringElectricalEmbedding"] ``` -<img src="/Documentation/Images/HypergraphToGraphDirectedDistancePreserving.png" width="478"> +<img src="/Documentation/Images/HypergraphToGraphDirectedDistancePreserving.png" + width="478" + alt="Out[] = Graph[{x -> x, x -> y, x -> z, x -> y, x -> z, y -> z, z -> w}, ...]"> ## **"UndirectedDistancePreserving"** @@ -34,7 +36,9 @@ In[]:= HypergraphToGraph[ GraphLayout -> "SpringElectricalEmbedding"] ``` -<img src="/Documentation/Images/HypergraphToGraphUndirectedDistancePreserving.png" width="478"> +<img src="/Documentation/Images/HypergraphToGraphUndirectedDistancePreserving.png" + width="478" + alt="Out[] = Graph[{x <-> x, x <-> y, x <-> z, x <-> y, x <-> z, y <-> z, z <-> w}, ...]"> ## **"StructurePreserving"** @@ -49,7 +53,14 @@ In[]:= HypergraphToGraph[ VertexLabels -> Automatic] ``` -<img src="/Documentation/Images/HypergraphToGraphStructurePreserving.png" width="352"> +<img src="/Documentation/Images/HypergraphToGraphStructurePreserving.png" + width="352" + alt='Out[] = Graph[ + {{"Hyperedge", 1, 1} -> {"Vertex", x}, {"Hyperedge", 1, 1} -> {"Hyperedge", 1, 2}, + {"Hyperedge", 1, 2} -> {"Vertex", x}, {"Hyperedge", 1, 2} -> {"Hyperedge", 1, 3}, + {"Hyperedge", 1, 3} -> {"Vertex", y}, {"Hyperedge", 1, 3} -> {"Hyperedge", 1, 4}, + {"Hyperedge", 1, 4} -> {"Vertex", z}, {"Hyperedge", 2, 1} -> {"Vertex", z}, + {"Hyperedge", 2, 1} -> {"Hyperedge", 2, 2}, {"Hyperedge", 2, 2} -> {"Vertex", w}}, ...]'> It is important to mention that this conversion does not lose any information, and it is possible to unambiguously retrieve the original hypergraph from the resulting [`Graph`](https://reference.wolfram.com/language/ref/Graph.html): diff --git a/Documentation/SymbolsAndFunctions/UtilityFunctions/HypergraphUnifications.md b/Documentation/SymbolsAndFunctions/UtilityFunctions/HypergraphUnifications.md index b6ac0f8ee..af6a6a0fb 100644 --- a/Documentation/SymbolsAndFunctions/UtilityFunctions/HypergraphUnifications.md +++ b/Documentation/SymbolsAndFunctions/UtilityFunctions/HypergraphUnifications.md @@ -34,7 +34,9 @@ All unifications can be visualized with **`HypergraphUnificationsPlot`**: In[] := HypergraphUnificationsPlot[{{1, 2}, {2, 3}}, {{1, 2}, {2, 3}}] ``` -<img src="/Documentation/Images/HypergraphUnificationsPlot.png" width="745"> +<img src="/Documentation/Images/HypergraphUnificationsPlot.png" + width="745" + alt="Out[] = {... 6 plots of unified hypergraphs with different colors used for input subhypergraphs ...}"> Vertex labels here show the vertex names in the input graphs to which the unification is matched. @@ -45,4 +47,8 @@ In[] := HypergraphUnificationsPlot[{{1, 2, 3}, {4, 5, 6}, {1, 4}}, {{1, 2, 3}, {4, 5, 6}, {1, 4}}, VertexLabels -> Automatic] ``` -<img src="/Documentation/Images/HypergraphUnificationsPlotWithMultipleArities.png" width="746"> +<img src="/Documentation/Images/HypergraphUnificationsPlotWithMultipleArities.png" + width="746" + alt="Out[] = { + ... 13 plots of unified hypergraphs, where vertices are labeled with pairs of input hypergraphs vertex names ... + }"> diff --git a/Documentation/SymbolsAndFunctions/UtilityFunctions/SetReplaceStyleData.md b/Documentation/SymbolsAndFunctions/UtilityFunctions/SetReplaceStyleData.md index 737fb2cc3..c17e8ba49 100644 --- a/Documentation/SymbolsAndFunctions/UtilityFunctions/SetReplaceStyleData.md +++ b/Documentation/SymbolsAndFunctions/UtilityFunctions/SetReplaceStyleData.md @@ -12,7 +12,9 @@ For example, here is the default style used to draw polygons in [`HypergraphPlot In[] := SetReplaceStyleData["SpatialGraph", "EdgePolygonStyle"] ``` -<img src="/Documentation/Images/SpatialGraphEdgePolygonStyle.png" width="437"> +<img src="/Documentation/Images/SpatialGraphEdgePolygonStyle.png" + width="437" + alt="Out[] = Directive[Hue[0.63, 0.66, 0.81], Opacity[0.1], EdgeForm[None]]"> The full specification is `SetReplaceStyleData[theme, plot type, style element]`, however either the last or the last two elements can be omitted to obtain a @@ -24,7 +26,14 @@ styles used in [`"CausalGraph"`](../WolframModelAndWolframModelEvolutionObject/P In[] := SetReplaceStyleData["CausalGraph"] ``` -<img src="/Documentation/Images/CausalGraphStyles.png" width="747"> +<img src="/Documentation/Images/CausalGraphStyles.png" + width="747" + alt='<| + "Background" -> None, "EdgeStyle" -> Hue[0, 1, 0.56], + "FinalVertexStyle" -> Directive[GrayLevel[1], EdgeForm[{Hue[0.11, 1, 0.97], Opacity[1]}]], + ..., + "VertexStyle" -> Directive[Hue[0.11, 1, 0.97], EdgeForm[{Hue[0.11, 1, 0.97], Opacity[1]}]] + |>'> This function is useful if one needs to produce "fake" example plots using styles consistent with *SetReplace*. @@ -35,7 +44,12 @@ all options that needs to be passed using an `"Options"` property: In[] := SetReplaceStyleData["SpatialGraph3D", "Options"] ``` -<img src="/Documentation/Images/SpatialGraph3DOptions.png" width="625"> +<img src="/Documentation/Images/SpatialGraph3DOptions.png" + width="625" + alt="{ + VertexStyle -> Directive[Hue[0.65, 0.64, 0.68], Specularity[Hue[0.71, 0.6, 0.64], 10]], + EdgeStyle -> Hue[0.61, 0.3, 0.85] + }"> Alternatively, one can use the `"Function"` property, which would give a function that takes a graph and produces a correctly styled graph: @@ -45,4 +59,10 @@ In[] := SetReplaceStyleData["SpatialGraph3D", "Function"][ Graph3D[{1 -> 2, 2 -> 3, 3 -> 1, 3 -> 4, 4 -> 1}]] ``` -<img src="/Documentation/Images/FakeStyledSpatialGraph3D.png" width="478"> +<img src="/Documentation/Images/FakeStyledSpatialGraph3D.png" + width="478" + alt="Out[] = Graph3D[ + ..., + VertexStyle -> Directive[Hue[0.65, 0.64, 0.68], Specularity[Hue[0.71, 0.6, 0.64], 10]], + EdgeStyle -> Hue[0.61, 0.3, 0.85] + ]"> diff --git a/Documentation/SymbolsAndFunctions/UtilityFunctions/WolframModelRuleValue.md b/Documentation/SymbolsAndFunctions/UtilityFunctions/WolframModelRuleValue.md index 4942a77e4..2aeea904b 100644 --- a/Documentation/SymbolsAndFunctions/UtilityFunctions/WolframModelRuleValue.md +++ b/Documentation/SymbolsAndFunctions/UtilityFunctions/WolframModelRuleValue.md @@ -48,7 +48,7 @@ In[] := WolframModelRuleValue[{{1, 2, 3}, {4, 5, 6}, {2, 5}, {5, 2}} -> 12}}, "TraditionalSignature"] ``` -<img src="/Documentation/Images/TraditionalSignature.png" width="139"> +<img src="/Documentation/Images/TraditionalSignature.png" width="139", alt="Out[] = 2_2 2_3 -> 8_2 4_3"> In this example, there are 2 binary and 2 ternary edges in the input, and 8 binary and 4 ternary edges in the output. The more machine-readable form of this can be obtained with **`Signature`** property: diff --git a/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/Options/EventDeduplication.md b/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/Options/EventDeduplication.md index f6179d1a7..901ccaba1 100644 --- a/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/Options/EventDeduplication.md +++ b/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/Options/EventDeduplication.md @@ -14,7 +14,9 @@ In[] := WolframModel[{{a, b}, {a, c}} -> {{b, c}}, {{1, 2}, {1, 3}}, VertexLabels -> Automatic] ``` -<img src="/Documentation/Images/TwoMatchOrdersDifferentOutcomes.png" width="310"> +<img src="/Documentation/Images/TwoMatchOrdersDifferentOutcomes.png" + width="310" + alt="Out[] = ... {{1, 2}, {1, 3}} -> {{2, 3}} and {{1, 2}, {1, 3}} -> {{3, 2}} ..."> In the case above the outputs are different, however sometimes they are the same (more precisely, isomorphic): @@ -25,7 +27,9 @@ In[] := WolframModel[{{a, b}, {a, c}} -> {{b, c}, {c, b}}, {{1, 2}, {1, 3}}, VertexLabels -> Automatic] ``` -<img src="/Documentation/Images/TwoMatchOrdersSameOutcome.png" width="478"> +<img src="/Documentation/Images/TwoMatchOrdersSameOutcome.png" + width="478" + alt="Out[] = ... {{1, 2}, {1, 3}} -> {{2, 3}, {3, 2}} and {{1, 3}, {1, 2}} -> {{3, 2}, {2, 3}} ..."> **`EventDeduplication`** option can be used in a case like this to combine these two identical events into one: @@ -36,7 +40,9 @@ In[] := WolframModel[{{a, b}, {a, c}} -> {{b, c}, {c, b}}, {{1, 2}, {1, 3}}, VertexLabels -> Automatic] ``` -<img src="/Documentation/Images/TwoIdentifiedMatchOrders.png" width="310"> +<img src="/Documentation/Images/TwoIdentifiedMatchOrders.png" + width="310" + alt="Out[] = ... {{1, 2}, {1, 3}} -> {{2, 3}, {3, 2}} ..."> The outputs of the rule need not be identical, but should be isomorphic with respect to renaming of new atoms: @@ -47,4 +53,6 @@ In[] := WolframModel[{{a, b}, {a, c}} -> {{b, d}, {c, d}}, {{1, 2}, {1, 3}}, VertexLabels -> Automatic] ``` -<img src="/Documentation/Images/TwoIsomorphicMatchOrders.png" width="310"> +<img src="/Documentation/Images/TwoIsomorphicMatchOrders.png" + width="310" + alt="Out[] = ... {{1, 2}, {1, 3}} -> {{2, 4}, {3, 4}} ..."> diff --git a/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/Options/EventOrderingFunction.md b/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/Options/EventOrderingFunction.md index 13a8cbb5d..73328c577 100644 --- a/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/Options/EventOrderingFunction.md +++ b/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/Options/EventOrderingFunction.md @@ -10,7 +10,9 @@ In[] := WolframModel[{{1, 2}} -> {{1, 3}, {3, 2}}, {{1, 2}, {2, 2}}, <|"MaxEvents" -> 1|>, "EventsStatesPlotsList"] ``` -<img src="/Documentation/Images/NonoverlappingEvolutionWithAutomaticOrdering.png" width="513"> +<img src="/Documentation/Images/NonoverlappingEvolutionWithAutomaticOrdering.png" + width="513" + alt="Out[] = {... {{1, 2}, {2, 2}} -> {{2, 2}, {1, 3}, {3, 2}} ...}"> ```wl In[] := WolframModel[{{1, 2}} -> {{1, 3}, {3, 2}}, @@ -18,7 +20,9 @@ In[] := WolframModel[{{1, 2}} -> {{1, 3}, {3, 2}}, "EventOrderingFunction" -> "NewestEdge"] ``` -<img src="/Documentation/Images/NonoverlappingEvolutionWithNewestEdgeOrdering.png" width="513"> +<img src="/Documentation/Images/NonoverlappingEvolutionWithNewestEdgeOrdering.png" + width="513" + alt="Out[] = {... {{1, 2}, {2, 2}} -> {{1, 2}, {2, 3}, {3, 2}} ...}"> In this particular so-called non-overlapping system, the order of replacements does not matter. Regardless of order, the same final state (up to renaming of vertices) is produced for the same fixed number of generations. This will always be @@ -30,7 +34,9 @@ In[] := WolframModel[{{1, 2}} -> {{1, 3}, {1, 3}, {3, 2}}, "EventOrderingFunction" -> #] & /@ {Automatic, "Random"} ``` -<img src="/Documentation/Images/NonoverlappingRandomEvolutionComparison.png" width="513"> +<img src="/Documentation/Images/NonoverlappingRandomEvolutionComparison.png" + width="513" + alt="Out[] = ... list of two isomorphic graphs with 54 edges ..."> For some systems, however, the order of replacements does matter, and non-equivalent final states would be produced for different orders even if a fixed number of generations is requested: @@ -40,7 +46,9 @@ In[] := WolframModel[{{1, 2}, {2, 3}} -> {{4, 2}, {4, 1}, {2, 1}, {3, 4}}, {{1, 2}, {2, 3}, {3, 4}, {4, 1}}, 5, "FinalStatePlot"] ``` -<img src="/Documentation/Images/OverlappingEvolutionAutomaticOrdering.png" width="478"> +<img src="/Documentation/Images/OverlappingEvolutionAutomaticOrdering.png" + width="478" + alt="Out[] = ... a graph with 128 edges ..."> ```wl In[] := WolframModel[{{1, 2}, {2, 3}} -> {{4, 2}, {4, 1}, {2, 1}, {3, 4}}, @@ -48,7 +56,9 @@ In[] := WolframModel[{{1, 2}, {2, 3}} -> {{4, 2}, {4, 1}, {2, 1}, {3, 4}}, "EventOrderingFunction" -> "RuleOrdering"] ``` -<img src="/Documentation/Images/OverlappingEvolutionRuleOrderingOrdering.png" width="478"> +<img src="/Documentation/Images/OverlappingEvolutionRuleOrderingOrdering.png" + width="478" + alt="Out[] = ... a graph with 96 edges ..."> In a case like that, it is important to be able to specify the desired evolution order, which is the purpose of the **`"EventOrderingFunction"`** option. `"EventOrderingFunction"` is specified as a list of sorting criteria such as @@ -58,46 +68,46 @@ criteria, one is chosen uniformly at random (which is why `{}` works as a shorth Possible sorting criteria are: -* `"OldestEdge"`: greedily select the edge closest to the beginning of the list (which would typically correspond to the +- `"OldestEdge"`: greedily select the edge closest to the beginning of the list (which would typically correspond to the oldest edge). Note, the edges within a single-event output are assumed oldest-to-newest left-to-right as written on - the right-hand side of the rule. After this criterion, a fixed ***subset*** of edges is guaranteed to be chosen, but + the right-hand side of the rule. After this criterion, a fixed **_subset_** of edges is guaranteed to be chosen, but different orderings of that subset might be possible (which could allow for multiple non-equivalent matches). -* `"NewestEdge"`: similar to `"OldestEdge"` except edges are chosen from the end of the list rather than from the +- `"NewestEdge"`: similar to `"OldestEdge"` except edges are chosen from the end of the list rather than from the beginning. -* `"LeastRecentEdge"`: this is similar to `"OldestEdge"`, but instead of greedily choosing the oldest edges, it instead +- `"LeastRecentEdge"`: this is similar to `"OldestEdge"`, but instead of greedily choosing the oldest edges, it instead avoids choosing newest ones. The difference is best demonstrated in an example: - ```wl - In[] := WolframModel[{{x, y}, {y, z}} -> {}, - {{1, 2}, {a, b}, {b, c}, {2, 3}}, - <|"MaxEvents" -> 1|>, "AllEventsList", - "EventOrderingFunction" -> #] & /@ {"OldestEdge", - "LeastRecentEdge"} - Out[] = {{{1, {1, 4} -> {}}}, {{1, {2, 3} -> {}}}} - ``` + ```wl + In[] := WolframModel[{{x, y}, {y, z}} -> {}, + {{1, 2}, {a, b}, {b, c}, {2, 3}}, + <|"MaxEvents" -> 1|>, "AllEventsList", + "EventOrderingFunction" -> #] & /@ {"OldestEdge", + "LeastRecentEdge"} + Out[] = {{{1, {1, 4} -> {}}}, {{1, {2, 3} -> {}}}} + ``` Note that in this example `"OldestEdge"` has selected the first and the last edge, whereas `"LeastRecentEdge"`, in an attempt to avoid the most "recent" last edge, has selected the second and the third ones. In this case, similarly to `"OldestEdge"`, a fixed set of edges is guaranteed to be chosen, but potentially in multiple orders. -* `"LeastOldEdge"`: similar to `"LeastRecentEdge"`, but avoids old edges instead of new ones. +- `"LeastOldEdge"`: similar to `"LeastRecentEdge"`, but avoids old edges instead of new ones. Note that counterintuitively `"OldestEdge"` sorting is not equivalent to the reverse of `"NewestEdge"` sorting, it is equivalent to the reverse of `"LeastOldEdge"`. Similarly, `"NewestEdge"` is the reverse of `"LeastRecentEdge"`. -* `"RuleOrdering"`: similarly to `"OldestEdge"` greedily chooses edges from the beginning of the list, however - unlike `"OldestEdge"` which would pick the oldest edge with *any* available matches, it chooses edges in the order the +- `"RuleOrdering"`: similarly to `"OldestEdge"` greedily chooses edges from the beginning of the list, however + unlike `"OldestEdge"` which would pick the oldest edge with _any_ available matches, it chooses edges in the order the left-hand side of (any) rule is written. The difference is best demonstrated in an example: - ```wl - In[] := WolframModel[{{x, y}, {y, z}} -> {}, - {{b, c}, {1, 2}, {a, b}, {2, 3}}, - <|"MaxEvents" -> 1|>, "AllEventsList", - "EventOrderingFunction" -> #] & /@ {"OldestEdge", "RuleOrdering"} - Out[] = {{{1, {1, 3} -> {}}}, {{1, {2, 4} -> {}}}} - ``` + ```wl + In[] := WolframModel[{{x, y}, {y, z}} -> {}, + {{b, c}, {1, 2}, {a, b}, {2, 3}}, + <|"MaxEvents" -> 1|>, "AllEventsList", + "EventOrderingFunction" -> #] & /@ {"OldestEdge", "RuleOrdering"} + Out[] = {{{1, {1, 3} -> {}}}, {{1, {2, 4} -> {}}}} + ``` Note how `"RuleOrdering"` has selected the second edge first because it matches the first rule input while the first edge does not. @@ -105,22 +115,22 @@ Possible sorting criteria are: In this case, a specific ordered sequence of edges is guaranteed to be matched (including its permutation). However, multiple matches might still be possible if multiple rules exist which match that sequence. -* `"ReverseRuleOrdering"`: as the name suggests, this is just the reverse of `"RuleOrdering"`. +- `"ReverseRuleOrdering"`: as the name suggests, this is just the reverse of `"RuleOrdering"`. -* `"RuleIndex"`: this simply means it attempts to match the first rule first, and only if no matches to the first rule +- `"RuleIndex"`: this simply means it attempts to match the first rule first, and only if no matches to the first rule are possible, it goes to the second rule, and so on. -* `"ReverseRuleIndex"`: similar to `"RuleIndex"`, but reversed as the name suggests. +- `"ReverseRuleIndex"`: similar to `"RuleIndex"`, but reversed as the name suggests. -* `"Random"`: selects a single match uniformly at random. It is possible to do that efficiently because the C++ +- `"Random"`: selects a single match uniformly at random. It is possible to do that efficiently because the C++ implementation of `WolframModel` (the only one that supports `"EventOrderingFunction"`) keeps track of all possible matches at any point during the evolution. `"Random"` is guaranteed to select a single match, so the remaining sorting criteria are ignored. It can also be omitted because the random event is always chosen if provided sorting criteria are insufficient. The seeding can be controlled with [`SeedRandom`](https://reference.wolfram.com/language/ref/SeedRandom.html). However, the result does depend on - your platform (Mac/Linux/Windows) and the specific build (version) of *SetReplace*. + your platform (Mac/Linux/Windows) and the specific build (version) of _SetReplace_. -* `"Any"`: the chosen match is undefined. It can select any match, leading to nondeterministic and undefined evolution +- `"Any"`: the chosen match is undefined. It can select any match, leading to nondeterministic and undefined evolution order. In some cases, it has better performance than "Random". As a neat example, here is the output of all individual sorting criteria (default sorting criteria are appended to @@ -140,4 +150,6 @@ In[] := WolframModel[{{{1, 2}, {1, 3}, {1, 4}} -> {{5, 6}, {6, 7}, {7, 5}, {5, "ReverseRuleOrdering", "RuleIndex", "ReverseRuleIndex", "Random", "Any"} ``` -<img src="/Documentation/Images/AllEventOrderingFunctionPlots.png" width="1209"> +<img src="/Documentation/Images/AllEventOrderingFunctionPlots.png" + width="1209" + alt="Out[] = {... 10 graphs with variable complexity and edge count, one of which disconnected ...}"> diff --git a/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/Options/EventSelectionFunction.md b/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/Options/EventSelectionFunction.md index 49dedbe5b..40a392ecd 100644 --- a/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/Options/EventSelectionFunction.md +++ b/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/Options/EventSelectionFunction.md @@ -25,7 +25,9 @@ In[] := WolframModel[{{1, 2}, {2, 3}} -> {{1, 3}}, {{1, 2}, {2, 3}, {2, 4}}, Infinity]["ExpressionsEventsGraph", VertexLabels -> Automatic] ``` -<img src="/Documentation/Images/GlobalSpacelikeEvolution.png" width="419"> +<img src="/Documentation/Images/GlobalSpacelikeEvolution.png" + width="419" + alt="Out[] = ... {{1, 2}, {2, 3}} -> {{1, 3}} with {2, 4} remaining unused ..."> In this example we used the default `"GlobalSpacelike"` selection function, and the evolution terminated after a single event, because the expression `{1, 2}` was used, and it could not be reused to be matched with `{2, 4}`. However, let's @@ -38,7 +40,9 @@ In[] := WolframModel[{{1, 2}, {2, 3}} -> {{1, 3}}, {{1, 2}, {2, 3}, {2, 4}}, VertexLabels -> Automatic] ``` -<img src="/Documentation/Images/SpacelikeMatching.png" width="478"> +<img src="/Documentation/Images/SpacelikeMatching.png" + width="478" + alt="Out[] = ... {{1, 2}, {2, 3}} -> {{1, 3}} and {{1, 2}, {2, 4}} -> {{1, 4}} ..."> In this case, the expression `{1, 2}` was matched twice, which we can also see by looking at its list of destroyer events: @@ -62,7 +66,9 @@ In[] := WolframModel[{{{1, 2}, {2, 3}} -> {{1, 2, 3}}, VertexLabels -> Placed[Automatic, After]] ``` -<img src="/Documentation/Images/NoBranchlikeMatching.png" width="478"> +<img src="/Documentation/Images/NoBranchlikeMatching.png" + width="478" + alt="Out[] = ... {{1, 2}, {2, 3}} -> {{1, 2, 3}} and {{1, 2}, {2, 4}} -> {{1, 2, 4}} ..."> However, `"EventSelectionFunction" -> None` also matches expressions that are branchlike and timelike. So, further evolution will be generated in the previous example: @@ -75,7 +81,14 @@ In[] := WolframModel[{{{1, 2}, {2, 3}} -> {{1, 2, 3}}, VertexLabels -> Placed[Automatic, After]] ``` -<img src="/Documentation/Images/BranchlikeMatching.png" width="373"> +<img src="/Documentation/Images/BranchlikeMatching.png" + width="373" + alt="Out[] = ... + {{1, 2}, {2, 3}} -> {{1, 2, 3}}, + {{1, 2}, {2, 4}} -> {{1, 2, 4}}, + {{1, 2, 3}, {1, 2, 4}} -> {{1, 2, 3, 4}}, + {{1, 2, 4}, {1, 2, 3}} -> {{1, 2, 4, 3}} + ..."> Similarly, it matches timelike expressions `{1, 2}` and `{1, 2, 3}` below: @@ -87,7 +100,9 @@ In[] := WolframModel[{{{1, 2}, {2, 3}} -> {{1, 2, 3}}, VertexLabels -> Placed[Automatic, After]] ``` -<img src="/Documentation/Images/TimelikeMatching.png" width="247"> +<img src="/Documentation/Images/TimelikeMatching.png" + width="247" + alt="Out[] = ... {{1, 2}, {2, 3}} -> {{1, 2, 3}} and {{1, 2}, {1, 2, 3}} -> {{1, 2, 3, 4}} ..."> Because of this branchlike and timelike matching, branches in `"EventSelectionFunction" -> None` evolution are not separated but can "interfere" with one another. diff --git a/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/Options/IncludeBoundaryEvents.md b/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/Options/IncludeBoundaryEvents.md index 4926759a1..044769055 100644 --- a/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/Options/IncludeBoundaryEvents.md +++ b/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/Options/IncludeBoundaryEvents.md @@ -17,7 +17,15 @@ In[] := WolframModel[<|"PatternRules" -> {a_, b_} :> a + b|>, VertexLabels -> Placed[Automatic, After]] ``` -<img src="/Documentation/Images/ExpressionsEventsGraphWithBoundaryEvents.png" width="475"> +<img src="/Documentation/Images/ExpressionsEventsGraphWithBoundaryEvents.png" + width="475" + alt="Out[] = ... + Initial event -> {3, 8, 8, 8, 2, 10, 0, 9, 7}, + {3, 8} -> Event 1 -> {11}, + ..., + {27, 28} -> Event 8 -> {55}, + {55} -> Final event + ..."> Properties like [`"AllEventsList"`](../Properties/Events.md) are affected as well: diff --git a/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/Options/IncludePartialGenerations.md b/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/Options/IncludePartialGenerations.md index 7d5fb42a2..7b60c597d 100644 --- a/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/Options/IncludePartialGenerations.md +++ b/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/Options/IncludePartialGenerations.md @@ -11,7 +11,9 @@ In[] := WolframModel[{{1, 2}} -> {{1, 3}, {1, 3}, {3, 2}}, {{1, 1}}, <|"MaxEvents" -> 42|>] ``` -<img src="/Documentation/Images/EvolutionObjectWithPartialGenerations.png" width="508"> +<img src="/Documentation/Images/EvolutionObjectWithPartialGenerations.png" + width="508" + alt="Out[] = WolframModelEvolutionObject[... Generations: 4...5, Events: 42 ...]"> with @@ -21,7 +23,9 @@ In[] := WolframModel[{{1, 2}} -> {{1, 3}, {1, 3}, {3, 2}}, "IncludePartialGenerations" -> False] ``` -<img src="/Documentation/Images/EvolutionObjectWithDroppedGenerations.png" width="488"> +<img src="/Documentation/Images/EvolutionObjectWithDroppedGenerations.png" + width="488" + alt="Out[] = WolframModelEvolutionObject[... Generations: 4, Events: 40 ...]"> One neat use of this is producing a uniformly random evolution for a complete number of generations: @@ -33,4 +37,6 @@ In[] := WolframModel[{{1, 2, 3}, {2, 4, 5}} -> "IncludePartialGenerations" -> False] ``` -<img src="/Documentation/Images/RandomEvolutionPlotWithDroppedGenerations.png" width="478"> +<img src="/Documentation/Images/RandomEvolutionPlotWithDroppedGenerations.png" + width="478" + alt="Out[] = ... hypergraph plot showing a result of random evolution after a complete number of generations ..."> diff --git a/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/Options/Method.md b/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/Options/Method.md index 52f60dc08..48aa5ab9b 100644 --- a/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/Options/Method.md +++ b/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/Options/Method.md @@ -31,7 +31,9 @@ In[] := AbsoluteTiming[ {{0}}, <|"MaxEvents" -> 30|>, Method -> "LowLevel"]] ``` -<img src="/Documentation/Images/SlowLowLevelTiming.png" width="609"> +<img src="/Documentation/Images/SlowLowLevelTiming.png" + width="609" + alt="Out[] = {8.50169, WolframModelEvolutionObject[...]}"> takes almost 10 seconds in C++ implementation, and less than 1/10th of a second in the Wolfram Language implementation: @@ -41,7 +43,9 @@ In[] := AbsoluteTiming[ {{0}}, <|"MaxEvents" -> 30|>, Method -> "Symbolic"]] ``` -<img src="/Documentation/Images/FastSymbolicTiming.png" width="617"> +<img src="/Documentation/Images/FastSymbolicTiming.png" + width="617" + alt="Out[] = {0.010098, WolframModelEvolutionObject[...]}"> Wolfram Language implementation should be used if: diff --git a/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/Options/TimeConstraint.md b/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/Options/TimeConstraint.md index 20e93f440..7fd2dd603 100644 --- a/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/Options/TimeConstraint.md +++ b/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/Options/TimeConstraint.md @@ -10,4 +10,6 @@ In[] := WolframModel[{{1, 2}} -> {{1, 3}, {1, 3}, {3, 2}}, {{1, 1}}, Infinity, TimeConstraint -> 1] ``` -<img src="/Documentation/Images/TimeConstrainedEvolutionObject.png" width="565"> +<img src="/Documentation/Images/TimeConstrainedEvolutionObject.png" + width="565" + alt="Out[] = WolframModelEvolutionObject[... Generations: 9...10, Events: 12454 ...]"> diff --git a/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/Properties/CausalGraphs.md b/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/Properties/CausalGraphs.md index c7c941834..e4f067a01 100644 --- a/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/Properties/CausalGraphs.md +++ b/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/Properties/CausalGraphs.md @@ -19,7 +19,17 @@ In[] := WolframModel[<|"PatternRules" -> {a_, b_} :> a + b|>, VertexLabels -> Placed[Automatic, After]] ``` -<img src="/Documentation/Images/ArithmeticModelExpressionsEventsGraph.png" width="478"> +<img src="/Documentation/Images/ArithmeticModelExpressionsEventsGraph.png" + width="478" + alt="Out[] = ... a graph showing expressions and events: + {Expression 1, Expression 2} -> Event 1 -> {Expression 10}, + {Expression 3, Expression 4} -> Event 2 -> {Expression 11}, + ..., + {Expression 9, Expression 10} -> Event 5 -> {Expression 14}, + ..., + {Expression 13, Expression 14} -> Event 7 -> {Expression 16}, + {Expression 15, Expression 16} -> Event 8 -> {Expression 17} + ..."> The causal graph is very similar, it just has the expression-vertices contracted: @@ -28,7 +38,16 @@ In[] := WolframModel[<|"PatternRules" -> {a_, b_} :> a + b|>, {3, 8, 8, 8, 2, 10, 0, 9, 7}, Infinity, "CausalGraph"] ``` -<img src="/Documentation/Images/ArithmeticModelCausalGraph.png" width="478"> +<img src="/Documentation/Images/ArithmeticModelCausalGraph.png" + width="478" + alt="Out[] = ... a graph showing only events: + Event 1 -> Event 5, + Event 2 -> Event 6, + ..., + Event 5 -> Event 7, + ..., + Event 7 -> Event 8 + ..."> Here is an example for a hypergraph model (admittedly considerably harder to understand). Multiedges correspond to situations where multiple set elements were both created and destroyed by the same pair of events: @@ -40,7 +59,9 @@ In[] := WolframModel[{{1, 2, 3}, {4, 5, 6}, {1, 4}} -> {{1, 1, 1}, {1, 1, 1}, {1, 1}, {1, 1}, {1, 1}}, 20, "CausalGraph"] ``` -<img src="/Documentation/Images/HypergraphModelCausalGraph.png" width="478"> +<img src="/Documentation/Images/HypergraphModelCausalGraph.png" + width="478" + alt="Out[] = ... a hyperbolic-looking causal graph with a large number of multiedges ..."> **`"LayeredCausalGraph"`** generates the same graph but layers events generation-by-generation. For example, in our arithmetic causal graph, note how it's arranged differently from an example above: @@ -50,7 +71,11 @@ In[] := WolframModel[<|"PatternRules" -> {a_, b_} :> a + b|>, {3, 8, 8, 8, 2, 10, 0, 9, 7}, Infinity, "LayeredCausalGraph"] ``` -<img src="/Documentation/Images/ArithmeticModelLayeredCausalGraph.png" width="478"> +<img src="/Documentation/Images/ArithmeticModelLayeredCausalGraph.png" + width="478" + alt="Out[] = ... the same causal graph as above where events are arranged in layers corresponding to generations: + 0: {1, 2, 3, 4}, 1: {5, 6}, 2: {7}, 3: {8} + ..."> Note how slices through the expressions-events graph correspond to states returned by [`"StatesList"`](States.md). Pay attention to intersections of the slices with edges as well, as they correspond to unused expressions from previous @@ -66,7 +91,15 @@ In[] := With[{evolution = Table[Line[{{-10, k}, {10, k}}], {k, 0, 9, 2}]}]] ``` -<img src="/Documentation/Images/FoliatedExpressionsEventsGraph.png" width="478"> +<img src="/Documentation/Images/FoliatedExpressionsEventsGraph.png" + width="478" + alt="Out[] = ... the expressions-events graph as above with dotted lines plotted through each generation: + 0: {3, 8, 8, 8, 2, 10, 0, 9, 7}, + 1: {11, 16, 12, 9} and crossing the destroyer edge of 7 from generation 0, + 2: {18, 28} and crossing destroyer of 9 from generation 1, + 3: {27} and crossing destroyer of 28 from generation 2, + 4: {55} + ..."> ```wl In[] := WolframModel[<|"PatternRules" -> {a_, b_} :> a + b|>, @@ -86,7 +119,13 @@ In[] := WolframModel[{{1}, {1, 2}} -> {{2}}, {{1}, {1, 2}, {2, 3}, {2, 4}}, VertexLabels -> Placed[Automatic, After]] ``` -<img src="/Documentation/Images/MultiwayExpressionsEventsGraph.png" width="466"> +<img src="/Documentation/Images/MultiwayExpressionsEventsGraph.png" + width="466" + alt="Out[] = ... a graph showing the following events: + {{1}, {1, 2}} -> {{2}}, + {{2}, {2, 3}} -> {{3}}, + {{2}, {2, 4}} -> {{4}} + ...> `"CausalGraph"`, `"LayeredCausalGraph"` and `"ExpressionsEventsGraph"` properties all accept [`Graph`](https://reference.wolfram.com/language/ref/Graph.html) options, as was demonstrated above @@ -101,4 +140,6 @@ In[] := WolframModel[{{{x, y}, {x, z}} -> {{x, z}, {x, w}, {y, w}, {z, w}}}, {{0, 0}, {0, 0}}, 2]["ExpressionsEventsGraph", VertexLabels -> "Index"] ``` -<img src="/Documentation/Images/MultiwayExpressionsEventsGraphIndex.png" width="478"> +<img src="/Documentation/Images/MultiwayExpressionsEventsGraphIndex.png" + width="478" + alt="Out[] = ... an expressions-events graph with 3 events showing indices for both events and expressions ..."> diff --git a/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/Properties/EdgeAndEventGenerations.md b/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/Properties/EdgeAndEventGenerations.md index 679d58ac4..132dabf09 100644 --- a/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/Properties/EdgeAndEventGenerations.md +++ b/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/Properties/EdgeAndEventGenerations.md @@ -30,7 +30,11 @@ In[] := With[{ g_ :> ColorData["Rainbow"][g/5], {2}]}]] ``` -<img src="/Documentation/Images/GenerationColoredStatePlots.png" width="746"> +<img src="/Documentation/Images/GenerationColoredStatePlots.png" + width="746" + alt="Out[] = { + ... 6 hypergraph plots showing edges of multiple generations in the same state starting from the 3rd plot ... + }"> Event and expression generations correspond to layers in [`"LayeredCausalGraph"`](CausalGraphs.md) and [`"ExpressionsEventsGraph"`](CausalGraphs.md): @@ -48,4 +52,6 @@ In[] := WolframModel[{{1, 2}, {1, 3}, {1, 4}} -> {{1, 1}, {1, 1}, {1, 1}}, 5, "LayeredCausalGraph"] ``` -<img src="/Documentation/Images/HypergraphModelLayeredCausalGraph.png" width="218"> +<img src="/Documentation/Images/HypergraphModelLayeredCausalGraph.png" + width="218" + alt="Out[] = ... causal graph showing 5 generations, some edges cross multiple generations, e.g., 1 -> 3 ..."> diff --git a/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/Properties/ExpressionSeparations.md b/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/Properties/ExpressionSeparations.md index 0e4270379..2dbcc8751 100644 --- a/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/Properties/ExpressionSeparations.md +++ b/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/Properties/ExpressionSeparations.md @@ -24,7 +24,13 @@ In[] := Framed[WolframModel[<|"PatternRules" -> #|>, {{1, 2}}, Infinity, {{{1, 2}} -> {{2, 3}}, {{2, 3}} -> {{3, 4}}}} ``` -<img src="/Documentation/Images/SeparationComparison.png" width="512"> +<img src="/Documentation/Images/SeparationComparison.png" + width="512" + alt="Out[] = { + ... {{1, 2}} -> Rule 1 -> {{2, 3}, {3, 4}} ..., + ... {{1, 2}} -> Rule 1 -> {{2, 3}}, {{1, 2}} -> Rule 2 -> {{3, 4}} ..., + ... {{1, 2}} -> Rule 1 -> {{2, 3}}, {{2, 3}} -> Rule 2 -> {{3, 4}} ... + }"> One might be tempted to assume that spacelike separated expressions can always be 'assembled' to produce a possible history for a singleway system. For match-all evolution, however, this is not the case. Match-all rules can match two @@ -41,7 +47,13 @@ In[] := WolframModel[<| VertexLabels -> Placed[Automatic, After]] ``` -<img src="/Documentation/Images/MatchAllQuantumSpacelikeMatching.png" width="351"> +<img src="/Documentation/Images/MatchAllQuantumSpacelikeMatching.png" + width="351" + alt="Out[] = ... + {{1, 2}} -> Rule 1 -> {{2, 3}}, + {{1, 2}} -> Rule 2 -> {{3, 4}}, + {{2, 3}, {3, 4}} -> Rule 3 -> {{4, 5}, {5, 6}} + ..."> Further, branchlike separation takes precedence over spacelike separation, and timelike separation takes precedence over both. As such, expressions `{v, f, 1}` and `{v, f, 2}` here are branchlike separated because one of their common @@ -56,7 +68,14 @@ In[] := WolframModel[<|"PatternRules" -> {{{v, i}} -> {{v, 1}, {v, 2}}, VertexLabels -> Placed[Automatic, After]] ``` -<img src="/Documentation/Images/MatchAllSpacelikeBranchlikeMixed.png" width="352"> +<img src="/Documentation/Images/MatchAllSpacelikeBranchlikeMixed.png" + width="352" + alt="Out[] = ... + {{v, i}} -> Rule 1 -> {{v, 1}, {v, 2}}, + {{v, 1}} -> Rule 2 -> {{v, 1, 1}, {v, 1, 2}}, + {{v, 1, 1}, {v, 2}} -> Rule 3 -> {{v, f, 1}}, + {{v, 1, 2}, {v, 2}} -> Rule 4 -> {{v, f, 2}} + ..."> Specifically, the general algorithm for computing the separation between two expressions `A` and `B` in an expressions-events graph is: diff --git a/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/Properties/FeatureAssociation.md b/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/Properties/FeatureAssociation.md index 8202d1ca1..e61ce0333 100644 --- a/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/Properties/FeatureAssociation.md +++ b/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/Properties/FeatureAssociation.md @@ -29,7 +29,18 @@ that return a numeric value. Right now the list of properties is: In[] := WolframModel[{{x, y}, {x, z}} -> {{x, z}, {x, w}, {y, w}, {z, w}}, {{0, 0}, {0, 0}}, 5]["FeatureAssociation"] ``` -<img src="/Documentation/Images/FeatureAssociationExampleSingleHistory.png" width="621.0">" +<img src="/Documentation/Images/FeatureAssociationExampleSingleHistory.png" + width="621.0" + alt="Out[] = <| + StructurePreservingFinalStateGraph -> Graph[...], + ObjectPropertiesEventsCount -> 22, + ObjectPropertiesPartialGenerationsCount -> 0, + ObjectPropertiesAllEventsDistinctElementsCount -> 23, + ObjectPropertiesAllEventsEdgesCount -> 90, + ObjectPropertiesCompleteGenerationsCount -> 5, + ObjectPropertiesTerminationReason -> MaxGenerations, + ObjectPropertiesCausalGraph -> Graph[...] + |>"> This property is useful for applying machine learning to Wolfram Models explorations: @@ -41,7 +52,9 @@ In[] := BlockRandom[ ] ``` -<img src="/Documentation/Images/FeatureAssociationFeatureSpacePlot.png" width="684.6"> +<img src="/Documentation/Images/FeatureAssociationFeatureSpacePlot.png" + width="684.6" + alt="Out[] = ... plot showing a feature space with 10 points labeled with hypergraph plots ..."> For [Multiway Systems](/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/Properties/MultiwayQ.md) it only computes features associated with @@ -56,4 +69,15 @@ In[] := WolframModel[{{x, y}, {x, z}} -> {{x, z}, {x, w}, {y, w}, {z, w}}, {{1, "EventSelectionFunction" -> "MultiwaySpacelike"]["FeatureAssociation"] ``` -<img src="/Documentation/Images/FeatureAssociationExampleMultihistory.png" width="555.0"> +<img src="/Documentation/Images/FeatureAssociationExampleMultihistory.png" + width="555.0" + alt="Out[] = <| + StructurePreservingFinalStateGraph -> Missing[NotExistent, {MultiwaySystem, FinalState}], + ObjectPropertiesEventsCount -> 4054, + ObjectPropertiesPartialGenerationsCount -> 0, + ObjectPropertiesAllEventsDistinctElementsCount -> 4056, + ObjectPropertiesAllEventsEdgesCount -> 16219, + ObjectPropertiesCompleteGenerationsCount -> 3, + ObjectPropertiesTerminationReason -> MaxGenerations, + ObjectPropertiesCausalGraph -> Graph[...] + |>"> diff --git a/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/Properties/FeatureVector.md b/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/Properties/FeatureVector.md index 7a7bc0430..acc739b0a 100644 --- a/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/Properties/FeatureVector.md +++ b/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/Properties/FeatureVector.md @@ -11,7 +11,9 @@ by [`"FeatureAssociation"`](/Documentation/SymbolsAndFunctions/WolframModelAndWo In[] := WolframModel[{{x, y}, {x, z}} -> {{x, z}, {x, w}, {y, w}, {z, w}}, {{0, 0}, {0, 0}}, 5]["FeatureVector"] ``` -<img src="/Documentation/Images/FeatureVectorExampleSingleHistory.png" width="513.0"> +<img src="/Documentation/Images/FeatureVectorExampleSingleHistory.png" + width="513.0" + alt="Out[] = {... final state graph ..., 22, 0, 23, 90, 5, MaxGenerations, ... causal graph ...}"> For the list of features see [`FeatureAssociation`](/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/Properties/FeatureAssociation.md). @@ -28,4 +30,6 @@ In[] := BlockRandom[ ] ``` -<img src="/Documentation/Images/FeatureVectorFeatureSpacePlot.png" width="815.4"> +<img src="/Documentation/Images/FeatureVectorFeatureSpacePlot.png" + width="815.4" + alt="Out[] = ... plot showing a feature space with 10 points labeled with hypergraph plots ..."> diff --git a/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/Properties/GenerationCounts.md b/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/Properties/GenerationCounts.md index bf032fbd5..aab5d01f0 100644 --- a/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/Properties/GenerationCounts.md +++ b/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/Properties/GenerationCounts.md @@ -21,7 +21,9 @@ In[] := WolframModel[{{1, 2}} -> {{1, 3}, {1, 3}, {3, 2}}, {{1, 1}}, <|"MaxEvents" -> 42|>, "EventOrderingFunction" -> "Random"] ``` -<img src="/Documentation/Images/RandomEvolutionObject.png" width="507"> +<img src="/Documentation/Images/RandomEvolutionObject.png" + width="507" + alt="Out[] = WolframModelEvolutionObject[... Generations: 1...8, Events: 42 ...]"> Note, in this case, only one generation is complete, and seven are partial. That happens because the states grow with each generation, so it becomes more likely for a random choice to pick an edge from a later generation. Thus earlier diff --git a/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/Properties/MultiwayQ.md b/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/Properties/MultiwayQ.md index f0857202a..a6019e466 100644 --- a/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/Properties/MultiwayQ.md +++ b/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/Properties/MultiwayQ.md @@ -13,7 +13,12 @@ In[] := EchoFunction[#["ExpressionsEventsGraph"] &][ "EventSelectionFunction" -> "MultiwaySpacelike"]]["MultiwayQ"] ``` -<img src="/Documentation/Images/MultiwayExpressionsEventsGraphEchoed.png" width="451"> +<img src="/Documentation/Images/MultiwayExpressionsEventsGraphEchoed.png" + width="451" + alt=">> ... + {{1, 2} (* init *), {2, 3} (* init *)} -> {{1, 2} (* from event 1 *), {2, 3} (* from event 1 *), {3, 5}}, + {{2, 3} (* init *), {3, 4} (* init *)} -> {{2, 3} (* from event 2 *), {3, 4} (* from event 2 *), {4, 6}} + ..."> ```wl Out[] = True @@ -28,7 +33,9 @@ In[] := EchoFunction[#["ExpressionsEventsGraph"] &][WolframModel[ {{1, 2}} -> {{1, 3}, {3, 2}}, {{1, 1}}, 2, "EventSelectionFunction" -> "MultiwaySpacelike"]]["MultiwayQ"] ``` -<img src="/Documentation/Images/SinglewayExpressionsEventsGraphEchoed.png" width="415"> +<img src="/Documentation/Images/SinglewayExpressionsEventsGraphEchoed.png" + width="415" + alt=">> ... {{1, 1}} -> {{1, 2}, {2, 1}}, {{1, 2}} -> {{1, 3}, {3, 2}}, {{2, 1}} -> {{2, 4}, {4, 1}} ..."> ```wl Out[] = False diff --git a/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/Properties/PlotsOfEvents.md b/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/Properties/PlotsOfEvents.md index 57062f204..6011e67af 100644 --- a/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/Properties/PlotsOfEvents.md +++ b/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/Properties/PlotsOfEvents.md @@ -13,6 +13,11 @@ In[] := WolframModel[{{1, 2, 3}, {4, 5, 6}, {1, 4}} -> 3, "EventsStatesPlotsList"] ``` -<img src="/Documentation/Images/EventsStatesPlotsList.png" width="746"> +<img src="/Documentation/Images/EventsStatesPlotsList.png" + width="746" + alt = "Out[] = { + ... 9 consecutive state plots with single events in between, with edges about to be deleted highlighted as dotted + gray, and edges just created highlighted in red ... + }"> Here the dotted gray edges are the ones about to be deleted, whereas the red ones have just been created. diff --git a/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/Properties/PlotsOfStates.md b/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/Properties/PlotsOfStates.md index 9f6529a1d..3fdbf8c96 100644 --- a/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/Properties/PlotsOfStates.md +++ b/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/Properties/PlotsOfStates.md @@ -12,7 +12,9 @@ In[] := WolframModel[{{1, 2, 3}, {4, 5, 6}, {1, 4}} -> {{1, 1, 1}, {1, 1, 1}, {1, 1}, {1, 1}, {1, 1}}, 6, "FinalStatePlot"] ``` -<img src="/Documentation/Images/FinalStatePlot.png" width="478"> +<img src="/Documentation/Images/FinalStatePlot.png" + width="478" + alt="Out[] = ... plot of a hypergraph with 320 hyperedges ..."> ```wl In[] := WolframModel[{{1, 2, 3}, {4, 5, 6}, {1, 4}} -> @@ -21,7 +23,9 @@ In[] := WolframModel[{{1, 2, 3}, {4, 5, 6}, {1, 4}} -> {{1, 1, 1}, {1, 1, 1}, {1, 1}, {1, 1}, {1, 1}}, 6, "StatesPlotsList"] ``` -<img src="/Documentation/Images/StatesListPlot.png" width="746"> +<img src="/Documentation/Images/StatesListPlot.png" + width="746" + alt="Out[] = {... 7 plots of state hypergraphs for each generation ...}"> These properties take the same options as [`HypergraphPlot`](../../HypergraphPlot.md) (but one has to specify them in a call to the evolution object, not `WolframModel`): @@ -34,4 +38,6 @@ In[] := WolframModel[{{1, 2, 3}, {4, 5, 6}, {1, 4}} -> VertexLabels -> Automatic] ``` -<img src="/Documentation/Images/FinalStatePlotWithVertexLabels.png" width="478"> +<img src="/Documentation/Images/FinalStatePlotWithVertexLabels.png" + width="478" + alt="Out[] = ... plot of a hypergraph with vertices labeled 10 to 57 ..."> diff --git a/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/Properties/RuleIndicesForEvents.md b/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/Properties/RuleIndicesForEvents.md index c7af4647e..0dfedae3d 100644 --- a/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/Properties/RuleIndicesForEvents.md +++ b/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/Properties/RuleIndicesForEvents.md @@ -29,4 +29,6 @@ In[] := With[{ 2 -> White}, {1}]], VertexSize -> Medium]]] ``` -<img src="/Documentation/Images/ColoredCausalGraph.png" width="478"> +<img src="/Documentation/Images/ColoredCausalGraph.png" + width="478" + alt="Out[] = ... causal graph with event vertices shown in 2 colors corresponding to their rule ..."> diff --git a/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/Properties/States.md b/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/Properties/States.md index dce3467e9..3a2e76e31 100644 --- a/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/Properties/States.md +++ b/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/Properties/States.md @@ -14,7 +14,9 @@ In[] := HypergraphPlot @ WolframModel[{{1, 2, 3}, {4, 5, 6}, {1, 4}} -> {{1, 1, 1}, {1, 1, 1}, {1, 1}, {1, 1}, {1, 1}}, 6, "FinalState"] ``` -<img src="/Documentation/Images/FinalStatePlot.png" width="478"> +<img src="/Documentation/Images/FinalStatePlot.png" + width="478" + alt="Out[] = ... plot of a hypergraph with 320 hyperedges ..."> **`"StatesList"`** yields the list of states at each generation: @@ -25,7 +27,9 @@ In[] := HypergraphPlot /@ WolframModel[{{1, 2, 3}, {4, 5, 6}, {1, 4}} -> {{1, 1, 1}, {1, 1, 1}, {1, 1}, {1, 1}, {1, 1}}, 6, "StatesList"] ``` -<img src="/Documentation/Images/StatesListPlot.png" width="746"> +<img src="/Documentation/Images/StatesListPlot.png" + width="746" + alt="Out[] = {... 7 plots of state hypergraphs for each generation ...}"> This is identical to using the **`"Generation"`** property mapped over all generations: @@ -37,7 +41,9 @@ In[] := HypergraphPlot /@ (WolframModel[{{1, 2, 3}, {4, 5, 6}, {1, 4}} -> "Generation", #] &) /@ Range[0, 6] ``` -<img src="/Documentation/Images/StatesListPlot.png" width="746"> +<img src="/Documentation/Images/StatesListPlot.png" + width="746" + alt="Out[] = {... 7 plots of the same state hypergraphs as above ...}"> In fact, the `"Generation"` property can be omitted and the index of the generation can be used directly: @@ -48,7 +54,9 @@ In[] := HypergraphPlot /@ WolframModel[{{1, 2, 3}, {4, 5, 6}, {1, 4}} -> {{1, 1, 1}, {1, 1, 1}, {1, 1}, {1, 1}, {1, 1}}, 6] /@ Range[0, 6] ``` -<img src="/Documentation/Images/StatesListPlot.png" width="746"> +<img src="/Documentation/Images/StatesListPlot.png" + width="746" + alt="Out[] = {... 7 plots of the same state hypergraphs as above ...}"> `"StatesList"` shows a compressed version of the evolution. To see how the state changes with each applied replacement, use **`"AllEventsStatesList"`**: @@ -61,7 +69,9 @@ In[] := HypergraphPlot /@ WolframModel[{{1, 2, 3}, {4, 5, 6}, {1, 4}} -> "AllEventsStatesList"] ``` -<img src="/Documentation/Images/AllEventsStatesListPlot.png" width="746"> +<img src="/Documentation/Images/AllEventsStatesListPlot.png" + width="746" + alt="Out[] = {... 8 plots of state hypergraphs with only single events in between consecutive states ...}"> Finally, to see a state after a specific event, use **`"StateAfterEvent"`** (aka `"SetAfterEvent"`): @@ -73,7 +83,11 @@ In[] := HypergraphPlot @ WolframModel[{{1, 2, 3}, {4, 5, 6}, {1, 4}} -> "StateAfterEvent", 42] ``` -<img src="/Documentation/Images/StateAfterEventPlot.png" width="478"> +<img src="/Documentation/Images/StateAfterEventPlot.png" + width="478" + alt="Out[] = ... + plot of a hypergraph with 215 hyperedges, less symmetric than complete generation plots above + ..."> `"StateAfterEvent"` is equivalent to taking a corresponding part in `"AllEventsStatesList"`, but it is much faster to compute than the entire list. diff --git a/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/Properties/StatesAsEdgeIndices.md b/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/Properties/StatesAsEdgeIndices.md index ec67fae23..26b177dbf 100644 --- a/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/Properties/StatesAsEdgeIndices.md +++ b/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/Properties/StatesAsEdgeIndices.md @@ -28,7 +28,9 @@ In[] := HypergraphPlot /@ With[{ evolution["AllEventsStatesEdgeIndicesList"]] ``` -<img src="/Documentation/Images/AllEventsStatesListPlot.png" width="746"> +<img src="/Documentation/Images/AllEventsStatesListPlot.png" + width="746" + alt="Out[] = {... 8 plots of state hypergraphs with single events in between consecutive states ...}"> However, this representation is useful if one needs to distinguish between identical edges. diff --git a/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/Properties/TerminationReason.md b/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/Properties/TerminationReason.md index 8c56c250e..af94f0610 100644 --- a/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/Properties/TerminationReason.md +++ b/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/Properties/TerminationReason.md @@ -7,11 +7,11 @@ multiple [stopping conditions](../WolframModelAndWolframModelEvolutionObject.md# All possible values are: -* `"MaxEvents"`, `"MaxGenerations"`, `"MaxVertices"`, `"MaxVertexDegree"` and `"MaxEdges"` correspond directly +- `"MaxEvents"`, `"MaxGenerations"`, `"MaxVertices"`, `"MaxVertexDegree"` and `"MaxEdges"` correspond directly to [step limiters](../WolframModelAndWolframModelEvolutionObject.md#step-limiters). -* `"FixedPoint"` means there were no more matches possible to rule inputs. -* `"TimeConstraint"` could occur if a [`"TimeConstraint"`](../Options/TimeConstraint.md) option is used. -* `"Aborted"` would occur if the evaluation was manually interrupted (i.e., by pressing ⌘. on a Mac). In that case, a +- `"FixedPoint"` means there were no more matches possible to rule inputs. +- `"TimeConstraint"` could occur if a [`"TimeConstraint"`](../Options/TimeConstraint.md) option is used. +- `"Aborted"` would occur if the evaluation was manually interrupted (i.e., by pressing ⌘. on a Mac). In that case, a partially computed evolution object is returned. As an example, in our arithmetic model a `"FixedPoint"` is reached (which is why we can @@ -33,4 +33,12 @@ In[] := WolframModel[{{1, 2, 3}, {4, 5, 6}, {1, 4}} -> ⌘. ``` -<img src="/Documentation/Images/AbortedEvolutionObject.png" width="760"> +<img src="/Documentation/Images/AbortedEvolutionObject.png" + width="760" + alt="Out[] = WolframModelEvolutionObject[... + Generations: 64...65, + Events: 17629, + Termination reason: Aborted, + Rules: ..., + Initial set: ... + ...]"> diff --git a/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/WolframModelAndWolframModelEvolutionObject.md b/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/WolframModelAndWolframModelEvolutionObject.md index 8a497a2c7..dd8993e91 100644 --- a/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/WolframModelAndWolframModelEvolutionObject.md +++ b/Documentation/SymbolsAndFunctions/WolframModelAndWolframModelEvolutionObject/WolframModelAndWolframModelEvolutionObject.md @@ -23,7 +23,9 @@ In[] := WolframModel[{{1, 2, 3}, {2, 4, 5}} -> {{1, 2, 3}, {2, 4, 5}, {4, 6, 7}}, 10] ``` -<img src="/Documentation/Images/EvolutionObject10Steps.png" width="493"> +<img src="/Documentation/Images/EvolutionObject10Steps.png" + width="493" + alt="Out[] = WolframModelEvolutionObject[... Generations: 10, Events: 109 ...]"> Note that this call is different from the [`SetReplace`](../SetReplace.md) function in a variety of ways: @@ -45,12 +47,16 @@ In[] := WolframModel[{{1, 2, 3}, {2, 4, 5}} -> {{1, 2, 3}, {2, 4, 5}, {4, 6, 7}}, 3] ``` -<img src="/Documentation/Images/EvolutionObject3Steps.png" width="487"> +<img src="/Documentation/Images/EvolutionObject3Steps.png" + width="487" + alt="Out[] = WolframModelEvolutionObject[... Generations: 3, Events: 5 ...]"> One can easily see its internal structure in its [`InputForm`](https://reference.wolfram.com/language/ref/InputForm.html): -<img src="/Documentation/Images/InputFormOfEvolutionObject.png" width="594"> +<img src="/Documentation/Images/InputFormOfEvolutionObject.png" + width="594" + alt="In[] := WolframModelEvolutionObject[... Generations: 3, Events: 5 ...] // InputForm"> ```wl Out[] = WolframModelEvolutionObject[<| @@ -83,7 +89,9 @@ four more triples of edges corresponding to the outputs of remaining events. belongs. For example, `{5, 8, 1}` only appears in the result after a single step and `{7, 9, 8}` after two steps. Here we use [`"StatesList"`](Properties/States.md) property to demonstrate that: -<img src="/Documentation/Images/StatesListOfEvolutionObject.png" width="613"> +<img src="/Documentation/Images/StatesListOfEvolutionObject.png" + width="613" + alt='In[] := WolframModelEvolutionObject[... Generations: 3, Events: 5 ...]["StatesList"]'> ```wl Out[] = {{{1, 2, 3}, {2, 4, 5}, {4, 6, 7}}, @@ -122,7 +130,9 @@ Other properties of the evolution object describe the relationships between edge A specific property can be requested from an evolution object by supplying it as an argument to the object itself: -<img src="/Documentation/Images/EventsCountOfEvolutionObject.png" width="629"> +<img src="/Documentation/Images/EventsCountOfEvolutionObject.png" + width="629" + alt='In[] := WolframModelEvolutionObject[... Generations: 10, Events: 109 ...]["EventsCount"]'> ```wl Out[] = 109 @@ -131,7 +141,9 @@ Out[] = 109 [Properties](#properties) section describes and gives examples for each available property. The full list of them can also be obtained with the `"Properties"` property: -<img src="/Documentation/Images/PropertiesOfEvolutionObject.png" width="619"> +<img src="/Documentation/Images/PropertiesOfEvolutionObject.png" + width="619" + alt='In[] := WolframModelEvolutionObject[... Generations: 10, Events: 109 ...]["Properties"]'> ```wl Out[] = {"EvolutionObject", "FinalState", "FinalStatePlot", "StatesList", @@ -155,7 +167,9 @@ Out[] = {"EvolutionObject", "FinalState", "FinalStatePlot", "StatesList", Some properties take additional arguments, which can be supplied after the property name: -<img src="/Documentation/Images/StateAfterEventOfEvolutionObject.png" width="691"> +<img src="/Documentation/Images/StateAfterEventOfEvolutionObject.png" + width="691" + alt='In[] := WolframModelEvolutionObject[... Generations: 10, Events: 109 ...]["StateAfterEvent", 7]'> ```wl Out[] = {{8, 1, 3}, {5, 12, 1}, {12, 8, 10}, {8, 5, 4}, {2, 13, 11}, {13, 7, @@ -164,7 +178,9 @@ Out[] = {{8, 1, 3}, {5, 12, 1}, {12, 8, 10}, {8, 5, 4}, {2, 13, 11}, {13, 7, A particular generation can be extracted simply by its number (including, i.e., -1 for the final state): -<img src="/Documentation/Images/GenerationOfEvolutionObject.png" width="516"> +<img src="/Documentation/Images/GenerationOfEvolutionObject.png" + width="516" + alt='In[] := WolframModelEvolutionObject[... Generations: 10, Events: 109 ...][3]'> ```wl Out[] = {{6, 7, 2}, {8, 1, 3}, {4, 11, 7}, {11, 6, 9}, {6, 4, 8}, {5, 12, @@ -229,11 +245,15 @@ In[] := WolframModel[{{{1, 1, 2}} -> {{2, 2, 1}, {2, 3, 2}, {1, 2, 3}}, {{1, 2, 1}, {3, 4, 2}} -> {{4, 3, 2}}}, {{1, 1, 1}}, 4] ``` -<img src="/Documentation/Images/EvolutionObjectFromMultipleRules.png" width="488"> +<img src="/Documentation/Images/EvolutionObjectFromMultipleRules.png" + width="488" + alt="Out[] = WolframModelEvolutionObject[... Generations: 4, Events: 13 ...]"> To see which rules were used for each replacement: -<img src="/Documentation/Images/AllEventsRuleIndicesOfEvolutionObject.png" width="708"> +<img src="/Documentation/Images/AllEventsRuleIndicesOfEvolutionObject.png" + width="708" + alt='In[] := WolframModelEvolutionObject[... Generations: 4, Events: 13 ...]["AllEventsRuleIndices"]'> ```wl Out[] = {1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 2} @@ -294,7 +314,9 @@ In[] := WolframModel[{{1, 2, 3}, {4, 5, 6}, {2, 5}, {5, 2}} -> 3}}, 6, "FinalStatePlot"] ``` -<img src="/Documentation/Images/MaxGenerationsFinalStatePlot.png" width="478"> +<img src="/Documentation/Images/MaxGenerationsFinalStatePlot.png" + width="478" + alt="Out[] = ... plot of a hypergraph with 512 hyperedges ..."> Alternatively, an [`Association`](https://reference.wolfram.com/language/ref/Association.html) can be used to specify a more elaborate limiting condition: @@ -308,7 +330,9 @@ In[] := WolframModel[{{1, 2, 3}, {4, 5, 6}, {2, 5}, {5, 2}} -> <|"MaxVertices" -> 300, "MaxEvents" -> 200|>, "FinalStatePlot"] ``` -<img src="/Documentation/Images/MaxVerticesFinalStatePlot.png" width="478"> +<img src="/Documentation/Images/MaxVerticesFinalStatePlot.png" + width="478" + alt="Out[] = ... plot of a less symmetric hypergraph with 400 hyperedges ..."> Note that the final state here is "less symmetric" because its last generation is incomplete (more on that [later](../UtilityFunctions/HypergraphAutomorphismGroup.md)). Such incomplete generations can be automatically @@ -327,7 +351,15 @@ In[] := WolframModel[{{1, 2, 3}, {4, 5, 6}, {2, 5}, {5, 2}} -> <|"MaxVertices" -> 300, "MaxEvents" -> 200|>] ``` -<img src="/Documentation/Images/MaxVerticesEvolutionObject.png" width="753"> +<img src="/Documentation/Images/MaxVerticesEvolutionObject.png" + width="753" + alt="Out[] = WolframModelEvolutionObject[... + Generations: 5...6, + Events: 49, + Termination reason: MaxVertices, + Rules: ..., + Initial set: ... + ...]"> All possible keys in that association are: @@ -365,7 +397,9 @@ In[] := WolframModel[{{1, 2, 3}, {2, 4, 5}} -> {{5, 6, 1}, {6, 4, 2}, {4, 5, {{1, 2, 3}, {2, 4, 5}, {4, 6, 7}}, Automatic] ``` -<img src="/Documentation/Images/AutomaticStepsGrowing.png" width="491"> +<img src="/Documentation/Images/AutomaticStepsGrowing.png" + width="491" + alt="Out[] = WolframModelEvolutionObject[... Generations: 11, Events: 163 ...]"> But evolves the rule much longer if it does not grow: @@ -374,7 +408,9 @@ In[] := WolframModel[<|"PatternRules" -> {{a_, b_}} :> {{a + b, a - b}}|>, {{1, 1}}, Automatic] ``` -<img src="/Documentation/Images/AutomaticStepsNotGrowing.png" width="565"> +<img src="/Documentation/Images/AutomaticStepsNotGrowing.png" + width="565" + alt="Out[] = WolframModelEvolutionObject[... Generations: 5000, Events: 5000 ...]"> Currently, it's equivalent to `<|"MaxEvents" -> 5000, "MaxVertices" -> 200|>`, setting `TimeConstraint -> 5` (it still returns values for all properties even if terminated due to time constraint), and `"IncludePartialGenerations" -> False`