Skip to content

Latest commit

 

History

44 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Simplex Tutor

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.

Screenshot

Schermata principale di Simplex Tutor

Grafico della regione ammissibile

Funzionalità principali

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.

Utilizzo

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.

Convenzione del tableau

Il programma segue la convenzione utilizzata durante il corso.

Per evitare ciclaggio nei casi degeneri viene usata la regola di Bland:

  1. entra la variabile con indice minimo tra le candidate;
  2. 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.

Import / Export

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": [""]
}

Grafico interattivo

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

Test principali:

node tests/run-tests.js

Stress test:

node tests/stress-tests.js

Test extra:

node tests/extra/run-extra-tests.js

Benchmark Netlib:

node tests/netlib-benchmark-tests.js

I 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.

Struttura del progetto

index.html
graph.html
certificate.html

src/
├── core/       # logica del solver
├── js/         # interfaccia e stato dell'app
└── styles/     # CSS

tests/
docs/
assets/

Limiti

Il progetto non gestisce:

  • programmazione intera o binaria;
  • branch and bound;
  • cutting planes;
  • funzioni obiettivo non lineari;
  • analisi di sensitività completa.

Possibili miglioramenti

  • esportazione PDF del procedimento;
  • libreria di esercizi;
  • esportazione stampabile del certificato;
  • analisi di sensitività;
  • import MPS dall'interfaccia.

Uso di strumenti AI

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.

Licenza

Il progetto è distribuito con licenza MIT.

About

Educational web app for studying the Simplex method step by step, inspired by university Operations Research coursework.

Topics

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages