1
Fork 0
mirror of https://github.com/Steffo99/unisteffo.git synced 2024-11-23 08:24:20 +00:00
triennale-appunti-steffo/docs/route-ottimizzazioneLineare.chunk.9a772.esm.js

36 lines
23 KiB
JavaScript
Raw Normal View History

2020-05-26 16:27:29 +00:00
(window.webpackJsonp=window.webpackJsonp||[]).push([[9],{"/fDt":function(l,i,n){"use strict";n.r(i),function(l){n.d(i,"default",(function(){return ql}));var e=n("hosL"),a=n("lL4N"),t=n("OMhl"),o=n("HKwK"),u=n("PEwj"),r=n("jXlC"),s=(n("UEJU"),n("h7i1"),n("3Gjt"),n("BSmf")),c=(n("xY5u"),n("Th1s")),d=n("dIxp"),m=n("fWbf"),b=n("RPi6"),f=n("lR14"),h=n("wQ73"),p=n("eNIY"),v=n("RtuP");let z,g,x,_,q,w,S,T,I,L,U,C,y,O,P,k,A,R,j,D,F,V,E,M,N,B,G,H,J,Q,K,W,Y,X,$,Z,ll,il,nl,el,al,tl,ol,ul,rl,sl,cl,dl,ml,bl,fl,hl,pl,vl,zl,gl,xl=l=>l;const _l=String.raw;class ql extends e.Component{render(){return l("div",null,l("h1",null,"Ottimizzazione lineare intera"),l(a.a,{title:"Unimore"},l(o.a,{title:"Videolezioni su YouTube"},l("p",null,"Ho rimosso il rumore in sottofondo da tutti i video di Ricerca Operativa!"),l("p",null,l("b",null,l("a",{href:"https://www.youtube.com/playlist?list=PLh93e8qjTszffkHNn-19CqUOhHFbhBlBh"},"Guardate i video qui!")))),l(o.a,{title:"Prossimi appelli"},l("ol",null,l("li",null,l(s.a,{to:"2020-06-08"})),l("li",null,l(s.a,{to:"2020-06-25"})),l("li",null,l(s.a,{to:"2020-07-14"}))))),l(h.a.Provider,{value:!1},l(a.a,{title:"Glossario"},l(p.a,null,l("thead",null,l("tr",null,l("th",null,l("abbr",{title:"Vettore / matrice"},"v")),l("th",null,l("abbr",{title:"Elemento singolo"},"s")),l("th",null,"Significato"))),l("tbody",null,l("tr",null,l("td",null,l(t.a,null,_l(z||(z=xl`\mathbf{x}`)))),l("td",null,l(t.a,null,_l(g||(g=xl`x_i`)))),l("td",null,"Incognite")),l("tr",null,l("td",null,l(t.a,null,_l(x||(x=xl`\mathbf{s}`)))),l("td",null,l(t.a,null,_l(_||(_=xl`s_i`)))),l("td",null,"Variabili slack")),l("tr",null,l("td",null,l(t.a,null,_l(q||(q=xl`\mathbf{c}`)))),l("td",null,l(t.a,null,_l(w||(w=xl`c_i`)))),l("td",null,"Coefficienti della funzione obiettivo")),l("tr",null,l("td",null,l(t.a,null,_l(S||(S=xl`\mathbf{A}`)))),l("td",null,l(t.a,null,_l(T||(T=xl`a_{ij}`)))),l("td",null,"Coefficienti dei vincoli")),l("tr",null,l("td",null,l(t.a,null,_l(I||(I=xl`\mathbf{b}`)))),l("td",null,l(t.a,null,_l(L||(L=xl`b_i`)))),l("td",null,"Termini noti dei vincoli")),l("tr",null,l("td",null,l(t.a,null,_l(U||(U=xl`\mathbf{y}`)))),l("td",null,l(t.a,null,_l(C||(C=xl`y_i`)))),l("td",null,"Incognite artificiali")),l("tr",null,l("td",null,l(t.a,null,_l(y||(y=xl`\mathbf{u}`)))),l("td",null,l(t.a,null,_l(O||(O=xl`u_i`)))),l("td",null,"Coefficienti di rilassamento")),l("tr",null,l("td",null),l("td",null,l(t.a,null,_l(P||(P=xl`c_0`)))),l("td",null,"Valore ottimo di un problema")))),l(p.a,null,l("thead",null,l("tr",null,l("th",null,"Simboli"),l("th",null,"Significato"))),l("tbody",null,l("tr",null,l("td",null,l(t.a,null,_l(k||(k=xl`\mathbf{c}^T \mathbf{x}`)))),l("td",null,"Soluzione del problema")),l("tr",null,l("td",null,l(t.a,null,_l(A||(A=xl`\mathbf{A} \mathbf{x} = \mathbf{b}`)))),l("td",null,"Vincoli in forma standard")),l("tr",null,l("td",null,l(t.a,null,_l(R||(R=xl`z(\dots)`)))),l("td",null,"Funzione obiettivo")),l("tr",null,l("td",null,l(t.a,null,_l(j||(j=xl`\mathbf{u}^T \mathbf{b}`)))),l("td",null,"Soluzione del problema duale")),l("tr",null,l("td",null,l(t.a,null,_l(D||(D=xl`\mathbf{u}^T \mathbf{A} = \mathbf{c}^T`)))),l("td",null,"Vincoli del problema duale in forma standard")))))),l(a.a,{title:"Le basi"},l(o.a,{title:"Funzione obiettivo"},l("p",null,"La funzione obiettivo è la funzione con valore noto sconosciuto:"),l("p",null,l(t.a,null,_l(F||(F=xl`z = C_1 \cdot x_1 + C_2 \cdot x_2 + C_n \cdot x_n`)))))),l(a.a,{title:"Problemi di ottimizzazione lineare"},l(o.a,{title:"Cosa sono?"},l("p",null,"I problemi di ottimizzazione lineare sono problemi che cercano di ",l(m.a,null,"minimizzare"),"/",l(b.a,null,"massimizzare")," il valore di una ",l("i",null,"funzione obiettivo")," le cui incognite sono sottoposte a un ",l("b",null,"sistema di ",l("i",null,"vincoli")),".")),l(o.a,{title:"Funzione obiettivo"},l("p",null,"La funzione da ",l(m.a,null,"minimizzare"),"/",l(b.a,null,"massimizzare"),"."),l("p",null,"Il vettore dei suoi coefficienti è detto ",l(t.a,null,_l(V||(V=xl`\mathbf{c}`))),", mentre quello delle sue incognite ",l(t.a,null,_l(E||(E=xl`\mathbf{
\begin{cases}
a \leq b\\
a \geq b
\end{cases}
`)))),l(u.a,null,"Serve solo nella teoria per dimostrare che le forme sono equivalenti.")),l(o.a,{title:"Canonica e standard"},l("p",null,"Aggiungi una ",l("i",null,"variabile slack")," ",l(t.a,null,_l($||($=xl`s`)))," ",l("b",null,"non-vincolata")," a ogni disequazione nel sistema:"),l("p",null,l(t.a,{inline:!1},_l(Z||(Z=xl`
a \leq b \Leftrightarrow a + s = b
`)))),l("p",null,l(t.a,{inline:!1},_l(ll||(ll=xl`
a \geq b \Leftrightarrow a - s = b
`))))),l(o.a,{title:"Generale e canonica"},l("p",null,"Sdoppia ogni variabile non-vincolata in due variabili con vincolo di non-negatività:"),l("p",null,l(t.a,{inline:!1},_l(il||(il=xl`\begin{cases}
a = a^+ - a^-\\
a^+ \geq 0\\
a^- \geq 0
\end{cases}`)))))),l(a.a,{title:"La forma standard"},l(o.a,{title:"Tableau"},l("p",null,"Un modo per rappresentare sistemi in forma standard, anche noto come ",l("b",null,"matrice equivalente completa")," del sistema."),l(u.a,null,"Il sistema:",l("br",null),l("br",null),l(t.a,{inline:!1},_l(nl||(nl=xl`
\begin{cases}
2000x_1 + 1000x_2 = z\\
1x_1 \leq 3\\
1x_2 \leq 3\\
2x_1 + 2x_2 \leq 7
\end{cases}
`))),l("br",null),l("br",null),"Diventa il tableau:",l("br",null),l("br",null),l("table",{class:"right"},l("thead",null,l("tr",null,l("th",null,l("abbr",{title:"Termine noto"},"TN")),l("th",null,l(t.a,null,"x_1")),l("th",null,l(t.a,null,"x_2")),l("th",null,l(t.a,null,"s_1")),l("th",null,l(t.a,null,"s_2")))),l("tbody",null,l("tr",null,l("td",null,l(t.a,null,"z")),l("td",null,l(t.a,null,"2000")),l("td",null,l(t.a,null,"1000")),l("td",null,l(t.a,null,"0")),l("td",null,l(t.a,null,"0"))),l("tr",null,l("td",null,l(t.a,null,"3")),l("td",null,l(t.a,null,"1")),l("td",null,l(t.a,null,"0")),l("td",null,l(t.a,null,"1")),l("td",null,l(t.a,null,"0"))),l("tr",null,l("td",null,l(t.a,null,"3")),l("td",null,l(t.a,null,"0")),l("td",null,l(t.a,null,"1")),l("td",null,l(t.a,null,"0")),l("td",null,l(t.a,null,"1"))),l("tr",null,l("td",null,l(t.a,null,"7")),l("td",null,l(t.a,null,"2")),l("td",null,l(t.a,null,"2")),l("td",null,l(t.a,null,"0")),l("td",null,l(t.a,null,"0"))))))),l(o.a,{title:"Variabili nella base"},l("p",null,"Variabili che hanno ",l("b",null,"tutti 0 e un solo 1")," nella loro colonna del tableau."),l("p",null,"La loro controparte sono le ",l("i",null,"variabili fuori base"),", che hanno qualsiasi altro valore."))),l(a.a,{title:"Simplex primale"},l(o.a,{title:"Cos'è?"},l("p",null,"Un algoritmo per ",l(m.a,null,"minimizzare"),"/",l(b.a,null,"massimizzare")," trovare efficientemente ",l("b",null,"valore e vertice ottimo")," di problemi di ottimizzazione lineare, derivato da Gauss-Jordan."),l(u.a,null,"E' spiegato in modo semplice ",l("a",{href:"https://web.archive.org/web/20200523052252/https://www.cs.cmu.edu/~15451-f17/handouts/simplex.pdf"},"qui"),", e ci sono dei codici sorgenti di esempio ",l("a",{href:"https://www.cs.cmu.edu/~15451-f17/handouts/simplexcodes/"},"qui"),"."),l(u.a,{title:"Esempio"},l("p",null,l("a",{href:"https://i.imgur.com/1r405Mb.jpg"},"Questa")," è la soluzione passo per passo del problema 3 del file ",l("a",{href:"https://dolly.fim.unimore.it/2019/mod/resource/view.php?id=2716"},l("code",null,"Ex_LP_testo")),"."))),l(o.a,{title:"I passi"},l("ol",null,l("li",null,"Trasforma il sistema in ",l("b",null,"forma standard"),"."),l("li",null,"Trova tante variabili ",l("b",null,"linearmente indipendenti")," quante siano le righe: esse saranno la ",l("i",null,"base iniziale"),"."),l("li",null,"Finchè ci sono variabili con coefficienti ",l(m.a,null,"positivi"),"/",l(b.a,null,"negativi")," nella funzione obiettivo:",l("ol",null,l("li",null,l("b",null,"Scegli")," la prima variabile fuori base con coefficiente ",l(m.a,null,"positivo"),"/",l(b.a,null,"negativo")," nella funzione obiettivo: essa è la ",l("i",null,"variabile entrante"),".",l("br",null),l("aside",null,l("i",null,"Regola di Bland"),": Si potrebbe scegliere qualsiasi variabile come entrante, ma scegliendo sempre la prima ammissibile ci si assicura che l'algoritmo termini.")),l("li",null,l("b",null,"Scegli")," la variabile in base con il minor rapporto positivo ",l(t.a,null,_l(el||(el=xl`\frac{termine\ noto}{coeff.\ variabile\ entrante}`))),".",l("aside",null,"Se non sei riuscito a trovare nessuna variabile con un rapporto positivo, significa che il poliedro è ",l(d.a,null),".")),l("li",null,l("u",null,"Pivot"),": ",l("b",null,"riscrivi")," tutte le funzioni del sistema in termini della variabile entrante."))),l("li",null,"I ",l("b",null,"termini noti dei vincoli")," sono le coordinate del risultato, mentre il ",l("b",null,"termine noto della funzione obiettivo")," è il valore ottimo.")),l(u.a,null,"È praticamente l'algoritmo di Gauss-Jordan applicato al tableau, con delle regole aggiuntive per la decisione delle variabili di pivot.")),l(o.a,{title:"Soluzioni di base degenerata"},l("p",null,"Una soluzione con almeno una variabile di valore ",l(t.a,null,"0"),", dovuta a uno o più ",l("b",null,"vincoli ridondanti"),"."),l("p",null,"Senza ",l("b",null,"Regola di Bland")," e in presenza di vincoli ridondanti si rischia di trovarsi a fare pivot infiniti."))),l(a.a,{title:"Metodo delle due fasi"},l(o.a,{title:"Metodo delle due fasi"
\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}
`))),l("p",null,"diventa:"),l(t.a,{inline:!1},_l(ul||(ul=xl`
\begin{cases}
z = 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}
`)))))),l(a.a,{title:"Dualità"},l(o.a,{title:"Duale"},l("p",null,"Il sistema che ",l("b",null,l(m.a,null,"massimizza"),"/",l(b.a,null,"minimizza")," i moltiplicatori di rilassamento")," di un problema detto ",l("i",null,"primale"),".")),l(o.a,{title:"In termini matriciali"},l("p",null,"Possiamo ",l("b",null,"trasporre")," il tableau e sostituire le variabili ",l(t.a,null,_l(rl||(rl=xl`x_n`)))," con variabili ",l(t.a,null,_l(sl||(sl=xl`u_n`)))," per ottenere il sistema duale!"),l("p",null,"I maggiori e minori dei vincoli diventeranno maggiori e minori delle variabili e viceversa.")),l(o.a,{title:"Feasibility del duale"},l("ul",null,l("li",null,"Se un problema ha una ",l("b",null,"soluzione finita"),", allora anche il suo duale la avrà."),l("li",null,"Se un problema è ",l("b",null,l(c.a,null)),", allora il suo duale potrà essere ",l(c.a,null)," oppure ",l(d.a,null),"."),l("li",null,"Se un problema è ",l("b",null,l(d.a,null)),", allora il suo duale sarà certamente ",l(c.a,null),".")))),l(a.a,{title:"Un po' di teoria"},l(o.a,{title:"Lemma di Farkas"},l("p",null,"Una disuguaglianza lineare ",l(t.a,null,_l(cl||(cl=xl`c_0 \leq \mathbf{c}^T \mathbf{x}`)))," è verificata da tutti i punti di un poliedro non-",l(c.a,null)," se e solo se esiste un vettore ",l(t.a,null,_l(dl||(dl=xl`u \in \mathfrak{R}^m`)))," tale che:"),l(f.a,null,_l(ml||(ml=xl`\mathbf{c}^T \geq \mathbf{u}^T \mathbf{A}`))),l(f.a,null,_l(bl||(bl=xl`c_0 \leq \mathbf{u}^T \mathbf{b}`))),l("p",null,l(r.a,null,"TODO: Cioè?"))),l(o.a,{title:"Dualità forte"},l("p",null,"Il teorema che dimostra l'equivalenza tra primale e duale."),l("p",null,"Se uno dei due problemi è finito, la soluzione di uno coincide con la soluzione dell'altro."),l("p",null,l(t.a,null,_l(fl||(fl=xl`\mathbf{c}^T \mathbf{x} = \mathbf{u}^T \mathbf{b}`)))),l("p",null,l(r.a,null,"TODO: Anche qui c'è una lunga dimostrazione..."))),l(o.a,{title:"Dualità debole"},l("p",null,"Il teorema che dimostra che il valore della funzione obiettivo del duale (di un qualsiasi tableau) è sempre ",l(m.a,null,"minore o uguale"),"/",l(b.a,null,"maggiore o uguale")," alla soluzione del corrispettivo primale."),l("p",null,l(r.a,null,"TODO: Dimostrazione cortina, ma sembra complicata."))),l(o.a,{title:"Condizioni di ottimalità"},l("p",null,"Il teorema che ci permette di passare dalla soluzione del duale alla soluzione del primale. ",l(r.a,null,"TODO: credo?")),l("p",null,"Si deriva combinando le seguenti condizioni:"),l("ul",null,l("li",null,"Ammissibilità del primale: ",l(t.a,null,_l(hl||(hl=xl`\mathbf{A} \mathbf{X} \geq \mathbf{b}, \quad \mathbf{x} \geq 0`)))),l("li",null,"Ammissibilità del duale: ",l(t.a,null,_l(pl||(pl=xl`\mathbf{u}^T \mathbf{A} \leq \mathbf{c}^T, \quad \mathbf{u} \geq 0`)))),l("li",null,"Teorema della dualità forte: ",l(t.a,null,_l(vl||(vl=xl`\mathbf{c}^T \mathbf{x} = \mathbf{u}^T \mathbf{b}`)))," (alla soluzione ottima)")),l("p",null,"Ne risulta che una soluzione è ottima se e solo se:"),l(f.a,null,_l(zl||(zl=xl`\left( \mathbf{c}^T - \mathbf{u}^T \mathbf{A} \right) \mathbf{x} = 0`))),l(f.a,null,_l(gl||(gl=xl`\mathbf{u}^T \left( \mathbf{A} \mathbf{x} - \mathbf{b} \right) = 0`))))))}}}.call(this,n("hosL").h)},"3k98":function(l){l.exports={todo:"todo__1UVRh"}},"4fSx":function(l){l.exports={unbounded:"unbounded__25UN8",unfeasible:"unfeasible__2MuIF",finite:"finite__2EP_f",min:"min__3lPpn",max:"max__1hxKl"}},"56OW":function(l){l.exports={plus:"plus__2u13i"}},BSmf:function(l,i,n){"use strict";(function(l){n.d(i,"a",(function(){return o}));var e=n("hosL"),a=n("EfTa"),t=n.n(a);class o extends e.Component{constructor(){super(),this.state={now:Date.now()},this.timer=null}componentDidMount(){this.timer=setInterval(()=>{this.setState({now:Date.now()})},1e3)}componentWillUnmount(){null!==this.timer&&clearInterval(this.timer)}render(){let i="Unknown date",n=t.a.timer,e={milliseconds:"?",seconds:"?",minutes:"?",hours:"?",days:"?"};if(this.props.to){i=new Date(this.props.to);let l=i-this.state.now;l>0?e={milliseconds:l%1e3,seconds:Math.floor(l/1e3)%60,minutes:Math.floor(l/6e4
//# sourceMappingURL=route-ottimizzazioneLineare.chunk.9a772.esm.js.map