Limited-path-models tuple partition practicable shuffle content alignment valency-density fud inducer
Haskell commentary on the implementation of Tractable and Practicable Inducers/Haskell Implementation/Limited-path-models inducer
See section ‘Optimisation’ P674. The limited-path-models tuple partition list maximiser, $Z_{P,A,A_R,\mathrm{csd},\mathrm{p} }$, is constructed
\[
\begin{eqnarray}
&&Z_{P,A,A_R,\mathrm{csd},\mathrm{p} } = \\
&&\hspace{2em}\mathrm{maximiseLister}(X_{P,A,A_R,\mathrm{csd},\mathrm{p} }, P_{P,A,A_R,\mathrm{csd},\mathrm{p} }, \mathrm{top}(\mathrm{omax}), R_{P,A,A_R,\mathrm{csd},\mathrm{p} })
\end{eqnarray}
\]
The optimise function $X_{P,A,A_R,\mathrm{csd},\mathrm{p} } \in \mathcal{F}_{\infty,U_A,V_A} \cap \mathcal{F}_{\mathrm{q} } :\to \mathbf{Q}$, is the rational approximation to the shuffle content alignment valency-density valued total function of the limited-models infinite-layer substrate fuds, defined
\[
X_{P,A,A_R,\mathrm{csd},\mathrm{p} } = \{(F,I_{\mathrm{csd} }^{ * }((A,A_R,F))) : F \in \mathcal{F}_{\infty,U_A,V_A} \cap \mathcal{F}_{\mathrm{q} }\}
\]
where the shuffle content alignment valency-density computer $I_{\mathrm{csd}} \in \mathrm{computers}$ is defined as (Text)
\[
\begin{eqnarray}
I_{\mathrm{csd} }^{ * }((A,A_R,F)) = (I_{\mathrm{a} }^{ * }(A * F^{\mathrm{T} })-I_{\mathrm{a} }^{ * }(A_R * F^{\mathrm{T} }))/I_{\mathrm{cvl} }^{ * }(F)
\end{eqnarray}
\]
The $I_{\mathrm{csd} }^{ * }$ function is defined in module AlignmentPracticable
,
systemsHistogramsHistogramsFudsAlignmentCsd_u :: System -> Histogram -> Histogram -> Fud -> Double
as
systemsHistogramsHistogramsFudsAlignmentCsd_u uu aa aarr ff =
(algn (aa `fmul` ff) - algn (aarr `fmul` ff)) / (w ** (1/m))
...
Note that the _u
suffix indicates that there are no bounds checking guards on the arguments.
The neighbourhood function $P_{P,A,A_R,\mathrm{csd},\mathrm{p} } \in \mathrm{P}(X_{P,A,A_R,\mathrm{csd},\mathrm{p} }) \to \mathrm{P}(X_{P,A,A_R,\mathrm{csd},\mathrm{p} })$, derived from the limited-layer limited-derived-volume limited-underlying-volume limited-breadth partition infinite-layer fud tree, $\mathrm{tfiubhd}(U)(V)$, is defined (Text)
\[
\begin{eqnarray}
&&P_{P,A,A_R,\mathrm{csd},\mathrm{p} }(Q) =\\
&&\hspace{2em}\{(F \cup G,I_{\mathrm{csd} }^{ * }((A,A_R,F \cup G))) : \\
&&\hspace{3em}(F,\cdot) \in Q,~\mathrm{layer}(F,\mathrm{der}(F)) < \mathrm{lmax},\\
&&\hspace{3em}G \subseteq \{P^{\mathrm{T} } : K \in \mathrm{tuples}(V_A,F),~|K^{\mathrm{C} }| \leq \mathrm{xmax},~P \in \mathrm{B}(K^{\mathrm{CS} }),~|P| \geq 2\},\\
&&\hspace{3em}1 \leq |G| \leq \mathrm{bmax},\\
&&\hspace{3em}W = \mathrm{der}(F \cup G), ~|W^{\mathrm{C} }| \leq \mathrm{wmax}\}
\end{eqnarray}
\]
The neighbourhood function is defined in module AlignmentPracticable
,
parametersSystemsSamplesShufflesFunctionsFunctionNeighbourhoodPartitionLimitedPathModels ::
Integer -> Integer -> Integer -> Integer ->
System -> Histogram -> Histogram -> Map.Map Fud Double -> Maybe (Map.Map Fud Double)
as
parametersSystemsSamplesShufflesFunctionsFunctionNeighbourhoodPartitionLimitedPathModels
xmax bmax wmax lmax uu aa aarr qq
| ... = Just $ llmm
[(hh, (algn (aa `fmul` hh) - algn (aarr `fmul` hh)) / (w' ** (1/m))) |
ff <- keys qq, layer ff < lmax, let uu2 = (uu `uunion` fsys ff),
gg <- llfudsll bmax [qqtt pp | kk <- tuplesll (vars aa) ff, vol uu2 kk <= xmax,
pp <- partsll (cart uu2 kk), dim pp >= 2],
gg /= fudEmpty, let hh = ff `funion` gg,
let ww = fder hh, let w = vol (uu `uunion` fsys hh) ww, w <= wmax,
let w' = fromIntegral w, let m = fromIntegral (Set.size ww)]
| otherwise = Nothing
where
algn = histogramsAlignment
tuplesll vv ff = Set.toList $ setVariablesFudsSetTuple vv ff
llfudsll bmax ll = Set.toList $ Set.map qqff $ setsPowersetLimited (Set.fromList ll) bmax
...
partsll = Set.toList . setsPartitionSet
...
Note that the neighbourhood function could also be implemented with the $I_{\mathrm{csd} }^{ * }$ function mentioned above.
For the first layer, $F = \emptyset$, the set of next layer fuds corresponds to the non-empty pluri-valent partition-sets of the intersection of (i) the lower-limited-valency substrate partition-sets set $\mathcal{N}_{U,V,\mathrm{umin} }$, where $\mathrm{umin}=2$, (ii) the limited-underlying-volume substrate partition-sets set, $\mathcal{N}_{U,V,\mathrm{xmax} }$, (iii) the limited-breadth substrate partition-sets set, $\mathcal{N}_{U,V,\mathrm{bmax} }$, (iv) and the limited-derived-volume substrate partition-sets set, $\mathcal{N}_{U,V,\mathrm{wmax} }$,
\[
\begin{eqnarray}
&&|P_{P,A,A_R,\mathrm{csd},\mathrm{p} }(\{(\emptyset,\cdot)\})| = \\
&&\hspace{5em}|\mathcal{N}_{U,V,\overline{2} } \cap \mathcal{N}_{U_A,V_A,\mathrm{xmax} } \cap \mathcal{N}_{U_A,V_A,\mathrm{bmax} } \cap \mathcal{N}_{U_A,V_A,\mathrm{wmax} }| - 1
\end{eqnarray}
\]
In the case of pluri-valent regular variables $V$, having valency $d>1$ and dimension $n$, if the implied underlying-dimension limit, $\mathrm{kmax} = \ln \mathrm{xmax}~/ \ln d$, is integral, $\ln \mathrm{xmax}~/ \ln d \in \mathbf{N}$, then the cardinality of the intersection is
\[
\begin{eqnarray}
&&|\mathcal{N}_{U,V,\overline{2} } \cap \mathcal{N}_{U,V,\mathrm{xmax} } \cap \mathcal{N}_{U,V,\mathrm{bmax} }| = \\
&&\hspace{5em}\bigg(\sum_{b \in {0 \ldots \mathrm{bmax}} } \binom{c}{b}\bigg)~:~c = \sum_{k \in {0 \ldots \mathrm{kmax}} } \binom{n}{k} (\mathrm{bell}(d^k)-1)
\end{eqnarray}
\]
The intersection is defined in module AlignmentSubstrate
,
valenciesDimensionsLimitsSetSetPartitionSubstrateLimitedUnderlyingDimensionBreadthPluriValentCardinalityRegular ::
Integer -> Integer -> Integer -> Integer -> Maybe Integer
as
valenciesDimensionsLimitsSetSetPartitionSubstrateLimitedUnderlyingDimensionBreadthPluriValentCardinalityRegular d n kmax bmax
| n >= 0 && d > 0 && bmax >= 0 = Just $
let c = sum [binom n k * (bell (d^k) - 1) | k <- [0..(min n kmax)]] in sum [binom c b | b <- [0..(min c bmax)]]
| otherwise = Nothing
...
For example,
let nnvvkbmaxpvcdr d n kmax bmax = fromJust $ valenciesDimensionsLimitsSetSetPartitionSubstrateLimitedUnderlyingDimensionBreadthPluriValentCardinalityRegular d n kmax bmax
[(d,n,d^kmax,bmax,nnvvkbmaxpvcdr d n kmax bmax) | d <- [2..5], n <- [2..5], kmax <- [1..3], bmax <- [2..4], nnvvkbmaxpvcdr d n kmax bmax <= 200]
[(2,2,2,2,4),(2,2,2,3,4),(2,2,2,4,4),(2,2,4,2,137),(2,2,8,2,137),(2,3,2,2,7),(2,3,2,3,8),(2,3,2,4,8),(2,4,2,2,11),(2,4,2,3,15),(2,4,2,4,16),(2,5,2,2,16),(2,5,2,3,26),(2,5,2,4,31),(3,2,3,2,37),(3,2,3,3,93),(3,2,3,4,163),(3,3,3,2,79),(3,4,3,2,137)]
let ppcsdwp xmax bmax wmax aa = fromJust $ parametersSystemsSamplesShufflesFunctionsFunctionNeighbourhoodPartitionLimitedPathModels xmax bmax wmax 1 (sys aa) aa (ind aa) (Map.singleton fudEmpty 0)
let ppcsdwpinvll xmax bmax wmax aa = Map.toList $ functionsInverse $ ppcsdwp xmax bmax wmax aa
let ppcsdwpmax xmax bmax wmax aa = Set.findMax $ relationsMaximum $ functionsRelation $ ppcsdwp xmax bmax wmax aa
let aa = resize 100 (regpivot 3 2)
Map.size (ppcsdwp (3^1) 2 (3^1) aa)
8
rpln $ sort $ [(a, Set.size xx) | (a,xx) <- ppcsdwpinvll (3^1) 2 (3^1) aa]
"(0.0,8)"
Map.size (ppcsdwp (3^1) 2 4 aa)
23
rpln $ sort $ [(a, Set.size xx) | (a,xx) <- ppcsdwpinvll (3^1) 2 4 aa]
"(0.0,14)"
"(0.6832378262846674,4)"
"(5.076597698514661,2)"
"(5.076597698514675,2)"
"(23.159383609286493,1)"
(algn aa)/3
14.464725491153994
rp $ ppcsdwpmax (3^1) 2 4 aa
"({({({(1,1),({ { {(1,1)} },{ {(1,2)},{(1,3)} } },{ {(1,1)} })},1 % 1),({(1,2),({ { {(1,1)} },{ {(1,2)},{(1,3)} } },{ {(1,2)},{(1,3)} })},1 % 1),({(1,3),({ { {(1,1)} },{ {(1,2)},{(1,3)} } },{ {(1,2)},{(1,3)} })},1 % 1)},{ { { {(1,1)} },{ {(1,2)},{(1,3)} } } }),({({(2,1),({ { {(2,1)} },{ {(2,2)},{(2,3)} } },{ {(2,1)} })},1 % 1),({(2,2),({ { {(2,1)} },{ {(2,2)},{(2,3)} } },{ {(2,2)},{(2,3)} })},1 % 1),({(2,3),({ { {(2,1)} },{ {(2,2)},{(2,3)} } },{ {(2,2)},{(2,3)} })},1 % 1)},{ { { {(2,1)} },{ {(2,2)},{(2,3)} } } })},23.159383609286493)"
let (ff,_) = ppcsdwpmax (3^1) 2 4 aa
algn $ aa
43.39417647346198
algn $ aa `fmul` ff
117.62895517637247
Map.size (ppcsdwp (3^1) 2 (3^2) aa)
36
rpln $ sort $ [(a, Set.size xx) | (a,xx) <- ppcsdwpinvll (3^1) 2 (3^2) aa]
"(0.0,20)"
"(0.6832378262846674,4)"
"(4.153144930067293,4)"
"(5.076597698514661,2)"
"(5.076597698514675,2)"
"(14.464725491153994,1)"
"(18.290281632910705,1)"
"(18.290281632910716,1)"
"(23.159383609286493,1)"
Map.size (ppcsdwp (3^1) 3 (3^3) aa)
92
nnvvkbmaxpvcdr 3 2 1 3
93
rpln $ sort $ [(a, Set.size xx) | (a,xx) <- ppcsdwpinvll (3^1) 3 (3^3) aa]
"(0.0,28)"
"(0.6832378262846674,4)"
"(4.153144930067293,4)"
"(4.443504556997696,12)"
...
"(22.400928626215162,3)"
"(22.400928626215176,3)"
"(23.159383609286493,1)"
let aa = resize 100 (regpivot 3 3)
Map.size (ppcsdwp (3^1) 2 (3^3) aa)
78
nnvvkbmaxpvcdr 3 3 1 2
79
rpln $ sort $ [(a, Set.size xx) | (a,xx) <- ppcsdwpinvll (3^1) 2 (3^3) aa]
"(0.0,30)"
"(0.2460860038704027,12)"
"(2.306159747968083,12)"
"(2.8214219702236107,12)"
"(9.739865187690867,3)"
"(12.451311893917975,6)"
"(15.918481590327701,3)"
Map.size (ppcsdwp (3^1) 3 (3^3) aa)
298
nnvvkbmaxpvcdr 3 3 1 3
299
rpln $ sort $ [(a, Set.size xx) | (a,xx) <- ppcsdwpinvll (3^1) 3 (3^3) aa]
"(0.0,42)"
"(0.2460860038704027,12)"
"(0.86007688761201,8)"
"(2.306159747968083,12)"
"(2.467390741669783,36)"
...
"(21.303162058872793,3)"
"(25.97257020581094,3)"
"(31.253377751394225,1)"
bell (3^1)
5
bell (3^2)
21147
nnvvkbmaxpvcdr 3 3 2 2
2012982976
nnvvkbmaxpvcdr 3 3 2 3
42573918990376