Fix port configuration and update Hamming network logic; enhance index view formulas and add deployment workflow
Build and Push / build (push) Failing after 1m22s

This commit is contained in:
Dmitry
2026-05-17 17:21:58 +03:00
parent 7c7e28c3d6
commit 75e8f3a400
5 changed files with 49 additions and 20 deletions
+22 -16
View File
@@ -401,20 +401,23 @@
const names = data.pattern_names;
const t = data.hamming_trace;
hfFormula(String.raw`\operatorname{net}_i = \sum_{j} W_{ij} \cdot x_j \qquad x_i = \operatorname{sgn}(\operatorname{net}_i)`);
hfFormula(String.raw`s_j(p{+}1) = \sum_{i=0}^{n-1} w_{ij}\,y_i(p)`);
hfFormula(String.raw`y_j(p{+}1) = f\!\left[s_j(p{+}1)\right], \quad f(s)=\begin{cases}1&s\geq0\\-1&s<0\end{cases}`);
data.hopfield_nets.forEach((nd, i) => {
const mark = nd.changed === 0 ? ' ← сошлось' : '';
hfLine(`шаг ${i + 1}: изменено ${nd.changed}/64${mark}`);
hfLine(`p=${i + 1}: изменено ${nd.changed}/64${mark}`);
});
hmFormula(String.raw`y_k = \frac{\mathbf{x} \cdot \mathbf{p}_k + n}{2}`);
hmFormula(String.raw`w_{ik} = \tfrac{x_i^k}{2}, \quad T_k = \tfrac{n}{2}`);
hmFormula(String.raw`y_j^{(1)} = \sum_{i=0}^{n-1} w_{ij}\,x_i + T_j`);
const layer = names.map((n, i) => `${n}\\!=\\!${t.initial_outputs[i]}`).join(',\\;');
hmFormula(String.raw`\text{слой: }\;` + layer);
hmFormula(String.raw`\varepsilon = \tfrac{0.9}{K} = \tfrac{0.9}{${t.k}} = ${t.eps}`);
hmFormula(String.raw`y_i(t{+}1) = \max\!\left(0,\; y_i(t) - \varepsilon\!\sum_{j \neq i} y_j(t)\right)`);
hmFormula(String.raw`y_j^{(2)}(0) = y_j^{(1)}:\;` + layer);
hmFormula(String.raw`0 < \varepsilon < \tfrac{1}{m},\quad \varepsilon = \tfrac{0.9}{${t.k}} = ${t.eps}`);
hmFormula(String.raw`s_j^{(2)}(p{+}1) = y_j^{(2)}(p) - \varepsilon\!\sum_{k \neq j} y_k^{(2)}(p)`);
hmFormula(String.raw`y_j^{(2)}(p{+}1) = f\!\left[s_j^{(2)}(p{+}1)\right]`);
data.hamming_steps.slice(1).forEach((step, i) => {
const vals = names.map((n, j) => `${n}\\!=\\!${step[j]}`).join(',\\;');
hmFormula(`\\text{iter ${i + 1}: }\\;` + vals);
hmFormula(`p=${i + 1}:\\; y^{(2)} = [\\;` + vals + `\\;]`);
});
hmFormula(String.raw`\Rightarrow \text{победитель: } \mathbf{` + data.hamming_winner + `}`);
}
@@ -496,7 +499,8 @@
if (showTrace) {
clearTrace();
document.getElementById('trace-panels').style.display = 'flex';
hfFormula(String.raw`\operatorname{net}_i = \sum_{j} W_{ij} \cdot x_j \qquad x_i = \operatorname{sgn}(\operatorname{net}_i)`);
hfFormula(String.raw`s_j(p{+}1) = \sum_{i=0}^{n-1} w_{ij}\,y_i(p)`);
hfFormula(String.raw`y_j(p{+}1) = f\!\left[s_j(p{+}1)\right], \quad f(s)=\begin{cases}1&s\geq0\\-1&s<0\end{cases}`);
}
renderBars(names, data.hamming_steps[0]);
@@ -513,7 +517,7 @@
if (showTrace && i > 0 && data.hopfield_nets[i - 1]) {
const nd = data.hopfield_nets[i - 1];
const mark = nd.changed === 0 ? ' ← сошлось' : '';
hfLine(`шаг ${i}: изменено ${nd.changed}/64${mark}`);
hfLine(`p=${i}: изменено ${nd.changed}/64${mark}`);
}
}
if (i < hmSteps.length) {
@@ -523,14 +527,16 @@
if (showTrace) {
const t = data.hamming_trace;
if (i === 0) {
hmFormula(String.raw`y_k = \frac{\mathbf{x} \cdot \mathbf{p}_k + n}{2}`);
hmFormula(String.raw`w_{ik} = \tfrac{x_i^k}{2}, \quad T_k = \tfrac{n}{2}`);
hmFormula(String.raw`y_j^{(1)} = \sum_{i=0}^{n-1} w_{ij}\,x_i + T_j`);
const layer = names.map((n, j) => `${n}\\!=\\!${t.initial_outputs[j]}`).join(',\\;');
hmFormula(String.raw`\text{слой: }\;` + layer);
hmFormula(String.raw`\varepsilon = \tfrac{0.9}{${t.k}} = ${t.eps}`);
hmFormula(String.raw`y_i(t{+}1) = \max\!\left(0,\; y_i(t) - \varepsilon\!\sum_{j \neq i} y_j(t)\right)`);
hmFormula(String.raw`y_j^{(2)}(0) = y_j^{(1)}:\;` + layer);
hmFormula(String.raw`0 < \varepsilon < \tfrac{1}{m},\quad \varepsilon = \tfrac{0.9}{${t.k}} = ${t.eps}`);
hmFormula(String.raw`s_j^{(2)}(p{+}1) = y_j^{(2)}(p) - \varepsilon\!\sum_{k \neq j} y_k^{(2)}(p)`);
hmFormula(String.raw`y_j^{(2)}(p{+}1) = f\!\left[s_j^{(2)}(p{+}1)\right]`);
} else {
const vals = names.map((n, j) => `${n}\\!=\\!${hmSteps[i][j]}`).join(',\\;');
hmFormula(`\\text{iter ${i}: }\\;` + vals);
hmFormula(`p=${i}:\\; y^{(2)} = [\\;` + vals + `\\;]`);
}
}
}
@@ -552,7 +558,7 @@
const hmLabel = document.getElementById('hamming-label');
hmLabel.textContent = `Ближайший эталон: ${data.hamming_winner}`;
hmLabel.className = 'status-label yes';
if (showTrace) hmFormula(String.raw`\Rightarrow \text{победитель: } \mathbf{` + data.hamming_winner + `}`);
if (showTrace) hmFormula(String.raw`\Rightarrow \text{победитель (}\,y_j^{(2)}\text{ max):}\;\mathbf{` + data.hamming_winner + `}`);
}
function showResult(data) {
@@ -618,5 +624,5 @@
</body>
<footer style="margin-top:3rem; font-size:0.75rem; color:#666; text-align:center;">
&copy; Develop by Antipenko D.A. for MIAD - 2026
&copy; Created by Antipenko D.A. for MIAD - 2026
</html>