(window.webpackJsonp=window.webpackJsonp||[]).push([[10],{"2w3n":function(n){n.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(n){n.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(n,l,i){"use strict";(function(n){var e=i("4fSx"),t=i.n(e);l.a=function(l){return n("abbr",{class:t.a.max,title:"In problemi in cui il primale è di massimizzazione."},l.children?l.children:"max")}}).call(this,i("hosL").h)},RtuP:function(n,l,i){"use strict";(function(n){var e=i("4fSx"),t=i.n(e);l.a=function(l){return n("abbr",{class:t.a.finite,title:"I punti del poliedro sono finiti."},l.children?l.children:"finito")}}).call(this,i("hosL").h)},Th1s:function(n,l,i){"use strict";(function(n){var e=i("4fSx"),t=i.n(e);l.a=function(l){return n("abbr",{class:t.a.unfeasible,title:"Il poliedro non contiene punti."},l.children?l.children:"vuoto")}}).call(this,i("hosL").h)},ZHMS:function(n,l,i){"use strict";(function(n){var e=i("gJgL"),t=i.n(e);l.a=function(l){return n("span",{class:t.a.minus},l.children)}}).call(this,i("hosL").h)},dIxp:function(n,l,i){"use strict";(function(n){var e=i("4fSx"),t=i.n(e);l.a=function(l){return n("abbr",{class:t.a.unbounded,title:"I punti del poliedro sono infiniti."},l.children?l.children:"illimitato")}}).call(this,i("hosL").h)},fWbf:function(n,l,i){"use strict";(function(n){var e=i("4fSx"),t=i.n(e);l.a=function(l){return n("abbr",{class:t.a.min,title:"In problemi in cui il primale è di minimizzazione."},l.children?l.children:"min")}}).call(this,i("hosL").h)},gJgL:function(n){n.exports={red:"red__3phX0",orange:"orange__1OSkI",yellow:"yellow__2pQOr",lime:"lime__3vRUg",cyan:"cyan__1cBtG",blue:"blue__1G1wb",magenta:"magenta__3Wagv",minus:"minus__2qLyv"}},hasd:function(n,l,i){"use strict";i.r(l),function(n){function e(){var n=pl(["n cdot (n - 1)"],["n \\cdot (n - 1)"]);return e=function(){return n},n}function t(){var n=pl(["E"]);return t=function(){return n},n}function a(){var n=pl(["N"]);return a=function(){return n},n}function u(){var n=pl(["-\frac{1}{5}"],["-\\frac{1}{5}"]);return u=function(){return n},n}function o(){var n=pl(["1"]);return o=function(){return n},n}function r(){var n=pl(["0"]);return r=function(){return n},n}function c(){var n=pl(["0"]);return c=function(){return n},n}function f(){var n=pl(["-\frac{1}{2}"],["-\\frac{1}{2}"]);return f=function(){return n},n}function s(){var n=pl(["-\frac{1}{2}"],["-\\frac{1}{2}"]);return s=function(){return n},n}function d(){var n=pl(["\frac{6}{5}"],["\\frac{6}{5}"]);return d=function(){return n},n}function b(){var n=pl(["0"]);return b=function(){return n},n}function m(){var n=pl(["1"]);return m=function(){return n},n}function p(){var n=pl(["0"]);return p=function(){return n},n}function h(){var n=pl(["\frac{1}{2}"],["\\frac{1}{2}"]);return h=function(){return n},n}function v(){var n=pl(["\frac{3}{2}"],["\\frac{3}{2}"]);return v=function(){return n},n}function g(){var n=pl(["3"]);return g=function(){return n},n}function _(){var n=pl(["0"]);return _=function(){return n},n}function q(){var n=pl(["0"]);return q=function(){return n},n}function z(){var n=pl(["1"]);return z=function(){return n},n}function x(){var n=pl(["0"]);return x=function(){return n},n}function j(){var n=pl(["1"]);return j=function(){return n},n}function T(){var n=pl(["0"]);return T=function(){return n},n}function S(){var n=pl(["0"]);return S=function(){return n},n}function y(){var n=pl(["0"]);return y=function(){return n},n}function A(){var n=pl(["0"]);return A=function(){return n},n}function I(){var n=pl(["1"]);return I=function(){return n},n}function k(){var n=pl(["1"]);return k=function(){return n},n}function P(){var n=pl(["s_3"]);return P=function(){return n},n}function L(){var n=pl(["s_2"]);return L=function(){return n},n}function V(){var n=pl(["s_1"]);return V=function(){return n},n}function w(){var n=pl(["x_2"]);return w=function(){return n},n}function C(){var n=pl(["x_1"]);return C=function(){return n},n}function F(){var n=pl(["\frac{6}{5}"],["\\frac{6}{5}"]);return F=function(){return n},n}function U(){var n=pl(["1"]);return U=function(){return n},n}function O(){var n=pl(["0"]);return O=function(){return n},n}function D(){var n=pl(["\frac{1}{2}"],["\\frac{1}{2}"]);return D=function(){return n},n}function R(){var n=pl(["\frac{3}{2}"],["\\frac{3}{2}"]);return R=function(){return n},n}function G(){var n=pl(["3"]);return G=function(){return n},n}function E(){var n=pl(["0"]);return E=function(){return n},n}function B(){var n=pl(["1"]);return B=function(){return n},n}function J(){var n=pl(["0"]);return J=function(){return n},n}function M(){var n=pl(["1"]);return M=function(){return n},n}function N(){var n=pl(["0"]);return N=function(){return n},n}function Z(){var n=pl(["0"]);return Z=function(){return n},n}function X(){var n=pl(["0"]);return X=function(){return n},n}function H(){var n=pl(["1"]);return H=function(){return n},n}function W(){var n=pl(["1"]);return W=function(){return n},n}function Q(){var n=pl(["s_2"]);return Q=function(){return n},n}function K(){var n=pl(["s_1"]);return K=function(){return n},n}function Y(){var n=pl(["x_2"]);return Y=function(){return n},n}function $(){var n=pl(["x_1"]);return $=function(){return n},n}function nn(){var n=pl(["\n sum_{j in F} left( left( a_{tj} - lfloor a_{tj} \rfloor \right) cdot x_j \right) geq (b_t - lfloor b_t \rfloor)\n "],["\n \\sum_{j \\in F} \\left( \\left( a_{tj} - \\lfloor a_{tj} \\rfloor \\right) \\cdot x_j \\right) \\geq (b_t - \\lfloor b_t \\rfloor)\n "]);return nn=function(){return n},n}function ln(){var n=pl(["\n mathbf{x} in mathbb{Z}^n\n "],["\n \\mathbf{x} \\in \\mathbb{Z}^n\n "]);return ln=function(){return n},n}function en(){var n=pl(["c_i"]);return en=function(){return n},n}function tn(){var n=pl(["b_i"]);return tn=function(){return n},n}function an(){var n=pl(["mathbf{u}^T left( mathbf{A} mathbf{x} - mathbf{b} \right) = 0"],["\\mathbf{u}^T \\left( \\mathbf{A} \\mathbf{x} - \\mathbf{b} \\right) = 0"]);return an=function(){return n},n}function un(){var n=pl(["left( mathbf{c}^T - mathbf{u}^T mathbf{A} \right) mathbf{x} = 0"],["\\left( \\mathbf{c}^T - \\mathbf{u}^T \\mathbf{A} \\right) \\mathbf{x} = 0"]);return un=function(){return n},n}function on(){var n=pl(["mathbf{c}^T mathbf{x} = mathbf{u}^T mathbf{b}"],["\\mathbf{c}^T \\mathbf{x} = \\mathbf{u}^T \\mathbf{b}"]);return on=function(){return n},n}function rn(){var n=pl(["mathbf{u}^T mathbf{A} leq mathbf{c}^T, quad mathbf{u} geq 0"],["\\mathbf{u}^T \\mathbf{A} \\leq \\mathbf{c}^T, \\quad \\mathbf{u} \\geq 0"]);return rn=function(){return n},n}function cn(){var n=pl(["mathbf{A} mathbf{X} geq mathbf{b}, quad mathbf{x} geq 0"],["\\mathbf{A} \\mathbf{X} \\geq \\mathbf{b}, \\quad \\mathbf{x} \\geq 0"]);return cn=function(){return n},n}function fn(){var n=pl(["mathbf{c}^T mathbf{x} = mathbf{u}^T mathbf{b}"],["\\mathbf{c}^T \\mathbf{x} = \\mathbf{u}^T \\mathbf{b}"]);return fn=function(){return n},n}function sn(){var n=pl(["c_0 leq mathbf{u}^T mathbf{b}"],["c_0 \\leq \\mathbf{u}^T \\mathbf{b}"]);return sn=function(){return n},n}function dn(){var n=pl(["mathbf{c}^T geq mathbf{u}^T mathbf{A}"],["\\mathbf{c}^T \\geq \\mathbf{u}^T \\mathbf{A}"]);return dn=function(){return n},n}function bn(){var n=pl(["u in mathfrak{R}^m"],["u \\in \\mathfrak{R}^m"]);return bn=function(){return n},n}function mn(){var n=pl(["c_0 leq mathbf{c}^T mathbf{x}"],["c_0 \\leq \\mathbf{c}^T \\mathbf{x}"]);return mn=function(){return n},n}function pn(){var n=pl(["u_n"]);return pn=function(){return n},n}function hn(){var n=pl(["x_n"]);return hn=function(){return n},n}function vn(){var n=pl(["\n \begin{cases}\n z = 3 x_1 + 5 x_2 + u_1 ( 12 - 2 x_1 - 3 x_2 ) + u_2 ( 3 + x_1 - 3 x_2 )\\\n x_1 geq 0\\\n x_2 geq 0\n end{cases}\n "],["\n \\begin{cases}\n z = 3 x_1 + 5 x_2 + u_1 ( 12 - 2 x_1 - 3 x_2 ) + u_2 ( 3 + x_1 - 3 x_2 )\\\\\n x_1 \\geq 0\\\\\n x_2 \\geq 0\n \\end{cases}\n "]);return vn=function(){return n},n}function gn(){var n=pl(["\n \begin{cases}\n z = 3 x_1 + 5 x_2\\\n 2 x_1 + 3 x_2 geq 12\\\n - x_1 + 3 x_2 geq 3\\\n x_1 geq 0\\\n x_2 geq 0\n end{cases}\n "],["\n \\begin{cases}\n z = 3 x_1 + 5 x_2\\\\\n 2 x_1 + 3 x_2 \\geq 12\\\\\n - x_1 + 3 x_2 \\geq 3\\\\\n x_1 \\geq 0\\\\\n x_2 \\geq 0\n \\end{cases}\n "]);return gn=function(){return n},n}function _n(){var n=pl(["mathbf{u}"],["\\mathbf{u}"]);return _n=function(){return n},n}function qn(){var n=pl(["mathbf{y}"],["\\mathbf{y}"]);return qn=function(){return n},n}function zn(){var n=pl(["\frac{termine noto}{coeff. variabile entrante}"],["\\frac{termine\\ noto}{coeff.\\ variabile\\ entrante}"]);return zn=function(){return n},n}function xn(){var n=pl(["\n \begin{cases}\n 2000x_1 + 1000x_2 = z\\\n 1x_1 leq 3\\\n 1x_2 leq 3\\\n 2x_1 + 2x_2 leq 7\n end{cases}\n "],["\n \\begin{cases}\n 2000x_1 + 1000x_2 = z\\\\\n 1x_1 \\leq 3\\\\\n 1x_2 \\leq 3\\\\\n 2x_1 + 2x_2 \\leq 7\n \\end{cases}\n "]);return xn=function(){return n},n}function jn(){var n=pl(["\begin{cases}\n a = a^+ - a^-\\\n a^+ geq 0\\\n a^- geq 0\n end{cases}"],["\\begin{cases}\n a = a^+ - a^-\\\\\n a^+ \\geq 0\\\\\n a^- \\geq 0\n \\end{cases}"]);return jn=function(){return n},n}function Tn(){var n=pl(["\n a geq b Leftrightarrow a - s = b\n "],["\n a \\geq b \\Leftrightarrow a - s = b\n "]);return Tn=function(){return n},n}function Sn(){var n=pl(["\n a leq b Leftrightarrow a + s = b\n "],["\n a \\leq b \\Leftrightarrow a + s = b\n "]);return Sn=function(){return n},n}function yn(){var n=pl(["s"]);return yn=function(){return n},n}function An(){var n=pl(["a = b Leftrightarrow\n \begin{cases}\n a leq b\\\n a geq b\n end{cases}\n "],["a = b \\Leftrightarrow\n \\begin{cases}\n a \\leq b\\\\\n a \\geq b\n \\end{cases}\n "]);return An=function(){return n},n}function In(){var n=pl(["min left{ mathbf{c}^T mathbf{x} : mathbf{A} mathbf{x} = b,quad x_j geq 0,quad j = 1 dots n \right}"],["min \\left\\{ \\mathbf{c}^T \\mathbf{x} : \\mathbf{A} \\mathbf{x} = b,\\quad x_j \\geq 0,\\quad j = 1 \\dots n \\right\\}"]);return In=function(){return n},n}function kn(){var n=pl(["min left{ mathbf{c}^T mathbf{x} : mathbf{A} mathbf{x} geq b,quad x_j geq 0,quad j = 1 dots n \right}"],["min \\left\\{ \\mathbf{c}^T \\mathbf{x} : \\mathbf{A} \\mathbf{x} \\geq b,\\quad x_j \\geq 0,\\quad j = 1 \\dots n \\right\\}"]);return kn=function(){return n},n}function Pn(){var n=pl(["min left{ mathbf{c}^T mathbf{x} : mathbf{A} mathbf{x} = b,quad mathbf{A'} mathbf{x} geq mathbf{b'} quad x_j geq 0,quad j = 1 dots n \right}"],["min \\left\\{ \\mathbf{c}^T \\mathbf{x} : \\mathbf{A} \\mathbf{x} = b,\\quad \\mathbf{A'} \\mathbf{x} \\geq \\mathbf{b'} \\quad x_j \\geq 0,\\quad j = 1 \\dots n \\right\\}"]);return Pn=function(){return n},n}function Ln(){var n=pl(["mathbf{c}^T mathbf{x}"],["\\mathbf{c}^T \\mathbf{x}"]);return Ln=function(){return n},n}function Vn(){var n=pl(["mathbf{b}"],["\\mathbf{b}"]);return Vn=function(){return n},n}function wn(){var n=pl(["mathbf{A}"],["\\mathbf{A}"]);return wn=function(){return n},n}function Cn(){var n=pl(["\nabla z = (2, 3, 4)"],["\\nabla z = (2, 3, 4)"]);return Cn=function(){return n},n}function Fn(){var n=pl(["mathbf{I}"],["\\mathbf{I}"]);return Fn=function(){return n},n}function Un(){var n=pl(["\nabla (f) = \frac{d f}{d x_1} I_1 + \frac{d f}{d x_2} I_2 + \frac{d f}{d x_n} I_n"],["\\nabla (f) = \\frac{d f}{d x_1} I_1 + \\frac{d f}{d x_2} I_2 + \\frac{d f}{d x_n} I_n"]);return Un=function(){return n},n}function On(){var n=pl(["z(mathbf{x}) = c_1 cdot x_1 + c_2 cdot x_2 + dots + c_n cdot x_n"],["z(\\mathbf{x}) = c_1 \\cdot x_1 + c_2 \\cdot x_2 + \\dots + c_n \\cdot x_n"]);return On=function(){return n},n}function Dn(){var n=pl(["mathbf{x}"],["\\mathbf{x}"]);return Dn=function(){return n},n}function Rn(){var n=pl(["mathbf{c}"],["\\mathbf{c}"]);return Rn=function(){return n},n}function Gn(){var n=pl(["x - lfloor x \rfloor"],["x - \\lfloor x \\rfloor"]);return Gn=function(){return n},n}function En(){var n=pl(["lceil x \rceil"],["\\lceil x \\rceil"]);return En=function(){return n},n}function Bn(){var n=pl(["lfloor x \rfloor"],["\\lfloor x \\rfloor"]);return Bn=function(){return n},n}function Jn(){var n=pl(["mathbf{u}^T mathbf{A} = mathbf{c}^T"],["\\mathbf{u}^T \\mathbf{A} = \\mathbf{c}^T"]);return Jn=function(){return n},n}function Mn(){var n=pl(["mathbf{u}^T mathbf{b}"],["\\mathbf{u}^T \\mathbf{b}"]);return Mn=function(){return n},n}function Nn(){var n=pl(["z(dots)"],["z(\\dots)"]);return Nn=function(){return n},n}function Zn(){var n=pl(["mathbf{A} mathbf{x} = mathbf{b}"],["\\mathbf{A} \\mathbf{x} = \\mathbf{b}"]);return Zn=function(){return n},n}function Xn(){var n=pl(["mathbf{c}^T mathbf{x}"],["\\mathbf{c}^T \\mathbf{x}"]);return Xn=function(){return n},n}function Hn(){var n=pl(["mathbf{F}"],["\\mathbf{F}"]);return Hn=function(){return n},n}function Wn(){var n=pl(["mathbf{c}_F"],["\\mathbf{c}_F"]);return Wn=function(){return n},n}function Qn(){var n=pl(["mathbf{x}_F"],["\\mathbf{x}_F"]);return Qn=function(){return n},n}function Kn(){var n=pl(["mathbf{B}"],["\\mathbf{B}"]);return Kn=function(){return n},n}function Yn(){var n=pl(["mathbf{c}_B"],["\\mathbf{c}_B"]);return Yn=function(){return n},n}function $n(){var n=pl(["mathbf{x}_B"],["\\mathbf{x}_B"]);return $n=function(){return n},n}function nl(){var n=pl(["c_0"]);return nl=function(){return n},n}function ll(){var n=pl(["u_i"]);return ll=function(){return n},n}function il(){var n=pl(["mathbf{u}"],["\\mathbf{u}"]);return il=function(){return n},n}function el(){var n=pl(["y_i"]);return el=function(){return n},n}function tl(){var n=pl(["mathbf{y}"],["\\mathbf{y}"]);return tl=function(){return n},n}function al(){var n=pl(["b_i"]);return al=function(){return n},n}function ul(){var n=pl(["mathbf{b}"],["\\mathbf{b}"]);return ul=function(){return n},n}function ol(){var n=pl(["a_{ij}"]);return ol=function(){return n},n}function rl(){var n=pl(["mathbf{A}"],["\\mathbf{A}"]);return rl=function(){return n},n}function cl(){var n=pl(["c_i"]);return cl=function(){return n},n}function fl(){var n=pl(["mathbf{c}"],["\\mathbf{c}"]);return fl=function(){return n},n}function sl(){var n=pl(["s_i"]);return sl=function(){return n},n}function dl(){var n=pl(["mathbf{s}"],["\\mathbf{s}"]);return dl=function(){return n},n}function bl(){var n=pl(["x_i"]);return bl=function(){return n},n}function ml(){var n=pl(["mathbf{x}"],["\\mathbf{x}"]);return ml=function(){return n},n}function pl(n,l){return l||(l=n.slice(0)),n.raw=l,n}var hl=i("mbOI"),vl=i("ke5e"),gl=i("Th1s"),_l=i("dIxp"),ql=i("RtuP"),zl=i("fWbf"),xl=i("RPi6"),jl=i("o8Jj"),Tl=i("ZHMS"),Sl=i("mGtH"),yl=String.raw;l.default=function(){return n("div",null,n("h1",null,"Ottimizzazione lineare intera"),n(hl.r,{title:"Informazioni"},n(hl.q,{title:"Contatti"},n("ul",null,n("li",null,n("a",{href:"mailto:stefano.novellani@unimore.it"},"Prof. Stefano Novellani")))),n(hl.q,{title:"Archivio"},n("p",null,"Se sei uno ",n("b",null,"studente dell'Unimore"),", puoi accedere all'",n("b",null,n("a",{href:"https://drive.google.com/drive/folders/13q-E6LvXca9uo3sATMZxrhJClqMB0wJu"},"archivio del corso su Google Drive")),"."))),n(hl.r,{title:"Esame"},n(hl.q,{title:"Scritto"},n("p",null,"Uno scritto con tre domande:"),n("ul",null,n("li",null,"Progettazione concettuale e logica"),n("li",null,"Formulazione interrogazione"),n("li",null,"Una domanda tra:",n("ul",null,n("li",null,"Studio dato derivato"),n("li",null,"Progettazione fisica"),n("li",null,"Tecnologia database"))))),n(hl.q,{title:"Appelli"},n("ol",null,n("li",null,n(hl.t,{to:"2020-06-08 09:00"})),n("li",null,n(hl.t,{to:"2020-06-25 09:00"})),n("li",null,n(hl.t,{to:"2020-07-16 09:00"}))))),n(hl.l.Provider,{value:!1},n(hl.r,{title:"Glossario"},n(hl.s,null,n("thead",null,n("tr",null,n("th",null,n("abbr",{title:"Vettore / matrice"},"v")),n("th",null,n("abbr",{title:"Elemento singolo"},"s")),n("th",null,"Significato"))),n("tbody",null,n("tr",null,n("td",null,n(hl.j,null,yl(ml()))),n("td",null,n(hl.j,null,yl(bl()))),n("td",null,"Incognite")),n("tr",null,n("td",null,n(hl.j,null,yl(dl()))),n("td",null,n(hl.j,null,yl(sl()))),n("td",null,"Variabili slack")),n("tr",null,n("td",null,n(hl.j,null,yl(fl()))),n("td",null,n(hl.j,null,yl(cl()))),n("td",null,"Coefficienti della funzione obiettivo")),n("tr",null,n("td",null,n(hl.j,null,yl(rl()))),n("td",null,n(hl.j,null,yl(ol()))),n("td",null,"Coefficienti dei vincoli")),n("tr",null,n("td",null,n(hl.j,null,yl(ul()))),n("td",null,n(hl.j,null,yl(al()))),n("td",null,"Termini noti dei vincoli")),n("tr",null,n("td",null,n(hl.j,null,yl(tl()))),n("td",null,n(hl.j,null,yl(el()))),n("td",null,"Incognite artificiali")),n("tr",null,n("td",null,n(hl.j,null,yl(il()))),n("td",null,n(hl.j,null,yl(ll()))),n("td",null,"Coefficienti di rilassamento")),n("tr",null,n("td",null),n("td",null,n(hl.j,null,yl(nl()))),n("td",null,"Valore ottimo di un problema")),n("tr",null,n("td",null,n(hl.j,null,yl($n()))),n("td",null),n("td",null,"Incognite in base")),n("tr",null,n("td",null,n(hl.j,null,yl(Yn()))),n("td",null),n("td",null,"Coefficienti della funzione obiettivo delle variabili in base")),n("tr",null,n("td",null,n(hl.j,null,yl(Kn()))),n("td",null),n("td",null,"Coefficienti dei vincoli delle variabili in base")),n("tr",null,n("td",null,n(hl.j,null,yl(Qn()))),n("td",null),n("td",null,"Incognite fuori base")),n("tr",null,n("td",null,n(hl.j,null,yl(Wn()))),n("td",null),n("td",null,"Coefficienti della funzione obiettivo delle variabili fuori base")),n("tr",null,n("td",null,n(hl.j,null,yl(Hn()))),n("td",null),n("td",null,"Coefficienti dei vincoli delle variabili fuori base")))),n(hl.s,null,n("thead",null,n("tr",null,n("th",null,"Simboli"),n("th",null,"Significato"))),n("tbody",null,n("tr",null,n("td",null,n(hl.j,null,yl(Xn()))),n("td",null,"Soluzione del problema")),n("tr",null,n("td",null,n(hl.j,null,yl(Zn()))),n("td",null,"Vincoli in forma standard")),n("tr",null,n("td",null,n(hl.j,null,yl(Nn()))),n("td",null,"Funzione obiettivo")),n("tr",null,n("td",null,n(hl.j,null,yl(Mn()))),n("td",null,"Soluzione del problema duale")),n("tr",null,n("td",null,n(hl.j,null,yl(Jn()))),n("td",null,"Vincoli del problema duale in forma standard")),n("tr",null,n("td",null,n(hl.j,null,yl(Bn()))),n("td",null,"Arrotondamento per difetto di x")),n("tr",null,n("td",null,n(hl.j,null,yl(En()))),n("td",null,"Arrotondamento per eccesso di x")),n("tr",null,n("td",null,n(hl.j,null,yl(Gn()))),n("td",null,"Parte frazionaria di x (se non è negativo)")))))),n(hl.r,{title:"Problemi di ottimizzazione lineare"},n(hl.q,{title:"Cosa sono?"},n("p",null,"Problemi che cercano di ",n(zl.a,null,"minimizzare"),"/",n(xl.a,null,"massimizzare")," il valore di una ",n("i",null,"funzione obiettivo")," le cui incognite sono sottoposte a un ",n("b",null,"sistema di ",n("i",null,"vincoli")),"."),n("p",null,"Spesso sono detti anche ",n("i",null,"problemi di ",n("abbr",{title:"Linear Programming"},"LP")),".")),n(hl.q,{title:"Funzione obiettivo"},n("p",null,"La funzione da ",n(zl.a,null,"minimizzare"),"/",n(xl.a,null,"massimizzare"),"."),n("p",null,"Il vettore dei suoi coefficienti è detto ",n(hl.j,null,yl(Rn())),", mentre quello delle sue incognite ",n(hl.j,null,yl(Dn())),"."),n("p",null,"In genere, la funzione obiettivo è scritta in questa forma:"),n("p",null,n(hl.j,null,yl(On())))),n(hl.q,{title:"Gradiente"},n("p",null,n("b",null,"Funzione")," della funzione obiettivo che restituisce la direzione del suo aumento più veloce."),n("p",null,n(hl.j,null,yl(Un()))),n(vl.a,null,"La matrice ",n(hl.j,null,yl(Fn()))," è la matrice identità."),n(vl.a,null,"Se la funzione obiettivo è ",n(hl.j,null,"z = 2w + 3x + 4y"),", il suo gradiente è ",n(hl.j,null,yl(Cn())),".")),n(hl.q,{title:"Vincoli"},n("p",null,"Equazioni e disequazioni a cui devono sottostare le incognite perchè esse formino una soluzione valida."),n("p",null,"I loro coefficienti sono contenuti nella matrice ",n(hl.j,null,yl(wn())),", mentre i loro termini noti nel vettore ",n(hl.j,null,yl(Vn())),".")),n(hl.q,{title:"Poliedro"},n("p",null,"L'",n("b",null,"insieme")," che racchiunde tutte le ",n("b",null,"soluzioni ammissibili")," di un problema."),n("p",null,"Può essere ",n("i",null,n(ql.a,null)),", ",n("i",null,n(gl.a,null))," oppure ",n("i",null,n(_l.a,null)),"."),n(vl.a,null,"Si chiama così perchè se si disegna su un piano cartesiano, esso forma una figura geometrica a più lati, ovvero un ",n("a",{href:"https://it.wikipedia.org/wiki/Poliedro"},"poliedro"),".")),n(hl.q,{title:"Valore ottimo"},n("p",null,"La ",n("b",null,"soluzione")," di un problema, ricavabile dal prodotto ",n(hl.j,null,yl(Ln())),"."),n("p",null,"In particolare, il valore ottimo è un ",n("b",null,"vertice")," del poliedro, detto ",n("i",null,"vertice ottimo"),"."))),n(hl.r,{title:"Forme di un problema di ottimizzazione"},n(hl.q,{title:"Forma generale"},n("p",null,"Un problema con:"),n("ul",null,n("li",null,n(jl.a,null,"Equazioni e disequazioni")),n("li",null,n(jl.a,null,"Variabili non vincolate"))),n(hl.p,null,yl(Pn()))),n(hl.q,{title:"Forma canonica"},n("p",null,"Un problema con:"),n("ul",null,n("li",null,n(jl.a,null,"Solo disequazioni")),n("li",null,n(Tl.a,null,"Vincoli di non-negatività sulle incognite"))),n(hl.p,null,yl(kn()))),n(hl.q,{title:"Forma standard"},n("p",null,"Un problema con:"),n("ul",null,n("li",null,n(Tl.a,null,"Solo equazioni")),n("li",null,n(Tl.a,null,"Vincoli di non-negatività sulle incognite"))),n(hl.p,null,yl(In())))),n(hl.r,{title:"Conversioni tra le forme"},n(hl.q,{title:"Standard e generale"},n("p",null,"Applica questa conversione a ogni equazione nel sistema:"),n("p",null,n(hl.j,{inline:!1},yl(An()))),n(vl.a,null,"Serve solo nella teoria per dimostrare che le forme sono equivalenti.")),n(hl.q,{title:"Canonica e standard"},n("p",null,"Aggiungi una ",n("i",null,"variabile slack")," ",n(hl.j,null,yl(yn()))," ",n("b",null,"non-vincolata")," a ogni disequazione nel sistema:"),n("p",null,n(hl.j,{inline:!1},yl(Sn()))),n("p",null,n(hl.j,{inline:!1},yl(Tn())))),n(hl.q,{title:"Generale e canonica"},n("p",null,"Sdoppia ogni variabile non-vincolata in due variabili con vincolo di non-negatività:"),n("p",null,n(hl.j,{inline:!1},yl(jn()))))),n(hl.r,null,"Valore attuale"),n(hl.r,{title:"Tableau"},n(hl.q,{title:"Cos'è?"},n("p",null,"Un modo per rappresentare sistemi in forma standard, anche noto come ",n("b",null,"matrice equivalente completa")," del sistema.")),n(hl.q,{title:"Trasformazioni"},n("p",null,"Un tableau è un sistema di equazioni in ",n("b",null,"forma matriciale completa"),"."),n("p",null,"È possibile effettuare senza che cambi il risultato finale le seguenti trasformazioni:"),n("ul",null,n("li",null,n("b",null,"Moltiplicare")," un'intera riga per una costante."),n("li",null,n("b",null,"Sommare")," una riga a un'altra")),n(vl.a,null,"Suona familiare? Sì, lo abbiamo fatto anche in Algebra Lineare.")),n(hl.q,{title:"Variabili nella base"},n("p",null,"Variabili che hanno ",n("b",null,"tutti 0 e un solo 1")," nella loro colonna del tableau."),n("p",null,"La loro controparte sono le ",n("i",null,"variabili fuori base"),", che hanno qualsiasi altro valore.")),n(hl.q,{title:"Valore attuale"},n("p",null,"Il valore della funzione obiettivo che si otterrebbe se ",n("b",null,"tutte le variabili fuori base valessero 0"),"."),n("p",null,"Procedendo nella risoluzione (descritta in seguito) del tableau, questo valore aumenterà, fino a raggiungere il valore ottimo quando la risoluzione sarà completata."))),n(hl.r,null,n(hl.q,{color:Sl.a,title:"Un esempio"},n("p",null,"Il sistema:"),n(hl.p,null,yl(xn())),n("p",null,"Diventa il tableau:"),n("table",{className:"right"},n("thead",null,n("tr",null,n("th",null,n(hl.j,null,"x_1")),n("th",null,n(hl.j,null,"x_2")),n("th",null,n(hl.j,null,"s_1")),n("th",null,n(hl.j,null,"s_2")),n("th",null,n(hl.j,null,"s_3")),n("th",null,n("abbr",{title:"Termine noto"},"TN")))),n("tbody",null,n("tr",null,n("td",null,n(hl.j,null,"1")),n("td",null,n(hl.j,null,"0")),n("td",{style:"background-color: rgba(0, 0, 255, 0.1);"},n(hl.j,null,"1")),n("td",{style:"background-color: rgba(0, 0, 255, 0.1);"},n(hl.j,null,"0")),n("td",{style:"background-color: rgba(0, 0, 255, 0.1);"},n(hl.j,null,"0")),n("td",{style:"background-color: rgba(255, 0, 0, 0.1);"},n(hl.j,null,"3"))),n("tr",null,n("td",null,n(hl.j,null,"0")),n("td",null,n(hl.j,null,"1")),n("td",{style:"background-color: rgba(0, 0, 255, 0.1);"},n(hl.j,null,"0")),n("td",{style:"background-color: rgba(0, 0, 255, 0.1);"},n(hl.j,null,"1")),n("td",{style:"background-color: rgba(0, 0, 255, 0.1);"},n(hl.j,null,"0")),n("td",{style:"background-color: rgba(255, 0, 0, 0.1);"},n(hl.j,null,"3"))),n("tr",null,n("td",null,n(hl.j,null,"2")),n("td",null,n(hl.j,null,"2")),n("td",{style:"background-color: rgba(0, 0, 255, 0.1);"},n(hl.j,null,"0")),n("td",{style:"background-color: rgba(0, 0, 255, 0.1);"},n(hl.j,null,"0")),n("td",{style:"background-color: rgba(0, 0, 255, 0.1);"},n(hl.j,null,"1")),n("td",{style:"background-color: rgba(255, 0, 0, 0.1);"},n(hl.j,null,"7"))),n("tr",{style:"background-color: rgba(0, 255, 0, 0.1);"},n("td",null,n(hl.j,null,"2000")),n("td",null,n(hl.j,null,"1000")),n("td",null,n(hl.j,null,"0")),n("td",null,n(hl.j,null,"0")),n("td",null,n(hl.j,null,"0")),n("td",{style:"background-color: rgba(255, 255, 0, 0.2);"},n(hl.j,null,"0"))))),n("ul",null,n("li",null,n("u",{style:"color: #7dff7d;"},"Verde"),": funzione obiettivo"),n("li",null,n("u",{style:"color: #ffff7d;"},"Giallo"),": valore attuale della funzione"),n("li",null,n("u",{style:"color: #ff7d7d;"},"Rosso"),": termini noti"),n("li",null,n("u",{style:"color: #7d7dff;"},"Blu"),": Variabili slack")))),n(hl.r,{title:"Simplex primale"},n(hl.q,{title:"Cos'è?"},n("p",null,"Un algoritmo per trovare efficientemente il ",n("b",null,"valore ottimo")," e le coordinate di un ",n("b",null,"vertice ottimo")," in problemi di ottimizzazione lineare."),n(vl.a,null,"Ricordi ",n(hl.b,{href:"/vldigeometria"},"Gauss-Jordan"),"? Il Simplex è la stessa cosa, aggiungendo criteri per la selezione del pivot."),n(vl.a,{title:"Esempio"},n("a",{href:"https://i.imgur.com/1r405Mb.jpg"},"Questa")," è la soluzione passo per passo del problema 3 del file ",n("a",{href:"https://dolly.fim.unimore.it/2019/mod/resource/view.php?id=2716"},n("code",null,"Ex_LP_testo")),"."),n("p",null,"Perchè sia possibile effettuare il Simplex è necessario che l'",n("b",null,"origine sia nel poliedro"),": pertanto, ",n("b",null,"non")," è possibile che un problema risolto con il Simplex sia ",n(gl.a,null),".")),n(hl.q,{title:"I passi"},n("ol",null,n("li",null,"Trasforma il sistema in ",n("b",null,"forma standard"),"."),n("li",null,"Trova tante variabili ",n("b",null,"linearmente indipendenti")," quante siano le righe: esse saranno la ",n("i",null,"base iniziale"),"."),n("li",null,"Finchè ci sono variabili con coefficienti ",n(zl.a,null,"positivi"),"/",n(xl.a,null,"negativi")," nella funzione obiettivo:",n("ol",null,n("li",null,n("b",null,"Scegli")," la prima variabile fuori base con coefficiente ",n(zl.a,null,"positivo"),"/",n(xl.a,null,"negativo")," nella funzione obiettivo: essa è la ",n("i",null,"variabile entrante"),".",n("br",null),n("aside",null,n("u",null,"Regola di Bland"),": Si potrebbe scegliere qualsiasi variabile come entrante, ma scegliendo sempre la prima ammissibile ci si assicura che l'algoritmo termini.")),n("li",null,n("b",null,"Scegli")," la variabile in base con il minor rapporto positivo ",n(hl.j,null,yl(zn())),".",n("aside",null,"Se non sei riuscito a trovare nessuna variabile con un rapporto positivo, significa che il poliedro è ",n(_l.a,null),".")),n("li",null,n("u",null,"Pivot"),": ",n("b",null,"trasforma")," tutte le funzioni del sistema in modo che abbiano 0 nella colonna della variabile entrante, tranne nella riga della variabile uscente, in cui avrà 1."))),n("li",null,"Il poliedro è ",n(ql.a,null),": i ",n("b",null,"termini noti dei vincoli")," sono le coordinate del suo vertice ottimo, mentre il ",n("b",null,"termine noto della funzione obiettivo")," è il valore ottimo."))),n(hl.q,{title:"Soluzioni di base degenerata"},n("p",null,"Una soluzione con almeno una variabile di valore ",n(hl.j,null,"0"),", dovuta a uno o più ",n("b",null,"vincoli ridondanti"),"."),n("p",null,"Senza ",n("b",null,"Regola di Bland")," e in presenza di vincoli ridondanti si rischia di trovarsi a fare pivot infiniti."))),n(hl.r,{title:"Metodo delle due fasi"},n(hl.q,{title:"Metodo delle due fasi"},n("p",null,"Un ",n("b",null,"estensione del Simplex")," per permettere la risoluzione di problemi la cui ",n("b",null,"origine non è una soluzione ammissibile"),"."),n("p",null,"Prevede l'introduzione di un ",n("i",null,"problema ausiliario"),", le cui incognite sono dette ",n("i",null,"artificiali"),"."),n("p",null,"Il vettore delle incognite artificiali è solitamente chiamato ",n(hl.j,null,yl(qn())),".")),n(hl.q,{title:"Procedimento"},n("ol",null,n("li",null,"Crea un nuovo tableau, ",n("b",null,"aggiungendo variabili artificiali")," in modo da avere una base ammissibile."),n("li",null,"Sostituisci la vecchia funzione obiettivo con una nuova che ",n("b",null,"minimizzi la somma")," di tutte le variabili artificiali."),n("li",null,n("u",null,"Fase 1"),": ",n("b",null,"Risolvi")," il nuovo problema con il Simplex primale."),n("li",null,"Se il Simplex termina quando ci sono ancora ",n("b",null,"variabili artificiali nella base"),", allora il poliedro è ",n("b",null,n(gl.a,null)),"."),n("li",null,"Una volta che le variabili artificiali sono fuori base, ",n("b",null,"elimina")," le loro colonne e la nuova funzione obiettivo.",n("br",null)),n("li",null,"Riporta il tableau in forma base compiendo operazioni per ",n("b",null,"azzerare i coefficienti")," delle variabili di base nella funzione obiettivo."),n("li",null,n("u",null,"Fase 2"),": ",n("b",null,"Risolvi")," il tableau con il Simplex primale.")))),n(hl.r,{title:"Rilassamento"},n(hl.q,{title:"Cos'è?"},n("p",null,"Una versione semplificata di un problema nella quale si ",n("b",null,"ignora la violazione")," di uno o più vincoli.")),n(hl.q,{title:"Rilassamento di Lagrange"},n("p",null,"Un rilassamento che permette di misurare ",n("b",null,"di quanto i vincoli vengono violati"),"."),n("p",null,"I vincoli, moltiplicati per ",n("b",null,"coefficienti di rilassamento"),", vengono inseriti nella funzione obiettivo."),n("p",null,"Il vettore dei coefficienti di rilassamento solitamente è indicato con ",n(hl.j,null,yl(_n())),"."),n(vl.a,null,n("p",null,"Il sistema:"),n(hl.j,{inline:!1},yl(gn())),n("p",null,"diventa:"),n(hl.j,{inline:!1},yl(vn()))))),n(hl.r,{title:"Dualità"},n(hl.q,{title:"Duale"},n("p",null,"Il sistema che ",n("b",null,n(zl.a,null,"massimizza"),"/",n(xl.a,null,"minimizza")," i moltiplicatori di rilassamento")," di un problema detto ",n("i",null,"primale"),".")),n(hl.q,{title:"In termini matriciali"},n("p",null,"Possiamo ",n("b",null,"trasporre")," il tableau e sostituire le variabili ",n(hl.j,null,yl(hn()))," con variabili ",n(hl.j,null,yl(pn()))," per ottenere il sistema duale!"),n("p",null,"I maggiori e minori dei vincoli diventeranno maggiori e minori delle variabili e viceversa.")),n(hl.q,{title:"Feasibility del duale"},n("ul",null,n("li",null,"Se un problema ha una ",n("b",null,"soluzione finita"),", allora anche il suo duale la avrà."),n("li",null,"Se un problema è ",n("b",null,n(gl.a,null)),", allora il suo duale potrà essere ",n(gl.a,null)," oppure ",n(_l.a,null),"."),n("li",null,"Se un problema è ",n("b",null,n(_l.a,null)),", allora il suo duale sarà certamente ",n(gl.a,null),"."))),n(hl.q,{title:"Variabili e vincoli"},n("p",null,"Variabili e vincoli del duale corrispondono rispettivamente a vincoli e variabili del primale."),n("p",null,"In particolare:"),n("table",null,n("thead",null,n("tr",null,n("th",null,n(zl.a,null,"Min")),n("th",null,n(xl.a,null,"Max")))),n("tbody",null,n("tr",null,n("td",null,"Vincolo ",n(hl.h,null,"\\leq")),n("td",null,"Variabile ",n(hl.h,null,"\\leq"))),n("tr",null,n("td",null,"Vincolo ",n(hl.h,null,"\\geq")),n("td",null,"Variabile ",n(hl.h,null,"\\geq"))),n("tr",null,n("td",null,"Vincolo ",n(hl.h,null,"=")),n("td",null,"Variabile ",n("b",null,"libera"))),n("tr",null,n("td",null,"Variabile ",n(hl.h,null,"\\leq")),n("td",null,"Vincolo ",n(hl.h,null,"\\geq"))),n("tr",null,n("td",null,"Variabile ",n(hl.h,null,"\\geq")),n("td",null,"Vincolo ",n(hl.h,null,"\\leq"))),n("tr",null,n("td",null,"Variabile ",n("b",null,"libera")),n("td",null,"Vincolo ",n(hl.h,null,"="))))))),n(hl.r,{title:"Un po' di teoria"},n(hl.q,{title:"Lemma di Farkas"},n("p",null,"Una disuguaglianza lineare ",n(hl.j,null,yl(mn()))," è verificata da tutti i punti di un poliedro non-",n(gl.a,null)," se e solo se esiste un vettore ",n(hl.j,null,yl(bn()))," tale che:"),n(hl.p,null,yl(dn())),n(hl.p,null,yl(sn()))),n(hl.q,{title:"Dualità forte"},n("p",null,"Il teorema che dimostra l'equivalenza tra primale e duale."),n("p",null,"Se uno dei due problemi è finito, la soluzione di uno coincide con la soluzione dell'altro."),n("p",null,n(hl.j,null,yl(fn()))),n("p",null,n(hl.u,null,"TODO: Anche qui c'è una lunga dimostrazione..."))),n(hl.q,{title:"Dualità debole"},n("p",null,"Il teorema che dimostra che il valore della funzione obiettivo del duale (di un qualsiasi tableau) è sempre ",n(zl.a,null,"minore o uguale"),"/",n(xl.a,null,"maggiore o uguale")," alla soluzione del corrispettivo primale."),n("p",null,n(hl.u,null,"TODO: Dimostrazione cortina, ma sembra complicata."))),n(hl.q,{title:"Condizioni di ottimalità"},n("p",null,"Il teorema che ci permette di passare dalla soluzione del duale alla soluzione del primale. ",n(hl.u,null,"TODO: credo?")),n("p",null,"Si deriva combinando le seguenti condizioni:"),n("ul",null,n("li",null,"Ammissibilità del primale: ",n(hl.j,null,yl(cn()))),n("li",null,"Ammissibilità del duale: ",n(hl.j,null,yl(rn()))),n("li",null,"Teorema della dualità forte: ",n(hl.j,null,yl(on()))," (alla soluzione ottima)")),n("p",null,"Ne risulta che una soluzione è ottima se e solo se:"),n(hl.p,null,yl(un())),n(hl.p,null,yl(an())))),n(hl.r,{title:"Simplex duale"},n(hl.q,{title:"Cos'è?"},n("p",null,"Un'estensione al Simplex primale che opera sul problema duale.")),n(hl.q,{title:"Come funziona?"},n("p",null,"Funziona esattamente come il Simplex primale, ma opera sul duale."))),n(hl.r,{title:"Analisi di sensibilità"},n(hl.q,{title:"Cos'è?"},n("p",null,"Un procedimento che misura di ",n("b",null,"quanto può variare")," il termine noto di un vincolo ",n(hl.j,null,yl(tn()))," o il coefficiente della funzione obiettivo ",n(hl.j,null,yl(en()))," prima che la base degeneri."))),n(hl.r,{title:"Ottimizzazione lineare intera"},n(hl.q,{title:"Cos'è?"},n("p",null,"Particolari problemi di ottimizzazione lineare in cui le ",n("b",null,"variabili sono vincolate ad essere numeri interi"),"."),n(hl.p,null,yl(ln())),n("p",null,"Spesso detti anche ",n("i",null,"problemi di ",n("abbr",{title:"Integer Linear Programming"},"ILP")),".")),n(hl.q,{title:"Rilassamento lineare"},n("p",null,"Un rilassamento che rimuove il ",n("b",null,"vincolo di integrità")," a un problema, trovando la sua ",n("b",null,"soluzione continua"),"."))),n(hl.r,{title:"Dal rilassamento alla soluzione"},n(hl.q,{title:"Enumerazione totale"},n("p",null,"Un ",n("b",null,"modo")," per passare dalla soluzione del rilassamento alla soluzione intera di un problema di ILP."),n("p",null,"Consiste nel calcolare la soluzione di ogni singolo punto incluso nel poliedro, e selezionare la ",n(zl.a,null,"minore"),"/",n(xl.a,null,"maggiore"),"."),n("p",null,"Trova ",n("b",null,"sicuramente")," la soluzione giusta, ma il costo computazionale è esponenziale ",n(hl.h,null,"O(n^k)"),"!")),n(hl.q,{title:"Arrotondamento"},n("p",null,"Un altro ",n("b",null,"modo")," per passare dalla soluzione del rilassamento alla soluzione intera di un problema di ILP."),n("p",null,"Consiste nell'",n("b",null,"arrotondare tutte le variabili al loro valore intero più vicino"),", e calcolarne il valore ottimo."),n("p",null,"Funziona bene per valori grandi, ma più essi si avvicinano allo 0 più l'",n("b",null,"errore diventa grande"),".")),n(hl.q,{title:"Piani secanti"},n("p",null,"Un altro ",n("b",null,"modo")," ancora per passare dalla soluzione del rilassamento alla soluzione intera di un problema di ILP."),n("p",null,"Consiste nel tagliare il poliedro con nuovi vincoli (",n("i",null,"piani secanti"),") che ",n("b",null,"riducono le possibili soluzioni continue")," ma non quelle intere."),n("p",null,"Per selezionare i vincoli, si usano i ",n("b",null,"tagli di Gomory"),":"),n(hl.p,null,yl(nn())),n("p",null,"Per ogni valore noto frazionario si viene quindi a creare ",n("b",null,"una nuova variabile in base")," e un nuovo vincolo formato dall'opposto di tutti i valori frazionari dei coefficienti fuori base."),n(vl.a,null,n("p",null,"Il tableau:",n("table",null,n("thead",null,n("tr",null,n("th",null,n(hl.a,null,yl($()))),n("th",null,n(hl.a,null,yl(Y()))),n("th",null,n(hl.a,null,yl(K()))),n("th",null,n(hl.a,null,yl(Q()))),n("th",null,n("abbr",{title:"Termine noto"},"TN")))),n("tbody",null,n("tr",null,n("td",null,n(hl.a,null,yl(W()))),n("td",null,n(hl.a,null,yl(H()))),n("td",null,n(hl.a,null,yl(X()))),n("td",null,n(hl.a,null,yl(Z()))),n("td",null,n(hl.a,null,yl(N())))),n("tr",null,n("td",null,n(hl.a,null,yl(M()))),n("td",null,n(hl.a,null,yl(J()))),n("td",null,n(hl.a,null,yl(B()))),n("td",null,n(hl.a,null,yl(E()))),n("td",null,n(hl.a,null,yl(G())))),n("tr",null,n("td",null,n(hl.a,null,yl(R()))),n("td",null,n(hl.a,null,yl(D()))),n("td",null,n(hl.a,null,yl(O()))),n("td",null,n(hl.a,null,yl(U()))),n("td",null,n(hl.a,null,yl(F()))))))),n("p",null,"Diventa:",n("table",null,n("thead",null,n("tr",null,n("th",null,n(hl.a,null,yl(C()))),n("th",null,n(hl.a,null,yl(w()))),n("th",null,n(hl.a,null,yl(V()))),n("th",null,n(hl.a,null,yl(L()))),n("th",{style:"background-color: rgba(255, 255, 0, 0.1);"},n(hl.a,null,yl(P()))),n("th",null,n("abbr",{title:"Termine noto"},"TN")))),n("tbody",null,n("tr",null,n("td",null,n(hl.a,null,yl(k()))),n("td",null,n(hl.a,null,yl(I()))),n("td",null,n(hl.a,null,yl(A()))),n("td",null,n(hl.a,null,yl(y()))),n("td",{style:"background-color: rgba(255, 255, 0, 0.1);"},n(hl.a,null,yl(S()))),n("td",null,n(hl.a,null,yl(T())))),n("tr",null,n("td",null,n(hl.a,null,yl(j()))),n("td",null,n(hl.a,null,yl(x()))),n("td",null,n(hl.a,null,yl(z()))),n("td",null,n(hl.a,null,yl(q()))),n("td",{style:"background-color: rgba(255, 255, 0, 0.1);"},n(hl.a,null,yl(_()))),n("td",null,n(hl.a,null,yl(g())))),n("tr",null,n("td",null,n(hl.a,null,yl(v()))),n("td",null,n(hl.a,null,yl(h()))),n("td",null,n(hl.a,null,yl(p()))),n("td",null,n(hl.a,null,yl(m()))),n("td",{style:"background-color: rgba(255, 255, 0, 0.1);"},n(hl.a,null,yl(b()))),n("td",null,n(hl.a,null,yl(d())))),n("tr",{style:"background-color: rgba(255, 255, 0, 0.1);"},n("td",null,n(hl.a,null,yl(s()))),n("td",null,n(hl.a,null,yl(f()))),n("td",null,n(hl.a,null,yl(c()))),n("td",null,n(hl.a,null,yl(r()))),n("td",{style:"background-color: rgba(255, 255, 0, 0.2);"},n(hl.a,null,yl(o()))),n("td",null,n(hl.a,null,yl(u()))))))))),n(hl.q,{title:"Divide et impera"},n("p",null,"È possibile usare la tecnica ",n("i",null,"divide et impera")," per rendere più efficiente l'",n("b",null,"enumerazione totale"),"."),n("p",null,"Si divide il problema principale (trovare il valore ottimo di un problema di ILP) in più sottoproblemi (trovare il valore ottimo di un problema di ILP con una variabile impostata a un valore fisso)."),n("p",null,"Si crea così un ",n("b",null,"albero"),"."),n("p",null,"È possibile ",n("b",null,"chiudere in anticipo")," alcuni nodi dell'albero se il loro miglior possibile valore ottimo è inferiore a uno precedentemente trovato o se il loro poliedro è ",n(gl.a,null),"."),n("p",null,"È possibile utilizzare diverse ",n("b",null,"strategie di esplorazione")," dell'albero:",n("ul",null,n("li",null,n("b",null,"depth-first"),": permette di raggiungere immediatamente a una soluzione accettabile (ma non ottimale)"),n("li",null,n("b",null,"best-first"),": permette di raggiungere più velocemente alla soluzione corretta")))),n(hl.q,{title:"Seca et impera"},n("p",null,"È possibile combinare il metodo dei ",n("b",null,"tagli secanti")," con la tecnica ",n("b",null,"divide et impera")," per raggiungere ancora più velocemente a una soluzione."),n("p",null,"Si effettuano ",n("b",null,"poche iterazioni")," del metodo dei tagli secanti, e sul risultato di quelle iterazioni si applica il ",n("b",null,"divide et impera"),"."))),n(hl.r,{title:n("span",null,"Terminologia dei grafi ",n(hl.u,null,"TODO: migliorare"))},n(hl.q,{title:"Grafo"},n("p",null,"Insieme di ",n("b",null,"nodi")," ",n(hl.h,null,yl(a()))," e ",n("b",null,"archi")," ",n(hl.h,null,yl(t()))," che li connettono."),n("p",null,"Può essere ",n("b",null,"diretto")," se gli archi hanno una direzione.")),n(hl.q,{title:"Nodi adiacenti"},n("p",null,"Nodi ",n("b",null,"connessi da un arco"),".")),n(hl.q,{title:"Arco incidente"},n("p",null,"Arco ",n("b",null,"connesso a un dato nodo"),".")),n(hl.q,{title:"Arco entrante o uscente"},n("p",null,"Un arco diretto che ",n("b",null,"termina")," o ",n("b",null,"inizia")," da un dato nodo.")),n(hl.q,{title:"Grado"},n("p",null,n("b",null,"Conteggio")," degli archi incidenti di un nodo."),n("p",null,"Si può calcolare anche relativamente agli archi entranti o agli archi uscenti.")),n(hl.q,{title:"Percorso"},n("p",null,"Sequenza di ",n("b",null,"archi consecutivi"),".")),n(hl.q,{title:"Connessione"},n("p",null,"Due nodi sono connessi se tra loro esiste ",n("b",null,"almeno un percorso"),"."),n("p",null,"Un grafo è connesso se tutti i suoi nodi sono connessi.")),n(hl.q,{title:"Cicli e circuiti"},n("p",null,"Percorsi rispettivamente indiretti e diretti in cui l'inizio coincide con la fine.")),n(hl.q,{title:"Grafo completo"},n("p",null,"Grafo in cui ogni nodo è connesso con ogni altro."),n("p",null,"Se diretto, contiene ",n(hl.h,null,yl(e()))," archi; altrimenti, ne contiene la metà.")),n(hl.q,{title:"Matrice di adiacenza"},n("blockquote",null,"Vedi ",n(hl.b,{href:"/algoritmiestrutturedati"},"Algoritmi"),".")),n(hl.q,{title:"Lista di adiacenza"},n("blockquote",null,"Vedi ",n(hl.b,{href:"/algoritmiestrutturedati"},"Algoritmi"),".")),n(hl.q,{title:"Taglio"},n("p",null,"Sottoinsieme di archi che connettono due sottoinsiemi di nodi."),n("p",null,"Può essere anche uscente o entrante; in tal caso include solo gli archi entranti o uscenti dal sottoinsieme.")),n(hl.q,{title:"Sottografo"},n("p",null,"Sottoinsieme di nodi e archi di un grafo."),n("p",null,"Tutti gli archi di un sottografo possono connettere solo nodi all'interno di esso.")),n(hl.q,{title:"Albero"},n("p",null,"Sottografo connesso e aciclico.")),n(hl.q,{title:"Spanning tree"},n("p",null,"Albero che include tutti i nodi di un grafo."))),n(hl.r,{title:"Algoritmi con i grafi"},n(hl.q,{title:"Prim"},n("p",null,"Crea uno spanning tree."),n("ol",null,n("li",null,"Aggiungi l'arco di costo minimo all'albero."),n("li",null,"Finchè mancano ancora archi:",n("ol",null,n("li",null,"Trova tutti gli archi che aggiungerebbero un nuovo nodo all'albero."),n("li",null,"Seleziona l'arco di costo minore."))))),n(hl.q,{title:"Ordine topologico"},n("p",null,"Trova l'ordine topologico di un albero."),n("ol",null,n("li",null,"Ripeti finchè ci sono nodi nel grafo:",n("ol",null,n("li",null,"Assegna un numero sequenziale a un nodo senza archi entranti."),n("li",null,"Elimina il nodo a cui hai assegnato il numero."),n("li",null,"Elimina tutti gli archi incidenti sul nodo che hai eliminato."))))),n(hl.q,{title:"Percorsi minimi in grafo diretto"},n("p",null,"Trova i percorsi di costo minimo in un albero."),n("ol",null,n("li",null,"Trova l'ordine topologico dell'albero."),n("li",null,"Invece che provare ogni singola combinazione di nodi, prova solo i nodi che hanno un numero topologico maggiore di quello del nodo attuale.")),n("p",null,n(hl.u,null,"TODO: forse spiegarlo meglio non farebbe male"))),n(hl.q,{title:"Algoritmo di Dijkstra"},n("blockquote",null,"Vedi ",n(hl.b,{href:"/algoritmiestrutturedati"},"Algoritmi"),".")),n(hl.q,{title:"Algoritmo di Ford-Fulkerson"},n(vl.a,null,"Trova il volume massimo di acqua che è possibile fare scorrere attraverso tubature con una data capacità."),n("p",null,"Costruisci il grafo residuo e vedi se c'è un percorso che va dalla sorgente alla destinazione."),n("p",null,n(hl.i,{src:"https://i.imgur.com/FJk44q0.png"})),n("p",null,n(hl.i,{src:"https://i.imgur.com/fzb6xz2.png"})))))}}.call(this,i("hosL").h)},jZax:function(n){n.exports={red:"red__ipSoq",orange:"orange__1nmkj",yellow:"yellow__353ge",lime:"lime__3FW1E",cyan:"cyan__2xhu7",blue:"blue__3MvDe",magenta:"magenta__i03ie",plus:"plus__1eV4_"}},ke5e:function(n,l,i){"use strict";(function(n){var e=i("2w3n"),t=i.n(e);l.a=function(l){return n("div",{class:t.a.example},l.children)}}).call(this,i("hosL").h)},mGtH:function(n,l,i){"use strict";var e=i("uzfk");l.a=i.n(e).a.example},o8Jj:function(n,l,i){"use strict";(function(n){var e=i("jZax"),t=i.n(e);l.a=function(l){return n("span",{class:t.a.plus},l.children)}}).call(this,i("hosL").h)},uzfk:function(n){n.exports={red:"red__3r1Jz",orange:"orange__2q18p",yellow:"yellow__3cyw6",lime:"lime__2GJfI",cyan:"cyan__k_5Y_",blue:"blue__ejrIP",magenta:"magenta__1Zdi7",example:"example__22j7L"}}}]); //# sourceMappingURL=route-OttimizzazioneLineare.chunk.748b9.js.map