2020-03-09 23:18:13 +00:00
import { Component } from 'preact'
2020-05-23 21:32:09 +00:00
import Split from "../components/old/split" ;
2020-05-23 22:53:01 +00:00
import Latex from "../components/Latex" ;
2020-05-23 21:32:09 +00:00
import Panel from "../components/old/panel" ;
2020-05-23 22:53:01 +00:00
import Example from "../components/example" ;
2020-05-23 21:32:09 +00:00
import Todo from "../components/old/todo" ;
import Minus from "../components/old/minus" ;
import Plus from "../components/old/plus" ;
import Code from "../components/old/code" ;
2020-05-23 22:53:01 +00:00
import Timer from "../components/old/timer" ;
import Image from "../components/Image" ;
2020-05-25 17:00:17 +00:00
import Unfeasible from "../components/OttimizzazioneLineare/Unfeasible" ;
import Unbounded from "../components/OttimizzazioneLineare/Unbounded" ;
import Min from "../components/OttimizzazioneLineare/Min" ;
import Max from "../components/OttimizzazioneLineare/Max" ;
2020-03-09 23:19:30 +00:00
const r = String . raw ;
2020-03-09 23:18:13 +00:00
export default class OttimizzazioneLineare extends Component {
render ( ) {
return (
< div >
2020-03-11 18:12:30 +00:00
< h1 > Ottimizzazione lineare intera < / h 1 >
2020-05-23 22:53:01 +00:00
< Split title = { "Unimore" } >
2020-03-09 23:19:30 +00:00
< Panel title = { "Videolezioni su YouTube" } >
< p >
2020-03-23 14:47:42 +00:00
Ho rimosso il rumore in sottofondo da tutti i video di Ricerca Operativa !
2020-03-11 16:15:17 +00:00
< / p >
< p >
2020-03-23 14:47:42 +00:00
< b > < a href = { "https://www.youtube.com/playlist?list=PLh93e8qjTszffkHNn-19CqUOhHFbhBlBh" } > Guardate i video qui ! < / a > < / b >
2020-03-09 23:19:30 +00:00
< / p >
< / P a n e l >
2020-05-23 22:53:01 +00:00
< Panel title = { "Prossimi appelli" } >
< ol >
< li > < Timer to = { "2020-06-08" } / > < / l i >
< li > < Timer to = { "2020-06-25" } / > < / l i >
< li > < Timer to = { "2020-07-14" } / > < / l i >
< / o l >
< / P a n e l >
2020-03-09 23:19:30 +00:00
< / S p l i t >
< Split title = { "Le basi" } >
< Panel title = { "Funzione obiettivo" } >
< p >
La funzione obiettivo è la funzione con valore noto sconosciuto :
< / p >
< p >
< Latex > { r ` z = C_1 \c dot x_1 + C_2 \c dot x_2 + C_n \c dot x_n ` } < / L a t e x >
< / p >
< / P a n e l >
< Panel title = { "Gradiente" } >
< p >
Funzione della funzione obiettivo che indica la direzione del suo aumento più veloce .
< / p >
< p >
< Latex > { r ` \n abla f = \f rac{ \d elta f}{ \d elta x_1} e_1 + \f rac{ \d elta f}{ \d elta x_2} e_2 + \f rac{ \d elta f}{ \d elta x_n} e_n ` } < / L a t e x >
< / p >
< p >
< Latex > { r ` e_i ` } < / L a t e x > è l a d i r e z i o n e d e l l a c o o r d i n a t a i - e s i m a .
< / p >
< Example >
Se < Latex > { r ` n = 3 ` } < / L a t e x > , a l l o r a :
< ul >
< li > < Latex > { r ` e_1 = (1, 0, 0) ` } < / L a t e x > < / l i >
< li > < Latex > { r ` e_2 = (0, 1, 0) ` } < / L a t e x > < / l i >
< li > < Latex > { r ` e_3 = (0, 0, 1) ` } < / L a t e x > < / l i >
< / u l >
< / E x a m p l e >
< Example >
Se la funzione obiettivo è < Latex > z = 2 w + 3 x + 4 y < / L a t e x > , i l s u o g r a d i e n t e è < L a t e x > { r ` \ n a b l a z = ( 2 , 3 , 4 ) ` } < / L a t e x > .
< / E x a m p l e >
< / P a n e l >
< / S p l i t >
2020-05-23 05:38:07 +00:00
< Split title = { "Forme di un sistema" } >
< Panel title = { "Forma standard" } >
2020-03-10 20:59:40 +00:00
< ul >
2020-05-23 05:38:07 +00:00
< li > < Minus > Solo equazioni < / M i n u s > < / l i >
< li > < Minus > Tutte le variabili maggiori di zero < / M i n u s > < / l i >
2020-03-10 20:59:40 +00:00
< / u l >
< / P a n e l >
2020-05-23 05:38:07 +00:00
< Panel title = { "Forma canonica" } >
< ul >
< li > < Plus > Equazioni e disequazioni < / P l u s > < / l i >
< li > < Minus > Tutte le variabili maggiori di zero < / M i n u s > < / l i >
< / u l >
< / P a n e l >
< Panel title = { "Forma generale" } >
< ul >
< li > < Plus > Equazioni e disequazioni < / P l u s > < / l i >
< li > < Plus > Variabili con qualsiasi valore < / P l u s > < / l i >
< / u l >
< / P a n e l >
< / S p l i t >
< Split title = { "Equivalenza di forma" } >
< Panel title = { "Da standard a generale" } >
2020-03-10 20:59:40 +00:00
< p >
2020-05-23 05:38:07 +00:00
Convertiamo ogni equazione < Latex > { r ` = ` } < / L a t e x > i n d u e d i s e q u a z i o n i < L a t e x > { r ` \ l e q ` } < / L a t e x > e < L a t e x > { r ` \ g e q ` } < / L a t e x > ,
2020-03-10 20:59:40 +00:00
< / p >
2020-05-23 05:38:07 +00:00
< Example > Why would you ever do that ? ! < / E x a m p l e >
< / P a n e l >
< Panel title = { "Da canonica a standard" } >
2020-03-10 20:59:40 +00:00
< p >
2020-05-23 05:38:07 +00:00
Convertiamo le disequazioni in equazioni aggiungendo una variabile slack .
2020-03-10 20:59:40 +00:00
< / p >
< Example >
2020-05-23 05:38:07 +00:00
< Latex > { r ` a \l eq 3 ` } < / L a t e x > d i v e n t a < L a t e x > { r ` a + s _ 1 = 3 ` } < / L a t e x > .
2020-03-10 20:59:40 +00:00
< / E x a m p l e >
< / P a n e l >
2020-05-23 05:38:07 +00:00
< Panel title = { "Da generale a canonica" } >
2020-03-10 20:59:40 +00:00
< p >
2020-05-23 05:38:07 +00:00
Sostituiamo le variabili potenzialmente negative ( unconstrained ) < Latex > { r ` x_j ` } < / L a t e x > c o n d u e v a r i a b i l i < L a t e x > { r ` x _ j ^ + ` } < / L a t e x > e < L a t e x > { r ` x _ j ^ - ` } < / L a t e x > .
2020-03-11 11:37:34 +00:00
< / p >
2020-03-11 18:12:30 +00:00
< Example >
2020-05-23 05:38:07 +00:00
< Latex > { r ` a \i n \m athbb{Z} ` } < / L a t e x > d i v e n t a < L a t e x > { r ` a ^ + \ i n \ m a t h b b { N } ` } < / L a t e x > e < L a t e x > { r ` - a ^ - \ i n \ m a t h b b { N } ` } < / L a t e x > .
2020-03-11 18:12:30 +00:00
< / E x a m p l e >
2020-05-23 05:38:07 +00:00
< / P a n e l >
< / S p l i t >
< Split title = { "La forma standard" } >
< Panel title = { "Funzione obiettivo" } >
2020-03-11 11:37:34 +00:00
< p >
2020-05-23 05:38:07 +00:00
La funzione da minimizzare / massimizzare , tipicamente indicata con una < Latex > { r ` z ` } < / L a t e x > a l t e r m i n e n o t o .
2020-03-11 11:37:34 +00:00
< / p >
2020-05-23 05:38:07 +00:00
< / P a n e l >
2020-05-25 17:00:17 +00:00
< Panel title = { "Vincoli" } >
< p >
Le funzioni del sistema che non sono quella obiettivo .
< / p >
< / P a n e l >
2020-05-23 05:38:07 +00:00
< Panel title = { "Tableu" } >
2020-03-11 11:37:34 +00:00
< p >
2020-05-23 05:38:07 +00:00
Un modo per rappresentare sistemi in forma standard , anche noto come < b > matrice equivalente completa < / b > d e l s i s t e m a .
< / p >
< Example >
2020-05-23 22:53:01 +00:00
Il sistema : < br / > < br / >
< Latex > { r `
\ begin { cases }
2000 A + 1000 B = z \ \
1 A \ leq 3 \ \
1 B \ leq 3 \ \
2 A + 2 B \ leq 7
\ end { cases }
` }</Latex><br/><br/>
Diventa in forma di tableau : < br / > < br / >
< table class = { "right" } >
< thead >
< tr >
< th > < abbr title = { "Termine noto" } > TN < / a b b r > < / t h >
< th > < Latex > x _1 < / L a t e x > < / t h >
< th > < Latex > x _2 < / L a t e x > < / t h >
< th > < Latex > s _1 < / L a t e x > < / t h >
< th > < Latex > s _2 < / L a t e x > < / t h >
< / t r >
< / t h e a d >
< tbody >
< tr >
< td > < Latex > z < / L a t e x > < / t d >
< td > < Latex > 2000 < / L a t e x > < / t d >
< td > < Latex > 1000 < / L a t e x > < / t d >
< td > < Latex > 0 < / L a t e x > < / t d >
< td > < Latex > 0 < / L a t e x > < / t d >
< / t r >
< tr >
< td > < Latex > 3 < / L a t e x > < / t d >
< td > < Latex > 1 < / L a t e x > < / t d >
< td > < Latex > 0 < / L a t e x > < / t d >
< td > < Latex > 1 < / L a t e x > < / t d >
< td > < Latex > 0 < / L a t e x > < / t d >
< / t r >
< tr >
< td > < Latex > 3 < / L a t e x > < / t d >
< td > < Latex > 0 < / L a t e x > < / t d >
< td > < Latex > 1 < / L a t e x > < / t d >
< td > < Latex > 0 < / L a t e x > < / t d >
< td > < Latex > 1 < / L a t e x > < / t d >
< / t r >
< tr >
< td > < Latex > 7 < / L a t e x > < / t d >
< td > < Latex > 2 < / L a t e x > < / t d >
< td > < Latex > 2 < / L a t e x > < / t d >
< td > < Latex > 0 < / L a t e x > < / t d >
< td > < Latex > 0 < / L a t e x > < / t d >
< / t r >
< / t b o d y >
< / t a b l e >
2020-03-11 18:12:30 +00:00
< / E x a m p l e >
2020-03-10 20:59:40 +00:00
< / P a n e l >
2020-05-23 05:38:07 +00:00
< Panel title = { "Variabili di base" } >
2020-03-30 17:09:31 +00:00
< p >
2020-05-23 22:53:01 +00:00
Variabili che hanno tutti 0 e un 1 nella loro colonna del tableu .
< / p >
< p >
La loro controparte sono le < i > variabili fuori base < / i > .
< / p >
< p >
Un sistema lineare è risolto quando tutte le variabili originali ( < Latex > x _n < / L a t e x > ) s o n o n e l l a b a s e .
2020-03-30 17:09:31 +00:00
< / p >
< / P a n e l >
2020-05-23 05:38:07 +00:00
< / S p l i t >
< Split title = { "Simplex" } >
2020-05-23 22:53:01 +00:00
< Panel title = { "Cos'è?" } >
2020-03-30 17:09:31 +00:00
< p >
2020-05-25 17:00:17 +00:00
Un algoritmo per < Min > minimizzare < /Min>/ < Max > massimizzare < / M a x > e f f i c i e n t e m e n t e v a r i a b i l i d i s i s t e m i l i n e a r i , d e r i v a t o d a G a u s s - J o r d a n .
2020-03-30 17:09:31 +00:00
< / p >
2020-05-23 05:38:07 +00:00
< Example >
2020-05-25 17:00:17 +00:00
E ' spiegato in modo semplice < a href = { "https://web.archive.org/web/20200523052252/https://www.cs.cmu.edu/~15451-f17/handouts/simplex.pdf" } > qui < /a>, e ci sono dei codici sorgenti di esempio <a href={"https:/ / www . cs . cmu . edu / ~ 15451 - f17 / handouts / simplexcodes / " } > qui < / a > .
2020-05-23 05:38:07 +00:00
< / E x a m p l e >
< / P a n e l >
< Panel title = { "I passi" } >
2020-03-30 17:09:31 +00:00
< ol >
2020-05-23 05:38:07 +00:00
< li > Trasforma il sistema in < b > forma standard < / b > . < / l i >
2020-05-25 17:00:17 +00:00
< li > Trova tante variabili < b > linearmente indipendenti < /b> quante siano le righe: esse saranno la <i>base iniziale</i > . < / l i >
< li > Finchè ci sono variabili con coefficienti < Min > positivi < /Min>/ < Max > negativi < / M a x > n e l l a f u n z i o n e o b i e t t i v o :
2020-05-23 05:38:07 +00:00
< ol >
2020-05-25 17:00:17 +00:00
< li >
< b > Scegli < / b > l a p r i m a v a r i a b i l e c o n c o e f f i c i e n t e < M i n > p o s i t i v o < / M i n > / < M a x > n e g a t i v o < / M a x > n e l l a f u n z i o n e o b i e t t i v o : e s s a è l a < i > v a r i a b i l e e n t r a n t e < / i > .
< Example > Si potrebbe scegliere qualsiasi variabile , ma scegliendo sempre la prima possibile ( < i > Regola di Bland < / i > ) c i s i a s s i c u r a c h e l ' a l g o r i t m o t e r m i n i . < / E x a m p l e >
< / l i >
< li > Trova la variabile di base ( detta < i > variabile uscente < / i > ) t r a m i t e i l r a p p o r t o < L a t e x > { r ` \ f r a c { t e r m i n e \ n o t o } { c o e f f . \ v a r i a b i l e \ e n t r a n t e } ` } < / L a t e x > : s c e g l i l a v a r i a b i l e c o n i l < b > r a p p o r t o m i n o r e < / b > , a s s i c u r a n d o t i c h e e s s o s i a < b > p o s i t i v o < / b > . S e t u t t i i r a p p o r t i s o n o n e g a t i v i , a l l o r a i l p r o b l e m a è < b > < U n b o u n d e d / > < / b > . < / l i >
2020-05-23 05:38:07 +00:00
< li > < b > Riscrivi < / b > t u t t e l e f u n z i o n i d e l s i s t e m a i n t e r m i n i d e l l a v a r i a b i l e e n t r a n t e . < / l i >
< / o l >
< / l i >
2020-05-25 17:00:17 +00:00
< li > I < b > termini noti dei vincoli < / b > s o n o l e c o o r d i n a t e d e l r i s u l t a t o , m e n t r e i l < b > t e r m i n e n o t o d e l l a f u n z i o n e o b i e t t i v o < / b > è i l v a l o r e < M i n > m i n i m i z z a t o < / M i n > / < M a x > m a s s i m i z z a t o < / M a x > . < / l i >
2020-03-30 17:09:31 +00:00
< / o l >
< / P a n e l >
2020-05-23 21:23:45 +00:00
< Panel title = { "Sotto forma di tableau" } >
< p >
Se il problema è rappresentato in forma di tableau , allora esso è risolvibile applicando l ' algoritmo di Gauss - Jordan , in aggiunta tenendo conto delle regole per la selezione delle variabili entranti e uscenti .
< / p >
< / P a n e l >
2020-05-25 17:00:17 +00:00
< / S p l i t >
< Split >
< Panel title = { "Soluzioni di base degenerata" } >
< p >
Una soluzione con almeno una variabile di valore < Latex > 0 < / L a t e x > , d o v u t a a u n o o p i ù < b > v i n c o l i r i d o n d a n t i < / b > .
< / p >
< p >
Senza < b > Regola di Bland < / b > e i n p r e s e n z a d i v i n c o l i r i d o n d a n t i s i r i s c h i a d i t r o v a r s i a f a r e p i v o t i n f i n i t i .
< / p >
2020-03-30 22:37:46 +00:00
< / P a n e l >
2020-05-23 22:53:01 +00:00
< Panel title = { "Esempio" } >
< Example >
Ho risolto il problema 3 del file < a href = { "https://dolly.fim.unimore.it/2019/mod/resource/view.php?id=2716" } > < code > Ex _LP _testo < / c o d e > < / a > c o n i l S i m p l e x :
< p >
< Image src = { "https://i.imgur.com/1r405Mb.jpg" } / >
< / p >
< / E x a m p l e >
< / P a n e l >
2020-03-30 22:37:46 +00:00
< / S p l i t >
2020-05-23 05:38:07 +00:00
< Split title = { "Metodo delle due fasi" } >
< Panel title = { "Metodo delle due fasi" } >
2020-03-30 22:37:46 +00:00
< p >
2020-05-25 17:00:17 +00:00
Un estensione del Simplex per permettere la risoluzione di problemi la cui origine non è una soluzione ammissibile .
< / p >
< p >
Prevede l ' introduzione di un < i > problema ausiliario < /i>, le cui variabili sono dette <i>artificiali</i > e sono solitamente rappresentate come < Latex > { r ` y_n ` } < / L a t e x > .
< / p >
< Example >
E ' spiegato in modo semplice < a href = { "https://web.archive.org/web/20200523052252/https://www.cs.cmu.edu/~15451-f17/handouts/simplex.pdf" } > qui < / a > .
< / E x a m p l e >
< / P a n e l >
< Panel title = { "Procedimento" } >
< ol >
< li > Crea un nuovo tableau , < b > aggiungendo variabili artificiali < / b > i n m o d o d a a v e r e u n a b a s e a m m i s s i b i l e . < / l i >
< li > Sostituisci la vecchia funzione obiettivo con una nuova che < b > minimizzi la somma < / b > d i t u t t e l e v a r i a b i l i a r t i f i c i a l i . < / l i >
< li > < u > Fase 1 < / u > : < b > R i s o l v i < / b > i l n u o v o p r o b l e m a c o n i l m e t o d o S i m p l e x . < / l i >
< li > Se il Simplex termina con ancora < b > variabili artificiali nella base < /b>, allora il problema è <b><Unfeasible/ > < / b > . < / l i >
< li > Una volta che le variabili artificiali sono fuori base , < b > elimina < /b> le loro colonne e la nuova funzione obiettivo.<br/ > < / l i >
< li > Riporta il tableau in forma base compiendo operazioni per < b > azzerare i coefficienti < / b > d e l l e v a r i a b i l i d i b a s e n e l l a f u n z i o n e o b i e t t i v o . < / l i >
< li > < u > Fase 2 < / u > : < b > R i s o l v i < / b > i l t a b l e a u c o n i l m e t o d o S i m p l e x . < / l i >
< / o l >
< / P a n e l >
< / S p l i t >
< Split title = { "Dualità" } >
< Panel title = { "Rilassamento" } >
< p >
Una versione semplificata di un problema nella quale si < b > ignorano < / b > u n o o p i ù v i n c o l i .
< / p >
< / P a n e l >
< Panel title = { "Rilassamento di Lagrange" } >
< p >
Un rilassamento che permette di misurare < b > di quanto i vincoli vengono violati < / b > .
< / p >
< p >
I vincoli vengono aggiunti alla funzione obiettivo assieme a un moltiplicatore , solitamente rappresentato con < Latex > { r ` u_n ` } < / L a t e x > .
< / p >
< Example >
< p >
Il sistema :
< / p >
< Latex inline = { false } > { r `
\ begin { cases }
z = 3 x _1 + 5 x _2 \ \
2 x _1 + 3 x _2 \ geq 12 \ \
- x _1 + 3 x _2 \ geq 3 \ \
x _1 \ geq 0 \ \
x _2 \ geq 0
\ end { cases }
` }</Latex>
< p >
diventa :
< / p >
< Latex inline = { false } > { r `
\ begin { cases }
z _ { LR } = 3 x _1 + 5 x _2 + u _1 ( 12 - 2 x _1 - 3 x _2 ) + u _2 ( 3 + x _1 - 3 x _2 ) \ \
x _1 \ geq 0 \ \
x _2 \ geq 0
\ end { cases }
` }</Latex>
< / E x a m p l e >
< / P a n e l >
< Panel title = { "Duale" } >
< p >
Il sistema che < b > < Min > massimizza < /Min>/ < Max > minimizza < / M a x > i m o l t i p l i c a t o r i d i r i l a s s a m e n t o < / b > d i u n q u a l s i a s i s i s t e m a , d e t t o < i > p r i m a l e < / i > .
< / p >
< p >
Si dimostra che la sua soluzione ( se esiste ) è < b > uguale < / b > a l l a s o l u z i o n e d e l p r o b l e m a p r i m a l e .
< / p >
< / P a n e l >
< Panel title = { "In termini matriciali" } >
< p >
Possiamo < b > trasporre < / b > i l t a b l e a u e s o s t i t u i r e l e v a r i a b i l i < L a t e x > { r ` x _ n ` } < / L a t e x > c o n v a r i a b i l i < L a t e x > { r ` u _ n ` } < / L a t e x > p e r o t t e n e r e i l s i s t e m a d u a l e !
< / p >
< p >
I maggiori e minori dei vincoli diventeranno maggiori e minori delle variabili e viceversa .
< / p >
< / P a n e l >
< Panel title = { "Feasibility del duale" } >
< ul >
< li > Se un problema ha una < b > soluzione finita < / b > , a l l o r a a n c h e i l s u o d u a l e l a a v r à . < / l i >
< li > Se un problema è < b > < Unfeasible / > < /b>, allora il suo duale potrà essere <Unfeasible/ > oppure < Unbounded / > . < / l i >
< li > Se un problema è < b > < Unbounded / > < /b>, allora il suo duale sarà certamente <Unfeasible/ > . < / l i >
< / u l >
< / P a n e l >
< / S p l i t >
< Split >
< Panel title = { "Lemma di Farkas" } >
< p >
< Todo > TODO : una complicata dimostrazione per dire varie cose . Probabilmente si riesce a saltare se non si dà l ' orale ... < / T o d o >
< / p >
< / P a n e l >
< Panel title = { "Dualità forte" } >
< p >
Il teorema che dimostra l ' equivalenza tra primale e duale .
< / p >
< p >
< Todo > TODO : Anche qui c ' è una lunga dimostrazione ... < / T o d o >
< / p >
< / P a n e l >
< Panel title = { "Dualità debole" } >
< p >
Il teorema che dimostra che il valore della funzione obiettivo del duale ( di un qualsiasi tableau ) è sempre < Min > minore o uguale < /Min>/ < Max > maggiore o uguale < / M a x > a l l a s o l u z i o n e d e l c o r r i s p e t t i v o p r i m a l e .
2020-03-30 22:37:46 +00:00
< / p >
< p >
2020-05-25 17:00:17 +00:00
< Todo > TODO : Dimostrazione cortina , ma sembra complicata . < / T o d o >
2020-03-30 22:37:46 +00:00
< / p >
< / P a n e l >
< / S p l i t >
2020-03-09 23:18:13 +00:00
< / d i v >
)
}
}