Skip to content

Vol. I, Ch. 13seed 26113

DCT Laboratory — Volume I, Chapter 13

Unified Enterprise Transformation Architecture

Seed 26113 · Companion to the chapter and AXIOM Module AXIOM-13

Two instruments: the 5×5 interaction matrix over the constituent architectures (AS,AT,AC,AP,AR)(\mathcal{A}_S, \mathcal{A}_T, \mathcal{A}_C, \mathcal{A}_P, \mathcal{A}_R), and integrated dynamics where a unified transformation operator strengthens ONE coupling at quarter 8 — and a 0.03 coupling change quadruples the steady state. Mirrored in DCT_V1_Ch13_Lab.xlsx.

import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['figure.dpi']=110

import numpy as np
SEED = 26113
ARCH = ["A_S","A_T","A_C","A_P","A_R"]
M = np.array([
 [0.00,0.30,0.20,0.15,0.25],
 [0.35,0.00,0.25,0.20,0.15],
 [0.20,0.30,0.00,0.25,0.10],
 [0.15,0.25,0.35,0.00,0.10],
 [0.30,0.20,0.15,0.25,0.00]])

# integrated (K, p) dynamics: K' = 0.90K + 0.20p + 4 ; p' = gK + 0.80p + 2
G_PRE, G_POST, SWITCH, N = 0.06, 0.09, 8, 24
K0, P0 = 40.0, 50.0

def A_of(g): return np.array([[0.90,0.20],[g,0.80]])
def steady(g):
    return np.linalg.solve(np.eye(2)-A_of(g), np.array([4.0,2.0]))
def path(n=N):
    z = np.empty((n+1,2)); z[0]=(K0,P0)
    for k in range(n):
        g = G_PRE if k < SWITCH else G_POST
        z[k+1] = A_of(g)@z[k] + np.array([4.0,2.0])
    return z

def reference_values():
    sp, spo = steady(G_PRE), steady(G_POST)
    z = path()
    return {
        "max_entry_M": round(float(M.max()),4),
        "max_rowsum_M": round(float(M.sum(axis=1).max()),4),
        "rho_pre": round(float(max(abs(np.linalg.eigvals(A_of(G_PRE))))),4),
        "rho_post": round(float(max(abs(np.linalg.eigvals(A_of(G_POST))))),4),
        "K_ss_pre": round(float(sp[0]),4), "p_ss_pre": round(float(sp[1]),4),
        "K_ss_post": round(float(spo[0]),4), "p_ss_post": round(float(spo[1]),4),
        "K_24": round(float(z[24,0]),4), "p_24": round(float(z[24,1]),4),
    }
if __name__ == "__main__":
    [print(f"{k:14s} {v}") for k,v in reference_values().items()]
max_entry_M    0.35
max_rowsum_M   0.95
rho_pre        0.9704
rho_post       0.9932
K_ss_pre       150.0
p_ss_pre       55.0
K_ss_post      600.0
p_ss_post      280.0
K_24           133.7305
p_24           62.7496

Panel 1 — The interaction matrix

MijM_{ij}: the strength with which architecture jj's state enters architecture ii's evolution (Def.: Enterprise Interaction Matrix). Strongest single interaction: 0.35 (state → transformation, and capital → performance). Most affected layer by row sum: AT\mathcal{A}_T at 0.95 — Enterprise Transformation Simultaneously Affects All Architectures (Prop.), and is affected by all of them in return.

fig, ax = plt.subplots(figsize=(6.4,5.2))
im = ax.imshow(M, cmap="Greens", vmin=0, vmax=0.4)
ax.set_xticks(range(5), ARCH); ax.set_yticks(range(5), ARCH)
for i in range(5):
    for j in range(5):
        if M[i,j]>0: ax.text(j,i,f"{M[i,j]:.2f}",ha="center",va="center",
                             color="white" if M[i,j]>=0.25 else "#0B3D2E", fontsize=10)
ax.set(title="Interaction matrix M (row i ← column j), seed 26113")
plt.colorbar(im, shrink=.8); plt.tight_layout(); plt.show()
print("row sums (how affected):", dict(zip(ARCH, np.round(M.sum(axis=1),2))))
print("col sums (how influential):", dict(zip(ARCH, np.round(M.sum(axis=0),2))))
Interaction matrix M (row i ← column j), seed 26113
row sums (how affected): {'A_S': np.float64(0.9), 'A_T': np.float64(0.95), 'A_C': np.float64(0.85), 'A_P': np.float64(0.85), 'A_R': np.float64(0.9)}
col sums (how influential): {'A_S': np.float64(1.0), 'A_T': np.float64(1.05), 'A_C': np.float64(0.95), 'A_P': np.float64(0.85), 'A_R': np.float64(0.6)}

