CoolFace
Modelpublic

XIVAI/Stupid-Equation-Solver

sourceHugging Facecc-by-nc-4.0updated 3d agoView on Hugging Face
0likes162downloads
Model Card

<div align="center">

🤖 Stupid-Equation-Solver

Solving 1st–4th Degree Polynomials from Raw Text

No CAS. No symbolic engine. Just a neural network that learned algebra from scratch.

![Params]() ![Hardware]() ![OS]()

English · Polski · Русский

📜 License

Weights: Released under CC-BY-NC-4.0 for non-commercial use.

Training code & data: Not publicly available. All rights reserved.

</div>


<a id="english"></a>

🇬🇧 English

📖 Description

A lightweight neural network that solves algebraic polynomial equations of 1st to 4th degree (both complete and incomplete) — directly from raw character text.

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.

💡 Think of it as a tiny neural calculator that reads equations like a human would — and just knows the answer.

🏗️ Architecture & Training

PropertyValue
Architecture2-layer Bidirectional GRU (BiGRU) + Deep MLP regression head
Parametersembed_dim=32, hidden_dim=384, max_roots=4
Dataset1,000,000+ synthetic equations
Variable namesx, y, a, t, z, ... (randomized)
CoefficientsNon-monic scales from −6 to +12
Root range[-20, 20]
HardwareIntel Arc A770 (16GB GDDR6)
OSArch Linux
BackendPyTorch XPU (oneAPI / Level Zero)
LossCustom Masked MSE (penalizes only valid real roots)

🎯 Benchmark Results (100 Unseen Test Equations)

DegreeTypeMAENotes
1Linear0.33Solid
2Quadratic0.27Handles irrationals, e.g. 1 − √2 ≈ −0.41
3Cubic0.60Reliable
4Quartic1.17Best effort
Overall~0.69 – 0.75

<a id="polski"></a>

🇵🇱 Polski

📖 Opis

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.

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.

💡 Wyobraź sobie mały neuronowy kalkulator, który czyta równania jak człowiek — i po prostu zna odpowiedź.

🏗️ Architektura i Trening

WłaściwośćWartość
Architektura2-warstwowy dwukierunkowy GRU (BiGRU) + głęboka regresyjna głowica MLP
Parametryembed_dim=32, hidden_dim=384, max_roots=4
Zbiór danychPonad 1 000 000 syntetycznych równań
Nazwy zmiennychx, y, a, t, z, ... (losowe)
WspółczynnikiSkala od −6 do +12
Zakres pierwiastków[-20, 20]
SprzętIntel Arc A770 (16GB GDDR6)
SystemArch Linux
BackendPyTorch XPU (oneAPI / Level Zero)
Funkcja stratyMasked MSE (uwzględnia tylko istniejące pierwiastki)

🎯 Wyniki testowe (100 równań)

StopieńTypMAEUwagi
1Liniowe0.33Stabilnie
2Kwadratowe0.27Radzi sobie z niewymiernymi, np. 1 − √2 ≈ −0.41
3Sześcienne0.60Niezawodnie
44. stopnia1.17Zadowalająco
Ogólnie~0.69 – 0.75

<a id="russian"></a>

🇷🇺 Русский

📖 Описание

Лёгкая нейросеть, решающая алгебраические полиномиальные уравнения 1–4 степени (полные и неполные) прямо из сырого текста.

Модель находит действительные корни без сторонних систем компьютерной алгебры (CAS) — она выучила формулы Виета, дискриминант, смену знаков и извлечение корней напрямую из ASCII-строк.

💡 Представьте крошечный нейронный калькулятор, который читает уравнение как человек — и просто знает ответ.

🏗️ Архитектура и обучение

ПараметрЗначение
Архитектура2-слойная двунаправленная GRU (BiGRU) + полносвязная голова MLP
Размерностиembed_dim=32, hidden_dim=384, max_roots=4
Датасет1 000 000+ синтетических уравнений
Переменныеx, y, a, t, z, ... (случайные)
КоэффициентыНемонические, от −6 до +12
Диапазон корней[-20, 20]
ЖелезоIntel Arc A770 (16GB GDDR6)
ОСArch Linux
БэкендPyTorch XPU (oneAPI / Level Zero)
Функция потерьКастомный Masked MSE (штрафует только за существующие корни)

🎯 Метрики качества (бенчмарк на 100 уравнениях)

СтепеньТипMAEЗаметки
1Линейные0.33Стабильно
2Квадратные0.27Справляется с иррациональными, напр. 1 − √2 ≈ −0.41
3Кубические0.60Надёжно
44-й степени1.17На пределе
Общая~0.69 – 0.75

💻 Quick Start

Install dependencies

bash
pip install onnxruntime numpy

Solve equations in Python

python
import json
import numpy as np
import onnxruntime as ort

# 1. Load ONNX model and metadata
# Исправлено: используем equation_embedded.onnx вместо model.onnx
session = ort.InferenceSession("equation_embedded.onnx")

with open("config.json", "r", encoding="utf-8") as f:
    config = json.load(f)

vocab = config["vocab"]
max_len = config["max_len"]

# 2. Inference function
def solve(equation: str):
    equation = equation.strip()
    if "=" not in equation:
        equation += " = 0"

    # Determine polynomial degree
    if "^4" in equation:   deg = 4
    elif "^3" in equation: deg = 3
    elif "^2" in equation: deg = 2
    else:                  deg = 1

    tokens = [vocab.get(ch, 1) for ch in equation]
    tokens = tokens[:max_len] + [0] * max(0, max_len - len(tokens))
    input_data = np.array([tokens], dtype=np.int64)

    # Run inference (проверь, что имена входов и выходов в ONNX совпадают)
    preds = session.run(["roots"], {"tokens": input_data})[0][0]
    return [round(float(r), 2) for r in preds[:deg]]

# 3. Test examples
print(solve("3x^2 - 4x - 15 = 0"))   # -> [2.96, -1.59]           (Exact: 3.0, -1.67)
print(solve("x^2 - 2x - 1 = 0"))     # -> [2.03, -0.41]           (Exact: 2.41, -0.41)
print(solve("x^2 - 16 = 0"))         # -> [3.85, -4.02]           (Exact: 4.0, -4.0)
print(solve("a^3 - 3a^2 + 2a = 0"))  # -> [2.09, 0.84, -0.14]     (Exact: 2.0, 1.0, 0.0)

⚠️ Limitations

· Regression, not symbolic. Outputs are continuous approximations, not exact fractions. Values like 2.96 instead of 3.0 are expected.

· Degree cap. Trained exclusively on 1st–4th degree polynomials. Fifth-degree and higher are out of scope for this version.

· Real roots only. Complex roots are not modeled.

· Root range. Best performance within [-20, 20].

· No repeat roots detection. Multiplicity is not reported — only the value.


🚀 Roadmap

☐ v2: Token-classification head for exact integer roots

☐ v2: Variable-length output (no fixed max_roots)

☐ v3: Extend to 5th+ degree polynomials

☐ v3: Complex root support


<div align="center">

⚡ Part of XIV AI

A startup from Poland, building AI models from scratch.

License: MIT · Trained on: Intel Arc A770 · Framework: PyTorch XPU

</div>