(window.webpackJsonp=window.webpackJsonp||[]).push([[10],{"2w3n":function(l){l.exports={red:"red__2y1B_",orange:"orange__dD2kx",yellow:"yellow__OEpwl",lime:"lime__CVe41",cyan:"cyan__26ZAg",blue:"blue__LO7Xm",magenta:"magenta__1Akee",example:"example__2PzAa"}},"4fSx":function(l){l.exports={red:"red__UmOgB",orange:"orange__1FTS8",yellow:"yellow__3dJAV",lime:"lime__3kPc-",cyan:"cyan__11RpC",blue:"blue__320AC",magenta:"magenta__VPUPe",unbounded:"unbounded__25UN8",unfeasible:"unfeasible__2MuIF",finite:"finite__2EP_f",min:"min__3lPpn",max:"max__1hxKl"}},RPi6:function(l,i,n){"use strict";(function(l){vare=n("4fSx"),a=n.n(e);i.a=function(i){returnl("abbr",{class:a.a.max,title:"In problemi in cui il primale è di massimizzazione."},i.children?i.children:"max")}}).call(this,n("hosL").h)},RtuP:function(l,i,n){"use strict";(function(l){vare=n("4fSx"),a=n.n(e);i.a=function(i){returnl("abbr",{class:a.a.finite,title:"I punti del poliedro sono finiti."},i.children?i.children:"finito")}}).call(this,n("hosL").h)},Th1s:function(l,i,n){"use strict";(function(l){vare=n("4fSx"),a=n.n(e);i.a=function(i){returnl("abbr",{class:a.a.unfeasible,title:"Il poliedro non contiene punti."},i.children?i.children:"vuoto")}}).call(this,n("hosL").h)},dIxp:function(l,i,n){"use strict";(function(l){vare=n("4fSx"),a=n.n(e);i.a=function(i){returnl("abbr",{class:a.a.unbounded,title:"I punti del poliedro sono infiniti."},i.children?i.children:"illimitato")}}).call(this,n("hosL").h)},fWbf:function(l,i,n){"use strict";(function(l){vare=n("4fSx"),a=n.n(e);i.a=function(i){returnl("abbr",{class:a.a.min,title:"In problemi in cui il primale è di minimizzazione."},i.children?i.children:"min")}}).call(this,n("hosL").h)},hasd:function(l,i,n){"use strict";n.r(i),function(l){vare=n("mbOI"),a=n("ke5e"),t=n("Th1s"),o=n("dIxp"),u=n("RtuP"),r=n("fWbf"),d=n("RPi6");lets,m,c,b,f,p,h,v,g,z,_,x,q,j,S,T,I,w,A,C,k,L,P,F,U,y,O,V,D,R,E,B,J,G,M,N,X,W,Z,K,Q,H,Y,$,ll,il,nl,el,al,tl,ol,ul,rl,dl,sl,ml,cl,bl,fl,pl,hl,vl,gl,zl,_l=l=>l;constxl=String.raw;i.default=function(){returnl("div",null,l("h1",null,"Ottimizzazione lineare intera"),l(e.k,{title:"Informazioni"},l(e.j,{title:"Contatti"},l("ul",null,l("li",null,l("a",{href:"mailto:stefano.novellani@unimore.it"},"Prof. Stefano Novellani")))),l(e.j,{title:"Archivio"},l("p",null,"Se sei uno ",l("b",null,"studente dell'Unimore"),", puoi accedere all'",l("b",null,l("a",{href:"https://drive.google.com/drive/folders/13q-E6LvXca9uo3sATMZxrhJClqMB0wJu"},"archivio del corso su Google Drive")),"."))),l(e.k,{title:"Esame"},l(e.j,{title:"Scritto"},l("p",null,"Uno scritto con tre domande:"),l("ul",null,l("li",null,"Progettazione concettuale e logica"),l("li",null,"Formulazione interrogazione"),l("li",null,"Una domanda tra:",l("ul",null,l("li",null,"Studio dato derivato"),l("li",null,"Progettazione fisica"),l("li",null,"Tecnologia database"))))),l(e.j,{title:"Appelli"},l("ol",null,l("li",null,l(e.m,{to:"2020-06-08"})),l("li",null,l(e.m,{to:"2020-06-25"})),l("li",null,l(e.m,{to:"2020-07-16"}))))),l(e.f.Provider,{value:!1},l(e.k,{title:"Glossario"},l(e.l,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(e.d,null,xl(s||(s=_l`\mathbf{x}`)))),l("td",null,l(e.d,null,xl(m||(m=_l`x_i`)))),l("td",null,"Incognite")),l("tr",null,l("td",null,l(e.d,null,xl(c||(c=_l`\mathbf{s}`)))),l("td",null,l(e.d,null,xl(b||(b=_l`s_i`)))),l("td",null,"Variabili slack")),l("tr",null,l("td",null,l(e.d,null,xl(f||(f=_l`\mathbf{c}`)))),l("td",null,l(e.d,null,xl(p||(p=_l`c_i`)))),l("td",null,"Coefficienti della funzione obiettivo")),l("tr",null,l("td",null,l(e.d,null,xl(h||(h=_l`\mathbf{A}`)))),l("td",null,l(e.d,null,xl(v||(v=_l`a_{ij}`)))),l("td",null,"Coefficienti dei vincoli")),l("tr",null,l("td",null,l(e.d,null,xl(g||(g=_l`\mathbf{b}`)))),l("td",null,l(e.d,null,xl(z||(z=_l`b_i`)))),l("td",null,"Termini noti dei vincoli")),l("tr",null,l("td",null,l(e.d,null,xl(_||(_=_l`\mathbf{y}`)))),l("td",null,l(e.d,null,xl(x
\begin{cases}
a\leqb\\
a\geqb
\end{cases}
`)))),l(a.a,null,"Serve solo nella teoria per dimostrare che le forme sono equivalenti.")),l(e.j,{title:"Canonica e standard"},l("p",null,"Aggiungi una ",l("i",null,"variabile slack")," ",l(e.d,null,xl(Q||(Q=_l`s`)))," ",l("b",null,"non-vincolata")," a ogni disequazione nel sistema:"),l("p",null,l(e.d,{inline:!1},xl(H||(H=_l`
a\leqb\Leftrightarrowa+s=b
`)))),l("p",null,l(e.d,{inline:!1},xl(Y||(Y=_l`
a\geqb\Leftrightarrowa-s=b
`))))),l(e.j,{title:"Generale e canonica"},l("p",null,"Sdoppia ogni variabile non-vincolata in due variabili con vincolo di non-negatività:"),l("p",null,l(e.d,{inline:!1},xl($||($=_l`\begin{cases}
a=a^+-a^-\\
a^+\geq0\\
a^-\geq0
\end{cases}`)))))),l(e.k,{title:"La forma standard"},l(e.j,{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(a.a,null,"Il sistema:",l("br",null),l("br",null),l(e.d,{inline:!1},xl(ll||(ll=_l`
\begin{cases}
2000x_1+1000x_2=z\\
1x_1\leq3\\
1x_2\leq3\\
2x_1+2x_2\leq7
\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(e.d,null,"x_1")),l("th",null,l(e.d,null,"x_2")),l("th",null,l(e.d,null,"s_1")),l("th",null,l(e.d,null,"s_2")))),l("tbody",null,l("tr",null,l("td",null,l(e.d,null,"z")),l("td",null,l(e.d,null,"2000")),l("td",null,l(e.d,null,"1000")),l("td",null,l(e.d,null,"0")),l("td",null,l(e.d,null,"0"))),l("tr",null,l("td",null,l(e.d,null,"3")),l("td",null,l(e.d,null,"1")),l("td",null,l(e.d,null,"0")),l("td",null,l(e.d,null,"1")),l("td",null,l(e.d,null,"0"))),l("tr",null,l("td",null,l(e.d,null,"3")),l("td",null,l(e.d,null,"0")),l("td",null,l(e.d,null,"1")),l("td",null,l(e.d,null,"0")),l("td",null,l(e.d,null,"1"))),l("tr",null,l("td",null,l(e.d,null,"7")),l("td",null,l(e.d,null,"2")),l("td",null,l(e.d,null,"2")),l("td",null,l(e.d,null,"0")),l("td",null,l(e.d,null,"0"))))))),l(e.j,{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(e.k,{title:"Simplex primale"},l(e.j,{title:"Cos'è?"},l("p",null,"Un algoritmo per ",l(r.a,null,"minimizzare"),"/",l(d.a,null,"massimizzare")," trovare efficientemente ",l("b",null,"valore ottimo")," di problemi di ottimizzazione lineare, derivato da Gauss-Jordan."),l("p",null,"Da esso si può anche ricavare un ",l("b",null,"vertice ottimo ammissibile"),".",l("br",null),"C'è la possibilità che ne esistano anche altri: quello ottenuto dipende da come è stata effettuata la scelta delle variabili entranti."),l(a.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(a.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(e.j,{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(r.a,null,"positivi"),"/",l(d.a,null,"negativi")," nella funzione obiettivo:",l("ol",null,l("li",null,l("b",null,"Scegli")," la prima variabile fuori base con coefficiente ",l(r.a,null,"positivo"),"/",l(d.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(e.d,null,xl(il||(il=_l`\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(o.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,"Il poliedro è ",l(u.a,null),": i ",l("b",null,"termini noti dei vincoli")," sono le coordinate del suo vertice ottimo, mentre il ",l("b",null,"termine noto della funzione obiettivo")," è il valore ottimo.")),l(a.a,null,"È praticamente l'algoritmo di Gauss-Jordan applicato al tableau, con delle regole aggiuntive per la decisione delle variabili di pivot.")),l(e.j,{title:"Soluzioni di base degenerata"},l("p",null,"Una soluzione con almeno una variabile di valore ",l(e.d,null,"0"),"
`)))))),l(e.k,{title:"Dualità"},l(e.j,{title:"Duale"},l("p",null,"Il sistema che ",l("b",null,l(r.a,null,"massimizza"),"/",l(d.a,null,"minimizza")," i moltiplicatori di rilassamento")," di un problema detto ",l("i",null,"primale"),".")),l(e.j,{title:"In termini matriciali"},l("p",null,"Possiamo ",l("b",null,"trasporre")," il tableau e sostituire le variabili ",l(e.d,null,xl(ol||(ol=_l`x_n`)))," con variabili ",l(e.d,null,xl(ul||(ul=_l`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(e.j,{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(t.a,null)),", allora il suo duale potrà essere ",l(t.a,null)," oppure ",l(o.a,null),"."),l("li",null,"Se un problema è ",l("b",null,l(o.a,null)),", allora il suo duale sarà certamente ",l(t.a,null),".")))),l(e.k,{title:"Un po' di teoria"},l(e.j,{title:"Lemma di Farkas"},l("p",null,"Una disuguaglianza lineare ",l(e.d,null,xl(rl||(rl=_l`c_0\leq\mathbf{c}^T\mathbf{x}`)))," è verificata da tutti i punti di un poliedro non-",l(t.a,null)," se e solo se esiste un vettore ",l(e.d,null,xl(dl||(dl=_l`u\in\mathfrak{R}^m`)))," tale che:"),l(e.i,null,xl(sl||(sl=_l`\mathbf{c}^T\geq\mathbf{u}^T\mathbf{A}`))),l(e.i,null,xl(ml||(ml=_l`c_0\leq\mathbf{u}^T\mathbf{b}`))),l("p",null,l(e.n,null,"TODO: Cioè?"))),l(e.j,{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(e.d,null,xl(cl||(cl=_l`\mathbf{c}^T\mathbf{x}=\mathbf{u}^T\mathbf{b}`)))),l("p",null,l(e.n,null,"TODO: Anche qui c'è una lunga dimostrazione..."))),l(e.j,{title:"Dualità debole"},l("p",null,"Il teorema che dimostra che il valore della funzione obiettivo del duale (di un qualsiasi tableau) è sempre ",l(r.a,null,"minore o uguale"),"/",l(d.a,null,"maggiore o uguale")," alla soluzione del corrispettivo primale."),l("p",null,l(e.n,null,"TODO: Dimostrazione cortina, ma sembra complicata."))),l(e.j,{title:"Condizioni di ottimalità"},l("p",null,"Il teorema che ci permette di passare dalla soluzione del duale alla soluzione del primale. ",l(e.n,null,"TODO: credo?")),l("p",null,"Si deriva combinando le seguenti condizioni:"),l("ul",null,l("li",null,"Ammissibilità del primale: ",l(e.d,null,xl(bl||(bl=_l`\mathbf{A}\mathbf{X}\geq\mathbf{b},\quad\mathbf{x}\geq0`)))),l("li",null,"Ammissibilità del duale: ",l(e.d,null,xl(fl||(fl=_l`\mathbf{u}^T\mathbf{A}\leq\mathbf{c}^T,\quad\mathbf{u}\geq0`)))),l("li",null,"Teorema della dualità forte: ",l(e.d,null,xl(pl||(pl=_l`\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(e.i,null,xl(hl||(hl=_l`\left(\mathbf{c}^T-\mathbf{u}^T\mathbf{A}\right)\mathbf{x}=0`))),l(e.i,null,xl(vl||(vl=_l`\mathbf{u}^T\left(\mathbf{A}\mathbf{x}-\mathbf{b}\right)=0`))))),l(e.k,{title:"Simplex duale"},l(e.j,{title:"Cos'è?"},l("p",null,"Un'estensione al Simplex primale che opera sul problema duale.")),l(e.j,{title:"Come funziona?"},l("p",null,"Funziona esattamente come il Simplex primale, ma opera sulle righe invece che sulle colonne, cercando di rendere ",l(r.a,null,"positivi"),"/",l(d.a,null,"negativi")," tutti i termini noti."),l(a.a,null,"Significa che si possono moltiplicare tutti i valori di una riga per lo stesso numero e il risultato non cambia...?"))),l(e.k,{title:"Analisi di sensibilità"},l(e.j,{title:"Cos'è?"},l("p",null,"Un procedimento che misura di ",l("b",null,"quanto può variare")," il termine noto di un vincolo ",l(e.d,null,xl(gl||(gl=_l`b_i`)))," o il coefficiente della funzione obiettivo ",l(e.d,null,xl(zl||(zl=_l`c_i`)))," prima che la base degeneri. ",l(e.n,null,"TODO: verificare")))))}}.call(this,n("hosL").h)},ke5e:function(l,i,n){