ichuk commited on
Commit
2bf36fc
·
verified ·
1 Parent(s): 9aff804

Update README.md

Browse files
Files changed (1) hide show
  1. README.md +149 -54
README.md CHANGED
@@ -17,82 +17,144 @@ tags:
17
  pipeline_tag: feature-extraction
18
  ---
19
 
20
- # 🤖 Stupid-Equation-Solver (1st–4th Degree Polynomials)
21
 
22
- [English](#description) | [Polski](#opis) | [Русский](#описание)
 
 
 
 
 
 
 
 
 
 
 
 
 
23
 
24
  ---
25
 
26
  ## 🇬🇧 English
27
 
28
- ### Description
29
- A lightweight neural network designed to solve algebraic polynomial equations from **1st to 4th degree** (both complete and incomplete) directly from raw character text.
30
 
31
- The model infers real roots without any external CAS/symbolic algebra engines—it learns polynomial factorization, discriminant calculation, sign switching, and roots extraction directly from ASCII strings.
32
 
33
- ### 📊 Architecture & Training
34
- * **Model Architecture:** 2-layer Bidirectional GRU (BiGRU) + Deep MLP regression head
35
- * **Parameters:** `embed_dim=64`, `hidden_dim=384`, `max_roots=4`
36
- * **Dataset:** Trained on over **1,000,000 synthetic equations** (random variable names $x, y, a, t, z...$, non-monic scales from -6 to +12, roots range $[-20, 20]$)
37
- * **Hardware Acceleration:** **Intel Arc A770 (16GB GDDR6)** on **Arch Linux** via PyTorch XPU (oneAPI / Level Zero backend)
38
- * **Loss Function:** Custom Masked MSE Loss (penalizes only valid real roots, masking out padding slots)
 
 
 
 
 
 
 
 
 
 
 
 
39
 
40
  ### 🎯 Benchmark Results (100 Unseen Test Equations)
41
- * **Degree 1 (Linear):** MAE ≈ **0.33**
42
- * **Degree 2 (Quadratic):** MAE ≈ **0.27** *(Accurate on full quadratics and irrationals, e.g. $1 - \sqrt{2} \approx -0.41$)*
43
- * **Degree 3 (Cubic):** MAE ≈ **0.60**
44
- * **Degree 4 (Quartic):** MAE ≈ **1.17**
45
- * **Overall Mean Absolute Error (MAE):** **~0.69 – 0.75**
 
 
 
46
 
47
  ---
48
 
49
  ## 🇵🇱 Polski
50
 
51
- ### Opis
52
- Neuronowy solver równań algebraicznych wielomianowych od **1. do 4. stopnia** (zarówno zupełnych, jak i niezupełnych) bezpośrednio z surowego tekstu znakowego.
53
 
54
- Model wyznacza pierwiastki rzeczywiste bez użycia zewnętrznych silników symbolicznych (CAS) — uczy się wyznaczania wyróżnika (delty), rozkładu na czynniki, reguły znaków i pierwiastkowania wprost z ciągów znaków ASCII.
55
 
56
- ### 📊 Architektura i Trening
57
- * **Architektura:** 2-warstwowy dwukierunkowy GRU (BiGRU) + głęboka regresyjna głowica MLP
58
- * **Wymiary:** `embed_dim=64`, `hidden_dim=384`, `max_roots=4`
59
- * **Zbiór danych:** Wytrenowany na ponad **1 000 000 syntetycznych równań** (losowe zmienne $x, y, a, t...$, współczynniki skalowania od -6 do +12, zakres pierwiastków $[-20, 20]$)
60
- * **Akceleracja sprzętowa:** **Intel Arc A770 (16GB)** pod **Arch Linux** z wykorzystaniem PyTorch XPU (Level Zero)
61
- * **Funkcja straty:** Masked MSE Loss (uwzględnia wyłącznie istniejące pierwiastki rzeczywiste)
62
 
63
- ### 🎯 Wyniki testowe (Benchmark 100 równań)
64
- * **Stopień 1 (Liniowe):** MAE ≈ **0.33**
65
- * **Stopień 2 (Kwadratowe):** MAE ≈ **0.27** *(Wysoka precyzja na pierwiastkach niewymiernych, np. $1 - \sqrt{2} \approx -0.41$)*
66
- * **Stopień 3 (Sześcienne):** MAE ≈ **0.60**
67
- * **Stopień 4 (4. stopień):** MAE ≈ **1.17**
68
- * **Średni błąd bezwzględny (Ogólny MAE):** **~0.69 – 0.75**
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
69
 
70
  ---
71
 
72
  ## 🇷🇺 Русский
73
 
74
- ### Описание
75
- Нейросетевой решатель алгебраических уравнений степеней **от 1 до 4** (полных и неполных) по сырому символьному тексту.
 
76
 
77
- Модель находит действительные корни полиномов без сторонних систем компьютерной алгебры (CAS) — она выучила формулы Виета, дискриминант, смену знаков и извлечение корней напрямую из строк ASCII.
78
 
79
- ### 📊 Архитектура и Обучение
80
- * **Архитектура:** 2-слойная Двунаправленная GRU (BiGRU) + Полносвязная голова MLP
81
- * **Размерности:** `embed_dim=64`, `hidden_dim=384`, `max_roots=4`
82
- * **Датасет:** Обучена суммарно на более чем **1 000 000 синтетических уравнений** (различные переменные $x, y, a, t...$, коэффициенты от -6 до +12, диапазон корней $[-20, 20]$)
83
- * **Аппаратное ускорение:** **Intel Arc A770 (16GB)** под **Arch Linux** через PyTorch XPU (интерфейс Level Zero)
84
- * **Функция потерь:** Кастомный Masked MSE Loss (штрафует только за существующие действительные корни)
85
 
86
- ### 🎯 Метрики качества (Бенчмарк на 100 контрольных уравнениях)
87
- * **Степень 1 (Линейные):** MAE ≈ **0.33**
88
- * **Степень 2 (Квадратные):** MAE ≈ **0.27** *(Точное извлечение корней, включая иррациональные до сотых, например $1 - \sqrt{2} \approx -0.41$)*
89
- * **Степень 3 (Кубические):** MAE ≈ **0.60**
90
- * **Степень 4 (4-я степень):** MAE ≈ **1.17**
91
- * **Общая средняя ошибка (Overall MAE):** **~0.69 – 0.75**
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
92
 
93
  ---
94
 
95
- ## 💻 Quick Start / Szybki start / Быстрый запуск (ONNX Runtime)
 
 
 
 
 
 
 
96
 
97
  ```python
98
  import json
@@ -113,12 +175,12 @@ def solve(equation: str):
113
  equation = equation.strip()
114
  if "=" not in equation:
115
  equation += " = 0"
116
-
117
  # Determine polynomial degree
118
- if "^4" in equation: deg = 4
119
  elif "^3" in equation: deg = 3
120
  elif "^2" in equation: deg = 2
121
- else: deg = 1
122
 
123
  tokens = [vocab.get(ch, 1) for ch in equation]
124
  tokens = tokens[:max_len] + [0] * max(0, max_len - len(tokens))
@@ -128,7 +190,40 @@ def solve(equation: str):
128
  return [round(float(r), 2) for r in preds[:deg]]
129
 
130
  # 3. Test examples
131
- print(solve("3x^2 - 4x - 15 = 0")) # -> [2.96, -1.59] (Exact: 3.0, -1.67)
132
- print(solve("x^2 - 2x - 1 = 0")) # -> [2.03, -0.41] (Exact: 2.41, -0.41)
133
- print(solve("x^2 - 16 = 0")) # -> [3.85, -4.02] (Exact: 4.0, -4.0)
134
- print(solve("a^3 - 3a^2 + 2a = 0")) # -> [2.09, 0.84, -0.14] (Exact: 2.0, 1.0, 0.0)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
17
  pipeline_tag: feature-extraction
18
  ---
19
 
20
+ <div align="center">
21
 
22
+ # 🤖 Stupid-Equation-Solver
23
+
24
+ ### Solving 1st–4th Degree Polynomials from Raw Text
25
+
26
+ *No CAS. No symbolic engine. Just a neural network that learned algebra from scratch.*
27
+
28
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
29
+ [![Params](https://img.shields.io/badge/Params-3.73M-blue.svg)]()
30
+ [![Hardware](https://img.shields.io/badge/Trained%20on-Intel%20Arc%20A770-0071C5.svg)]()
31
+ [![OS](https://img.shields.io/badge/OS-Arch%20Linux-1793D1.svg)]()
32
+
33
+ [English](#-english) · [Polski](#-polski) · [Русский](#-русский)
34
+
35
+ </div>
36
 
37
  ---
38
 
39
  ## 🇬🇧 English
40
 
41
+ ### 📖 Description
 
42
 
43
+ A lightweight neural network that solves algebraic polynomial equations of **1st to 4th degree** (both complete and incomplete) — directly from raw character text.
44
 
45
+ The model infers **real roots without any external CAS or symbolic algebra engine**. It learned polynomial factorization, discriminant calculation, sign switching, and root extraction directly from ASCII strings.
46
+
47
+ > 💡 *Think of it as a tiny neural calculator that reads equations like a human would — and just knows the answer.*
48
+
49
+ ### 🏗️ Architecture & Training
50
+
51
+ | Property | Value |
52
+ |---|---|
53
+ | **Architecture** | 2-layer Bidirectional GRU (BiGRU) + Deep MLP regression head |
54
+ | **Parameters** | `embed_dim=64`, `hidden_dim=384`, `max_roots=4` |
55
+ | **Dataset** | 1,000,000+ synthetic equations |
56
+ | **Variable names** | $x, y, a, t, z, \dots$ (randomized) |
57
+ | **Coefficients** | Non-monic scales from −6 to +12 |
58
+ | **Root range** | $[-20, 20]$ |
59
+ | **Hardware** | Intel Arc A770 (16GB GDDR6) |
60
+ | **OS** | Arch Linux |
61
+ | **Backend** | PyTorch XPU (oneAPI / Level Zero) |
62
+ | **Loss** | Custom Masked MSE (penalizes only valid real roots) |
63
 
64
  ### 🎯 Benchmark Results (100 Unseen Test Equations)
65
+
66
+ | Degree | Type | MAE | Notes |
67
+ |:---:|:---:|:---:|---|
68
+ | **1** | Linear | **0.33** | Solid |
69
+ | **2** | Quadratic | **0.27** | Handles irrationals, e.g. $1 - \sqrt{2} \approx -0.41$ |
70
+ | **3** | Cubic | **0.60** | Reliable |
71
+ | **4** | Quartic | **1.17** | Best effort |
72
+ | — | **Overall** | **~0.69 – 0.75** | |
73
 
74
  ---
75
 
76
  ## 🇵🇱 Polski
77
 
78
+ ### 📖 Opis
 
79
 
80
+ Lekki model neuronowy rozwiązujący równania algebraiczne wielomianowe od **1. do 4. stopnia** (zarówno zupełne, jak i niezupełne) bezpośrednio z surowego tekstu znakowego.
81
 
82
+ Model wyznacza **pierwiastki rzeczywiste bez użycia zewnętrznych silników symbolicznych (CAS)** — uczy się wyznaczania wyróżnika (delty), rozkładu na czynniki, reguły znaków i pierwiastkowania wprost z ciągów znaków ASCII.
 
 
 
 
 
83
 
84
+ > 💡 *Wyobraź sobie mały neuronowy kalkulator, który czyta równania jak człowiek — i po prostu zna odpowiedź.*
85
+
86
+ ### 🏗️ Architektura i Trening
87
+
88
+ | Właściwość | Wartość |
89
+ |---|---|
90
+ | **Architektura** | 2-warstwowy dwukierunkowy GRU (BiGRU) + głęboka regresyjna głowica MLP |
91
+ | **Parametry** | `embed_dim=64`, `hidden_dim=384`, `max_roots=4` |
92
+ | **Zbiór danych** | Ponad 1 000 000 syntetycznych równań |
93
+ | **Nazwy zmiennych** | $x, y, a, t, z, \dots$ (losowe) |
94
+ | **Współczynniki** | Skala od −6 do +12 |
95
+ | **Zakres pierwiastków** | $[-20, 20]$ |
96
+ | **Sprzęt** | Intel Arc A770 (16GB GDDR6) |
97
+ | **System** | Arch Linux |
98
+ | **Backend** | PyTorch XPU (oneAPI / Level Zero) |
99
+ | **Funkcja straty** | Masked MSE (uwzględnia tylko istniejące pierwiastki) |
100
+
101
+ ### 🎯 Wyniki testowe (100 równań)
102
+
103
+ | Stopień | Typ | MAE | Uwagi |
104
+ |:---:|:---:|:---:|---|
105
+ | **1** | Liniowe | **0.33** | Stabilnie |
106
+ | **2** | Kwadratowe | **0.27** | Radzi sobie z niewymiernymi, np. $1 - \sqrt{2} \approx -0.41$ |
107
+ | **3** | Sześcienne | **0.60** | Niezawodnie |
108
+ | **4** | 4. stopnia | **1.17** | Zadowalająco |
109
+ | — | **Ogólnie** | **~0.69 – 0.75** | |
110
 
111
  ---
112
 
113
  ## 🇷🇺 Русский
114
 
115
+ ### 📖 Описание
116
+
117
+ Лёгкая нейросеть, решающая алгебраические полиномиальные уравнения **1–4 степени** (полные и неполные) прямо из сырого текста.
118
 
119
+ Модель находит **действительные корни без сторонних систем компьютерной алгебры (CAS)** — она выучила формулы Виета, дискриминант, смену знаков и извлечение корней напрямую из ASCII-строк.
120
 
121
+ > 💡 *Представьте крошечный нейронный калькулятор, который читает уравнение как человек — и просто знает ответ.*
 
 
 
 
 
122
 
123
+ ### 🏗️ Архитектура и обучение
124
+
125
+ | Параметр | Значение |
126
+ |---|---|
127
+ | **Архитектура** | 2-слойная двунаправленная GRU (BiGRU) + полносвязная голова MLP |
128
+ | **Размерности** | `embed_dim=64`, `hidden_dim=384`, `max_roots=4` |
129
+ | **Датасет** | 1 000 000+ синтетических уравнений |
130
+ | **Переменные** | $x, y, a, t, z, \dots$ (случайные) |
131
+ | **Коэффициенты** | Нем��нические, от −6 до +12 |
132
+ | **Диапазон корней** | $[-20, 20]$ |
133
+ | **Железо** | Intel Arc A770 (16GB GDDR6) |
134
+ | **ОС** | Arch Linux |
135
+ | **Бэкенд** | PyTorch XPU (oneAPI / Level Zero) |
136
+ | **Функция потерь** | Кастомный Masked MSE (штрафует только за существующие корни) |
137
+
138
+ ### 🎯 Метрики качества (бенчмарк на 100 уравнениях)
139
+
140
+ | Степень | Тип | MAE | Заметки |
141
+ |:---:|:---:|:---:|---|
142
+ | **1** | Линейные | **0.33** | Стабильно |
143
+ | **2** | Квадратные | **0.27** | Справляется с иррациональными, напр. $1 - \sqrt{2} \approx -0.41$ |
144
+ | **3** | Кубические | **0.60** | Надёжно |
145
+ | **4** | 4-й степени | **1.17** | На пределе |
146
+ | — | **Общая** | **~0.69 – 0.75** | |
147
 
148
  ---
149
 
150
+ ## 💻 Quick Start
151
+
152
+ ### Install dependencies
153
+
154
+ ```bash
155
+ pip install onnxruntime numpy
156
+ ```
157
+ ### Solve equations in Python
158
 
159
  ```python
160
  import json
 
175
  equation = equation.strip()
176
  if "=" not in equation:
177
  equation += " = 0"
178
+
179
  # Determine polynomial degree
180
+ if "^4" in equation: deg = 4
181
  elif "^3" in equation: deg = 3
182
  elif "^2" in equation: deg = 2
183
+ else: deg = 1
184
 
185
  tokens = [vocab.get(ch, 1) for ch in equation]
186
  tokens = tokens[:max_len] + [0] * max(0, max_len - len(tokens))
 
190
  return [round(float(r), 2) for r in preds[:deg]]
191
 
192
  # 3. Test examples
193
+ print(solve("3x^2 - 4x - 15 = 0")) # -> [2.96, -1.59] (Exact: 3.0, -1.67)
194
+ print(solve("x^2 - 2x - 1 = 0")) # -> [2.03, -0.41] (Exact: 2.41, -0.41)
195
+ print(solve("x^2 - 16 = 0")) # -> [3.85, -4.02] (Exact: 4.0, -4.0)
196
+ print(solve("a^3 - 3a^2 + 2a = 0")) # -> [2.09, 0.84, -0.14] (Exact: 2.0, 1.0, 0.0)
197
+ ```
198
+
199
+ ---
200
+
201
+ ⚠️ Limitations
202
+
203
+ · Regression, not symbolic. Outputs are continuous approximations, not exact fractions. Values like 2.96 instead of 3.0 are expected.
204
+ · Degree cap. Trained exclusively on 1st–4th degree polynomials. Fifth-degree and higher are out of scope for this version.
205
+ · Real roots only. Complex roots are not modeled.
206
+ · Root range. Best performance within $[-20, 20]$.
207
+ · No repeat roots detection. Multiplicity is not reported — only the value.
208
+
209
+ ---
210
+
211
+ 🚀 Roadmap
212
+
213
+ ☐ v2: Token-classification head for exact integer roots
214
+ ☐ v2: Variable-length output (no fixed max_roots)
215
+ ☐ v3: Extend to 5th+ degree polynomials
216
+ ☐ v3: Complex root support
217
+
218
+ ---
219
+
220
+ <div align="center">
221
+
222
+ ⚡ Part of XIV AI
223
+
224
+ A startup from Poland, building AI models from scratch.
225
+
226
+ License: MIT · Trained on: Intel Arc A770 · Framework: PyTorch XPU
227
+
228
+ </div>
229
+ ```