Panel 2 — Integrated dynamics and the unified operator

Capital and performance coupled: K′=0.90K+0.20p+4K' = 0.90K + 0.20p + 4, p′=gK+0.80p+2p' = gK + 0.80p + 2. At quarter 8 a unified transformation operator raises gg from 0.06 to 0.09 — a capability program making capital more performance-productive. Consequence of a 0.03 coupling change: steady state moves from (150, 55) to (600, 280) and ρ\rho from 0.9704 to 0.9932. The Unified Enterprise Evolution Theorem's lesson: in coupled systems, interactions dominate levels.

z = path()
sp, spo = steady(G_PRE), steady(G_POST)
t = np.arange(N+1)
fig, axes = plt.subplots(1,2, figsize=(10,4.0))
for ax,(idx,nm,ss_pre,ss_post) in zip(axes,[(0,"capital K",sp[0],spo[0]),(1,"performance p",sp[1],spo[1])]):
    ax.plot(t, z[:,idx], "o-", c="#C8A24B", lw=2, ms=3.5)
    ax.axvline(SWITCH, c="#8A8F8B", ls=":", lw=1)
    ax.axhline(ss_pre, c="#0B3D2E", ls="--", lw=1, label=f"pre steady {ss_pre:.0f}")
    ax.set(xlabel="quarter", title=nm); ax.legend(frameon=False, fontsize=9); ax.grid(alpha=.25)
plt.tight_layout(); plt.show()
print(f"rho pre {max(abs(np.linalg.eigvals(A_of(G_PRE)))):.4f} → post {max(abs(np.linalg.eigvals(A_of(G_POST)))):.4f}")
print(f"steady state pre ({sp[0]:.0f}, {sp[1]:.0f}) → post ({spo[0]:.0f}, {spo[1]:.0f})")
print(f"path at q24: K = {z[24,0]:.4f}, p = {z[24,1]:.4f}  (converging toward the new attractor)")
Figure 2, laboratory I.13
rho pre 0.9704 → post 0.9932
steady state pre (150, 55) → post (600, 280)
path at q24: K = 133.7305, p = 62.7496  (converging toward the new attractor)

Panel 3 — The consistency check

The Unified Consistency Theorem demands declared architectural invariants hold along the integrated path. Here: the capital floor K≥25K \ge 25 (a solvency invariant). Verified along all 25 quarters, pre- and post-operator — the transformation strengthened the system without breaching the invariant, which is exactly what the theorem licenses one to require of programs.

z = path()
viol = int((z[:,0] < 25).sum())
print(f"invariant K >= 25:  min K along path = {z[:,0].min():.4f}   violations = {viol}")
assert viol == 0
print("invariant maintained — the unified operator is consistency-preserving here")
invariant K >= 25:  min K along path = 40.0000   violations = 0
invariant maintained — the unified operator is consistency-preserving here

Validation — agrees with DCT_V1_Ch13_Lab.xlsx

ref = reference_values()
expected = {"max_entry_M":0.35,"max_rowsum_M":0.95,"rho_pre":0.9704,"rho_post":0.9932,
 "K_ss_pre":150.0,"p_ss_pre":55.0,"K_ss_post":600.0,"p_ss_post":280.0,
 "K_24":133.7305,"p_24":62.7496}
for k,v in expected.items():
    assert abs(ref[k]-v)<5e-4, f"MISMATCH {k}"
    print(f"PASS  {k:14s} {ref[k]}")
print("\nAll checkpoints agree — seed 26113.")
PASS  max_entry_M    0.35
PASS  max_rowsum_M   0.95
PASS  rho_pre        0.9704
PASS  rho_post       0.9932
PASS  K_ss_pre       150.0
PASS  p_ss_pre       55.0
PASS  K_ss_post      600.0
PASS  p_ss_post      280.0
PASS  K_24           133.7305
PASS  p_24           62.7496

All checkpoints agree — seed 26113.

Next: Exercises 13.9–13.12 (Part C) sweep the coupling toward criticality; AXIOM-13's unified console animates all five layers at once. Solutions: IM Ch. 13.