Simplex Tutor è una web app in HTML, CSS e JavaScript puro pensata come supporto allo studio della Programmazione Lineare e del metodo del simplesso.
L'obiettivo non è mostrare soltanto la soluzione finale, ma rendere visibili anche i passaggi intermedi: forma standard, tableau, costi ridotti, test dei rapporti, pivot, Fase I/Fase II, simplesso duale e soluzione finale.
Il progetto nasce dallo studio del simplesso svolto nel corso universitario di Ricerca Operativa, dove il metodo è stato prima studiato e applicato manualmente.
Supporta:
- problemi di massimo e minimo;
- vincoli
<=,>=e=; - variabili non negative, non positive o libere;
- coefficienti interi, decimali e frazionari;
- trasformazione in forma standard;
- slack, surplus e variabili artificiali;
- metodo delle due fasi;
- simplesso duale;
- base iniziale automatica o indicata dall'utente;
- casi inammissibili, illimitati e degeneri;
- ottimi multipli;
- costruzione del duale;
- certificati di ottimalità;
- grafico interattivo 2D per problemi a due variabili.
I calcoli interni usano frazioni esatte per ridurre gli errori tipici della virgola mobile.
Non sono necessari framework o build.
Apri index.html nel browser.
Nel pannello di input puoi:
- scegliere massimo o minimo;
- selezionare il metodo di risoluzione;
- modificare funzione obiettivo e vincoli;
- impostare il segno delle variabili;
- indicare una base iniziale;
- generare esercizi casuali.
Premendo Risolvi il procedimento viene mostrato passo per passo.
Sono disponibili due modalità:
- Studente — mostra spiegazioni e calcoli intermedi;
- Compatta — concentra la visualizzazione sul tableau.
Il programma segue la convenzione utilizzata durante il corso.
Per evitare ciclaggio nei casi degeneri viene usata la regola di Bland:
- entra la variabile con indice minimo tra le candidate;
- in caso di parità nel test dei rapporti, esce la variabile di base con indice minimo.
Con il metodo automatico viene utilizzata una base naturale quando disponibile. Quando necessario il programma può utilizzare il simplesso duale oppure il metodo delle due fasi.
Il problema corrente può essere esportato e importato in formato JSON.
Esempio:
{
"direction": "min",
"method": "auto",
"variables": [
{ "name": "x1", "sign": "nonnegative" },
{ "name": "x2", "sign": "nonnegative" }
],
"objective": ["1", "1"],
"constraints": [
{ "coefficients": ["1", "1"], "relation": ">=", "rhs": "4" }
],
"initialBasis": [""]
}Per i problemi a due variabili è disponibile una vista grafica con:
- regione ammissibile;
- rette dei vincoli;
- vertici;
- percorso del simplesso;
- punto ottimale;
- funzione obiettivo;
- zoom e pan;
- esportazione PNG.
Il grafico è un supporto visivo: il tableau rimane il riferimento principale del solver.
Test principali:
node tests/run-tests.jsStress test:
node tests/stress-tests.jsTest extra:
node tests/extra/run-extra-tests.jsBenchmark Netlib:
node tests/netlib-benchmark-tests.jsI test coprono frazioni, matrici, forma standard, Fase I/Fase II, simplesso duale, casi inammissibili e illimitati, degenerazione, ottimi multipli e diversi casi limite.
I benchmark Netlib richiedono connessione Internet.
index.html
graph.html
certificate.html
src/
├── core/ # logica del solver
├── js/ # interfaccia e stato dell'app
└── styles/ # CSS
tests/
docs/
assets/
Il progetto non gestisce:
- programmazione intera o binaria;
- branch and bound;
- cutting planes;
- funzioni obiettivo non lineari;
- analisi di sensitività completa.
- esportazione PDF del procedimento;
- libreria di esercizi;
- esportazione stampabile del certificato;
- analisi di sensitività;
- import MPS dall'interfaccia.
Durante lo sviluppo ho utilizzato strumenti AI come supporto, in particolare per:
- migliorare e riorganizzare alcune parti dell'implementazione;
- refactoring del codice;
- sviluppo e miglioramento dell'interfaccia HTML/CSS;
- scrittura di test aggiuntivi;
- individuazione di casi limite;
- revisione della documentazione.
La comprensione del metodo matematico, la verifica dei risultati e la direzione generale del progetto sono rimaste sotto controllo manuale.
Il progetto è distribuito con licenza MIT.

