1
Fork 0
mirror of https://github.com/Steffo99/unisteffo.git synced 2024-11-26 09:54:19 +00:00
This commit is contained in:
Steffo 2020-05-26 18:27:29 +02:00
parent a8f811c614
commit cf05b04e75
Signed by: steffo
GPG key ID: 896A80F55F7C97F0
30 changed files with 270 additions and 95 deletions

View file

@ -1 +1 @@
*{box-sizing:border-box}body{background-color:#0d193b;color:#a0ccff}body,h1,h2,h3,h4,h5,h6{font-family:Arial,sans-serif}h1,h2,h3,h4,h5,h6{margin-top:4px;margin-bottom:4px;color:#fff;font-weight:400;text-align:center}h1{font-size:xx-large}a{color:#00caca;text-decoration:none}a:hover{color:#0ff}a:active{color:#a0ffff}iframe,img{max-width:100%;max-height:300px;border-radius:4px}code,pre{font-family:Consolas,SFMono-Regular,Liberation Mono,Menlo,monospace;font-size:14px}blockquote{color:#a0ccff;border-left:3px solid rgba(160,204,255,.2);background-color:rgba(160,204,255,.05);padding:4px 4px 4px 8px;margin:8px 0}input[type=password],input[type=text]{color:#a0ccff;background-color:#0d193b;border:1px solid rgba(160,204,255,.1);border-radius:4px;padding:4px;font-size:medium}input[type=password].disabled,input[type=password]:disabled,input[type=text].disabled,input[type=text]:disabled{color:grey;background-color:#1f1f1f;border-style:dotted;cursor:not-allowed}button{color:#a0ccff;background-color:#0d193b;border:1px solid rgba(160,204,255,.1);border-radius:4px;padding:4px;font-size:medium}button.hover,button:hover{background-color:rgba(160,204,255,.1);border:1px solid #a0ccff;color:#a0ccff}button.active,button:active{background-color:hsla(0,0%,100%,.2);border:1px solid #fff;color:#fff}button.disabled,button:disabled{color:grey;background-color:#1f1f1f;border-style:dotted;cursor:not-allowed}hr{border:1px solid rgba(160,204,255,.2);margin-top:24px;margin-bottom:24px}table{border-spacing:0;border:2px solid rgba(160,204,255,.1);background-color:rgba(160,204,255,.05);border-collapse:collapse}table tbody td,table tbody th,table thead td,table thead th{padding:4px;border:1px solid rgba(160,204,255,.1)}table thead{background-color:rgba(160,204,255,.1);color:#fff}li{margin:10px 0}p:first-child{margin-top:0}p:last-child{margin-bottom:0}b{color:#fff}.copyright__E8xyG{margin-top:8px;color:#fff;text-align:center;font-size:x-small} *{box-sizing:border-box}body{background-color:#0d193b;color:#a0ccff}body,h1,h2,h3,h4,h5,h6{font-family:Arial,sans-serif}h1,h2,h3,h4,h5,h6{margin-top:4px;margin-bottom:4px;color:#fff;font-weight:400;text-align:center}h1{font-size:xx-large}a{color:#00caca;text-decoration:none}a:hover{color:#0ff}a:active{color:#a0ffff}iframe,img{max-width:100%;max-height:300px;border-radius:4px}code,pre{font-family:Consolas,SFMono-Regular,Liberation Mono,Menlo,monospace;font-size:14px}blockquote{color:#a0ccff;border-left:3px solid rgba(160,204,255,.2);background-color:rgba(160,204,255,.05);padding:4px 4px 4px 8px;margin:8px 0}input[type=password],input[type=text]{color:#a0ccff;background-color:#0d193b;border:1px solid rgba(160,204,255,.1);border-radius:4px;padding:4px;font-size:medium}input[type=password].disabled,input[type=password]:disabled,input[type=text].disabled,input[type=text]:disabled{color:grey;background-color:#1f1f1f;border-style:dotted;cursor:not-allowed}button{color:#a0ccff;background-color:#0d193b;border:1px solid rgba(160,204,255,.1);border-radius:4px;padding:4px;font-size:medium}button.hover,button:hover{background-color:rgba(160,204,255,.1);border:1px solid #a0ccff;color:#a0ccff}button.active,button:active{background-color:hsla(0,0%,100%,.2);border:1px solid #fff;color:#fff}button.disabled,button:disabled{color:grey;background-color:#1f1f1f;border-style:dotted;cursor:not-allowed}hr{border:1px solid rgba(160,204,255,.2);margin-top:24px;margin-bottom:24px}table{border-spacing:0;border:2px solid rgba(160,204,255,.1);background-color:rgba(160,204,255,.05);border-collapse:collapse}table tbody td,table tbody th,table thead td,table thead th{padding:4px;border:1px solid rgba(160,204,255,.1)}table thead{background-color:rgba(160,204,255,.1);color:#fff}li{margin:10px 0}p:first-child{margin-top:0}p:last-child{margin-bottom:0}b{color:#fff}abbr{cursor:help}aside{margin:4px 0;padding:4px;font-size:smaller;background-color:rgba(160,204,255,.05);border-radius:4px}.copyright__E8xyG{margin-top:8px;color:#fff;text-align:center;font-size:x-small}

File diff suppressed because one or more lines are too long

View file

@ -1 +1 @@
{"version":3,"sources":[],"names":[],"mappings":"","file":"bundle.ca0cc.esm.js","sourceRoot":""} {"version":3,"sources":[],"names":[],"mappings":"","file":"bundle.5531a.esm.js","sourceRoot":""}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

2
docs/index.html generated
View file

@ -1 +1 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><title>Appunti Web</title><meta name="viewport" content="width=device-width,initial-scale=1"><meta name="mobile-web-app-capable" content="yes"><meta name="apple-mobile-web-app-capable" content="yes"><link rel="apple-touch-icon" href="./assets/icons/apple-touch-icon.png"><link rel="manifest" href="/manifest.json"><meta name="theme-color" content="#a0ccff"><link rel="shortcut icon" href="/favicon.ico"><style>*{box-sizing:border-box}body{background-color:#0d193b;color:#a0ccff;font-family:Arial,sans-serif}</style><link href="/bundle.b01bd.css" rel="preload" as="style"></head><body><script type="__PREACT_CLI_DATA__">{"preRenderData":{"url":"/"}}</script><script nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" src="/bundle.ca0cc.esm.js" type="module"></script><script nomodule="" src="/polyfills.700d1.js"></script><script nomodule="" defer="defer" src="/bundle.f6a31.js"></script><link rel="stylesheet" href="/bundle.b01bd.css"></body></html> <!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><title>Appunti Web</title><meta name="viewport" content="width=device-width,initial-scale=1"><meta name="mobile-web-app-capable" content="yes"><meta name="apple-mobile-web-app-capable" content="yes"><link rel="apple-touch-icon" href="./assets/icons/apple-touch-icon.png"><link rel="manifest" href="/manifest.json"><meta name="theme-color" content="#a0ccff"><link rel="shortcut icon" href="/favicon.ico"><style>*{box-sizing:border-box}body{background-color:#0d193b;color:#a0ccff;font-family:Arial,sans-serif}</style><link href="/bundle.1e4c7.css" rel="preload" as="style"></head><body><script type="__PREACT_CLI_DATA__">{"preRenderData":{"url":"/"}}</script><script nomodule="">!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script><script crossorigin="anonymous" src="/bundle.5531a.esm.js" type="module"></script><script nomodule="" src="/polyfills.700d1.js"></script><script nomodule="" defer="defer" src="/bundle.c81be.js"></script><link rel="stylesheet" href="/bundle.1e4c7.css"></body></html>

View file

@ -4,15 +4,15 @@ self.__precacheManifest = (self.__precacheManifest || []).concat([
"url": "/assets/icon.png" "url": "/assets/icon.png"
}, },
{ {
"revision": "f6a318cdb017950fbd70", "revision": "c81be89465a11802b97d",
"url": "/bundle.b01bd.css" "url": "/bundle.1e4c7.css"
}, },
{ {
"revision": "f6a318cdb017950fbd70", "revision": "c81be89465a11802b97d",
"url": "/bundle.f6a31.js" "url": "/bundle.c81be.js"
}, },
{ {
"revision": "069b562e730807a92486cb63b3fd886f", "revision": "95f28afb38171527f631a6da0e329e65",
"url": "/index.html" "url": "/index.html"
}, },
{ {
@ -72,12 +72,12 @@ self.__precacheManifest = (self.__precacheManifest || []).concat([
"url": "/route-mingwinstall.chunk.5a95a.css" "url": "/route-mingwinstall.chunk.5a95a.css"
}, },
{ {
"revision": "0d0835c574dff04dedbe", "revision": "de78c38519cc0539fa61",
"url": "/route-ottimizzazioneLineare.chunk.0d083.js" "url": "/route-ottimizzazioneLineare.chunk.88bb6.css"
}, },
{ {
"revision": "0d0835c574dff04dedbe", "revision": "de78c38519cc0539fa61",
"url": "/route-ottimizzazioneLineare.chunk.ce59d.css" "url": "/route-ottimizzazioneLineare.chunk.de78c.js"
}, },
{ {
"revision": "675260c6a85b3fa1af79", "revision": "675260c6a85b3fa1af79",
@ -100,7 +100,7 @@ self.__precacheManifest = (self.__precacheManifest || []).concat([
"url": "/sw-debug.js" "url": "/sw-debug.js"
}, },
{ {
"revision": "282974af009cd3a95c1d5fe7f3bcb17e", "revision": "f172b765140d5e0d31ba1df2f421e0d6",
"url": "/sw-esm.js" "url": "/sw-esm.js"
}, },
{ {

View file

@ -4,15 +4,15 @@ self.__precacheManifest = (self.__precacheManifest || []).concat([
"url": "/assets/icon.png" "url": "/assets/icon.png"
}, },
{ {
"revision": "f6a318cdb017950fbd70", "revision": "c81be89465a11802b97d",
"url": "/bundle.b01bd.css" "url": "/bundle.1e4c7.css"
}, },
{ {
"revision": "f6a318cdb017950fbd70", "revision": "c81be89465a11802b97d",
"url": "/bundle.ca0cc.esm.js" "url": "/bundle.5531a.esm.js"
}, },
{ {
"revision": "069b562e730807a92486cb63b3fd886f", "revision": "95f28afb38171527f631a6da0e329e65",
"url": "/index.html" "url": "/index.html"
}, },
{ {
@ -72,12 +72,12 @@ self.__precacheManifest = (self.__precacheManifest || []).concat([
"url": "/route-mingwinstall.chunk.5a95a.css" "url": "/route-mingwinstall.chunk.5a95a.css"
}, },
{ {
"revision": "0d0835c574dff04dedbe", "revision": "de78c38519cc0539fa61",
"url": "/route-ottimizzazioneLineare.chunk.ce59d.css" "url": "/route-ottimizzazioneLineare.chunk.88bb6.css"
}, },
{ {
"revision": "0d0835c574dff04dedbe", "revision": "de78c38519cc0539fa61",
"url": "/route-ottimizzazioneLineare.chunk.f48cc.esm.js" "url": "/route-ottimizzazioneLineare.chunk.9a772.esm.js"
}, },
{ {
"revision": "675260c6a85b3fa1af79", "revision": "675260c6a85b3fa1af79",

View file

@ -1 +1 @@
{"/":{"bundle.b01bd.css":{"type":"style","weight":1},"bundle.ca0cc.esm.js":{"type":"script","weight":1},"route-home.chunk.008cd.esm.js":{"type":"script","weight":0.9},"route-home.chunk.81f93.css":{"type":"style","weight":0.9}},"/apprendimentoSistemiArtificiali~route-ottimizzazioneLineare":{"bundle.b01bd.css":{"type":"style","weight":1},"bundle.ca0cc.esm.js":{"type":"script","weight":1},"route-apprendimentoSistemiArtificiali~route-ottimizzazioneLineare.chunk.bea71.esm.js":{"type":"script","weight":0.9}},"/apprendimentoSistemiArtificiali":{"bundle.b01bd.css":{"type":"style","weight":1},"bundle.ca0cc.esm.js":{"type":"script","weight":1},"route-apprendimentoSistemiArtificiali.chunk.8dc12.esm.js":{"type":"script","weight":0.9},"route-apprendimentoSistemiArtificiali~route-ottimizzazioneLineare.chunk.2ca12.css":{"type":"style","weight":0.9},"route-apprendimentoSistemiArtificiali~route-ottimizzazioneLineare.chunk.bea71.esm.js":{"type":"script","weight":0.9}},"/basiDiDati":{"bundle.b01bd.css":{"type":"style","weight":1},"bundle.ca0cc.esm.js":{"type":"script","weight":1},"route-basiDiDati.chunk.1c7f7.esm.js":{"type":"script","weight":0.9},"route-basiDiDati.chunk.e409b.css":{"type":"style","weight":0.9}},"/calcoloNumerico":{"bundle.b01bd.css":{"type":"style","weight":1},"bundle.ca0cc.esm.js":{"type":"script","weight":1},"route-calcoloNumerico.chunk.d6955.esm.js":{"type":"script","weight":0.9},"route-calcoloNumerico.chunk.4d04d.css":{"type":"style","weight":0.9}},"/fisica":{"bundle.b01bd.css":{"type":"style","weight":1},"bundle.ca0cc.esm.js":{"type":"script","weight":1},"route-fisica.chunk.953ff.esm.js":{"type":"script","weight":0.9},"route-fisica.chunk.598fe.css":{"type":"style","weight":0.9}},"/mingwinstall":{"bundle.b01bd.css":{"type":"style","weight":1},"bundle.ca0cc.esm.js":{"type":"script","weight":1},"route-mingwinstall.chunk.24a27.esm.js":{"type":"script","weight":0.9},"route-mingwinstall.chunk.5a95a.css":{"type":"style","weight":0.9}},"/ottimizzazioneLineare":{"bundle.b01bd.css":{"type":"style","weight":1},"bundle.ca0cc.esm.js":{"type":"script","weight":1},"route-ottimizzazioneLineare.chunk.f48cc.esm.js":{"type":"script","weight":0.9},"route-apprendimentoSistemiArtificiali~route-ottimizzazioneLineare.chunk.2ca12.css":{"type":"style","weight":0.9},"route-apprendimentoSistemiArtificiali~route-ottimizzazioneLineare.chunk.bea71.esm.js":{"type":"script","weight":0.9},"route-ottimizzazioneLineare.chunk.ce59d.css":{"type":"style","weight":0.9}},"/statistica":{"bundle.b01bd.css":{"type":"style","weight":1},"bundle.ca0cc.esm.js":{"type":"script","weight":1},"route-statistica.chunk.8a057.esm.js":{"type":"script","weight":0.9},"route-statistica.chunk.4bfa5.css":{"type":"style","weight":0.9}},"/vldigeometria":{"bundle.b01bd.css":{"type":"style","weight":1},"bundle.ca0cc.esm.js":{"type":"script","weight":1},"route-vldigeometria.chunk.76957.esm.js":{"type":"script","weight":0.9},"route-vldigeometria.chunk.96070.css":{"type":"style","weight":0.9}}} {"/":{"bundle.1e4c7.css":{"type":"style","weight":1},"bundle.5531a.esm.js":{"type":"script","weight":1},"route-home.chunk.008cd.esm.js":{"type":"script","weight":0.9},"route-home.chunk.81f93.css":{"type":"style","weight":0.9}},"/apprendimentoSistemiArtificiali~route-ottimizzazioneLineare":{"bundle.1e4c7.css":{"type":"style","weight":1},"bundle.5531a.esm.js":{"type":"script","weight":1},"route-apprendimentoSistemiArtificiali~route-ottimizzazioneLineare.chunk.bea71.esm.js":{"type":"script","weight":0.9}},"/apprendimentoSistemiArtificiali":{"bundle.1e4c7.css":{"type":"style","weight":1},"bundle.5531a.esm.js":{"type":"script","weight":1},"route-apprendimentoSistemiArtificiali.chunk.8dc12.esm.js":{"type":"script","weight":0.9},"route-apprendimentoSistemiArtificiali~route-ottimizzazioneLineare.chunk.2ca12.css":{"type":"style","weight":0.9},"route-apprendimentoSistemiArtificiali~route-ottimizzazioneLineare.chunk.bea71.esm.js":{"type":"script","weight":0.9}},"/basiDiDati":{"bundle.1e4c7.css":{"type":"style","weight":1},"bundle.5531a.esm.js":{"type":"script","weight":1},"route-basiDiDati.chunk.1c7f7.esm.js":{"type":"script","weight":0.9},"route-basiDiDati.chunk.e409b.css":{"type":"style","weight":0.9}},"/calcoloNumerico":{"bundle.1e4c7.css":{"type":"style","weight":1},"bundle.5531a.esm.js":{"type":"script","weight":1},"route-calcoloNumerico.chunk.d6955.esm.js":{"type":"script","weight":0.9},"route-calcoloNumerico.chunk.4d04d.css":{"type":"style","weight":0.9}},"/fisica":{"bundle.1e4c7.css":{"type":"style","weight":1},"bundle.5531a.esm.js":{"type":"script","weight":1},"route-fisica.chunk.953ff.esm.js":{"type":"script","weight":0.9},"route-fisica.chunk.598fe.css":{"type":"style","weight":0.9}},"/mingwinstall":{"bundle.1e4c7.css":{"type":"style","weight":1},"bundle.5531a.esm.js":{"type":"script","weight":1},"route-mingwinstall.chunk.24a27.esm.js":{"type":"script","weight":0.9},"route-mingwinstall.chunk.5a95a.css":{"type":"style","weight":0.9}},"/ottimizzazioneLineare":{"bundle.1e4c7.css":{"type":"style","weight":1},"bundle.5531a.esm.js":{"type":"script","weight":1},"route-ottimizzazioneLineare.chunk.9a772.esm.js":{"type":"script","weight":0.9},"route-apprendimentoSistemiArtificiali~route-ottimizzazioneLineare.chunk.2ca12.css":{"type":"style","weight":0.9},"route-apprendimentoSistemiArtificiali~route-ottimizzazioneLineare.chunk.bea71.esm.js":{"type":"script","weight":0.9},"route-ottimizzazioneLineare.chunk.88bb6.css":{"type":"style","weight":0.9}},"/statistica":{"bundle.1e4c7.css":{"type":"style","weight":1},"bundle.5531a.esm.js":{"type":"script","weight":1},"route-statistica.chunk.8a057.esm.js":{"type":"script","weight":0.9},"route-statistica.chunk.4bfa5.css":{"type":"style","weight":0.9}},"/vldigeometria":{"bundle.1e4c7.css":{"type":"style","weight":1},"bundle.5531a.esm.js":{"type":"script","weight":1},"route-vldigeometria.chunk.76957.esm.js":{"type":"script","weight":0.9},"route-vldigeometria.chunk.96070.css":{"type":"style","weight":0.9}}}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -1 +1 @@
.latex__3zlIu{display:inline-block;vertical-align:middle}.todo__1UVRh{border:1px solid #ff0;border-radius:2px;padding:1px;background-color:#000;color:#ff0}.minus__2EaF0{color:#7d7dff}.plus__2u13i{color:#ff7d7d}.timer__K0K_h{display:grid;text-align:center;-ms-flex-align:center;align-items:center;-ms-flex-pack:start;justify-content:start;margin-top:8px;margin-bottom:8px;grid-template-columns:80px 80px 80px 80px 50px}.days__vN3tf{grid-column:1}.hours__3v0KX{grid-column:2}.minutes__vkYk7{grid-column:3}.seconds__3gJ99{grid-column:4}.count__1VV4k{grid-row:1;font-size:xx-large;color:#fff}.text__khS4i{grid-row:2;font-size:small}.remaining__zUECg{grid-column:5;grid-row-start:1;grid-row-end:3}.unknown__af307,.unknown__af307 .count__1VV4k{color:#ff7dff}.expired__1rtHB,.expired__1rtHB .count__1VV4k{color:#ff7d7d}.unbounded__25UN8{color:#7d7dff}.unfeasible__2MuIF{color:#ff7d7d}.min__3lPpn{color:#7dffff}.max__1hxKl{color:#ffbb7d} .latex__3zlIu{display:inline-block;vertical-align:middle}.todo__1UVRh{border:1px solid #ff0;border-radius:2px;padding:1px;background-color:#000;color:#ff0}.minus__2EaF0{color:#7d7dff}.plus__2u13i{color:#ff7d7d}.timer__K0K_h{display:grid;text-align:center;-ms-flex-align:center;align-items:center;-ms-flex-pack:start;justify-content:start;margin-top:8px;margin-bottom:8px;grid-template-columns:80px 80px 80px 80px 50px}.days__vN3tf{grid-column:1}.hours__3v0KX{grid-column:2}.minutes__vkYk7{grid-column:3}.seconds__3gJ99{grid-column:4}.count__1VV4k{grid-row:1;font-size:xx-large;color:#fff}.text__khS4i{grid-row:2;font-size:small}.remaining__zUECg{grid-column:5;grid-row-start:1;grid-row-end:3}.unknown__af307,.unknown__af307 .count__1VV4k{color:#ff7dff}.expired__1rtHB,.expired__1rtHB .count__1VV4k{color:#ff7d7d}.unbounded__25UN8{color:#7d7dff}.unfeasible__2MuIF{color:#ff7d7d}.finite__2EP_f{color:#7dff7d}.min__3lPpn{color:#7dffff}.max__1hxKl{color:#ffbb7d}.tablepanel__PkBWm{margin:4px;width:calc(100% - 8px)}

File diff suppressed because one or more lines are too long

View file

@ -1 +1 @@
{"version":3,"sources":[],"names":[],"mappings":"","file":"route-ottimizzazioneLineare.chunk.f48cc.esm.js","sourceRoot":""} {"version":3,"sources":[],"names":[],"mappings":"","file":"route-ottimizzazioneLineare.chunk.9a772.esm.js","sourceRoot":""}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

2
docs/sw-esm.js generated
View file

@ -1,4 +1,4 @@
importScripts("/precache-manifest.097656f7b3d3f849be5cd65abd2c2890.esm.js", "https://storage.googleapis.com/workbox-cdn/releases/4.3.1/workbox-sw.js"); importScripts("/precache-manifest.5f80324d6166c774475519c520b11298.esm.js", "https://storage.googleapis.com/workbox-cdn/releases/4.3.1/workbox-sw.js");
!function(e){function t(n){if(r[n])return r[n].exports;var o=r[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var r={};t.m=e,t.c=r,t.d=function(e,r,n){t.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:n})},t.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},t.t=function(e,r){if(1&r&&(e=t(e)),8&r)return e;if(4&r&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(t.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var o in e)t.d(n,o,function(t){return e[t]}.bind(null,o));return n},t.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(r,"a",r),r},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="/",t(t.s="idKB")}({idKB:function(){self.__precacheManifest=[].concat(self.__precacheManifest||[]);const e=e=>"navigate"===e.request.mode;workbox.routing.registerRoute(({event:t})=>e(t),new workbox.strategies.NetworkFirst({cacheName:workbox.core.cacheNames.precache,networkTimeoutSeconds:5,plugins:[new workbox.cacheableResponse.Plugin({statuses:[200]})]})),workbox.precaching.precacheAndRoute(self.__precacheManifest,{}),workbox.routing.setCatchHandler(({event:t})=>e(t)?caches.match(workbox.precaching.getCacheKeyForURL("/index.html")):Response.error())}}); !function(e){function t(n){if(r[n])return r[n].exports;var o=r[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var r={};t.m=e,t.c=r,t.d=function(e,r,n){t.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:n})},t.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},t.t=function(e,r){if(1&r&&(e=t(e)),8&r)return e;if(4&r&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(t.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var o in e)t.d(n,o,function(t){return e[t]}.bind(null,o));return n},t.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(r,"a",r),r},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="/",t(t.s="idKB")}({idKB:function(){self.__precacheManifest=[].concat(self.__precacheManifest||[]);const e=e=>"navigate"===e.request.mode;workbox.routing.registerRoute(({event:t})=>e(t),new workbox.strategies.NetworkFirst({cacheName:workbox.core.cacheNames.precache,networkTimeoutSeconds:5,plugins:[new workbox.cacheableResponse.Plugin({statuses:[200]})]})),workbox.precaching.precacheAndRoute(self.__precacheManifest,{}),workbox.routing.setCatchHandler(({event:t})=>e(t)?caches.match(workbox.precaching.getCacheKeyForURL("/index.html")):Response.error())}});
//# sourceMappingURL=sw-esm.js.map //# sourceMappingURL=sw-esm.js.map

2
docs/sw.js generated
View file

@ -1,4 +1,4 @@
importScripts("/precache-manifest.4c3e7a8015e5e75e77ad3c23bfc02e4c.js", "https://storage.googleapis.com/workbox-cdn/releases/4.3.1/workbox-sw.js"); importScripts("/precache-manifest.22351ee38f908b83770dd4695e22d466.js", "https://storage.googleapis.com/workbox-cdn/releases/4.3.1/workbox-sw.js");
!function(e){function t(n){if(r[n])return r[n].exports;var o=r[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var r={};t.m=e,t.c=r,t.d=function(e,r,n){t.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:n})},t.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},t.t=function(e,r){if(1&r&&(e=t(e)),8&r)return e;if(4&r&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(t.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var o in e)t.d(n,o,function(t){return e[t]}.bind(null,o));return n},t.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(r,"a",r),r},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="/",t(t.s="idKB")}({idKB:function(){self.__precacheManifest=[].concat(self.__precacheManifest||[]);const e=e=>"navigate"===e.request.mode;workbox.routing.registerRoute(({event:t})=>e(t),new workbox.strategies.NetworkFirst({cacheName:workbox.core.cacheNames.precache,networkTimeoutSeconds:5,plugins:[new workbox.cacheableResponse.Plugin({statuses:[200]})]})),workbox.precaching.precacheAndRoute(self.__precacheManifest,{}),workbox.routing.setCatchHandler(({event:t})=>e(t)?caches.match(workbox.precaching.getCacheKeyForURL("/index.html")):Response.error())}}); !function(e){function t(n){if(r[n])return r[n].exports;var o=r[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var r={};t.m=e,t.c=r,t.d=function(e,r,n){t.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:n})},t.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},t.t=function(e,r){if(1&r&&(e=t(e)),8&r)return e;if(4&r&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(t.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var o in e)t.d(n,o,function(t){return e[t]}.bind(null,o));return n},t.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(r,"a",r),r},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="/",t(t.s="idKB")}({idKB:function(){self.__precacheManifest=[].concat(self.__precacheManifest||[]);const e=e=>"navigate"===e.request.mode;workbox.routing.registerRoute(({event:t})=>e(t),new workbox.strategies.NetworkFirst({cacheName:workbox.core.cacheNames.precache,networkTimeoutSeconds:5,plugins:[new workbox.cacheableResponse.Plugin({statuses:[200]})]})),workbox.precaching.precacheAndRoute(self.__precacheManifest,{}),workbox.routing.setCatchHandler(({event:t})=>e(t)?caches.match(workbox.precaching.getCacheKeyForURL("/index.html")):Response.error())}});
//# sourceMappingURL=sw.js.map //# sourceMappingURL=sw.js.map

View file

@ -0,0 +1,7 @@
import style from "./Styles.less";
export default function (props) {
return (
<abbr class={style.unfeasible} title={"Il poliedro non contiene punti."}>{props.children ? props.children : "vuoto"}</abbr>
);
}

View file

@ -0,0 +1,7 @@
import style from "./Styles.less";
export default function (props) {
return (
<abbr class={style.finite} title={"I punti del poliedro sono finiti."}>{props.children ? props.children : "finito"}</abbr>
);
}

View file

@ -2,6 +2,6 @@ import style from "./Styles.less";
export default function (props) { export default function (props) {
return ( return (
<span class={style.max}>{props.children ? props.children : "max"}</span> <abbr class={style.max} title={"In problemi in cui il primale è di massimizzazione."}>{props.children ? props.children : "max"}</abbr>
); );
} }

View file

@ -2,6 +2,6 @@ import style from "./Styles.less";
export default function (props) { export default function (props) {
return ( return (
<span class={style.min}>{props.children ? props.children : "min"}</span> <abbr class={style.min} title={"In problemi in cui il primale è di minimizzazione."}>{props.children ? props.children : "min"}</abbr>
); );
} }

View file

@ -8,6 +8,10 @@
color: @red; color: @red;
} }
.finite {
color: @lime;
}
.min { .min {
color: @cyan; color: @cyan;
} }

View file

@ -2,6 +2,6 @@ import style from "./Styles.less";
export default function (props) { export default function (props) {
return ( return (
<span class={style.unbounded}>{props.children ? props.children : "unbounded"}</span> <abbr class={style.unbounded} title={"I punti del poliedro sono infiniti."}>{props.children ? props.children : "illimitato"}</abbr>
); );
} }

View file

@ -1,7 +0,0 @@
import style from "./Styles.less";
export default function (props) {
return (
<span class={style.unfeasible}>{props.children ? props.children : "unfeasible"}</span>
);
}

View file

@ -0,0 +1,9 @@
import style from "./TablePanel.less";
export default function (props) {
return (
<table class={style.tablepanel}>
{props.children}
</table>
);
}

View file

@ -0,0 +1,6 @@
@import "../styles/constants.less";
.tablepanel {
margin: 4px;
width: calc(100% - 8px);
}

View file

@ -140,3 +140,15 @@ p:last-child {
b { b {
color: @accent; color: @accent;
} }
abbr {
cursor: help;
}
aside {
margin: 4px 0;
padding: 4px;
font-size: smaller;
background-color: @plus;
border-radius: 4px;
}

View file

@ -9,11 +9,14 @@ import Plus from "../components/old/plus";
import Code from "../components/old/code"; import Code from "../components/old/code";
import Timer from "../components/old/timer"; import Timer from "../components/old/timer";
import Image from "../components/Image"; import Image from "../components/Image";
import Unfeasible from "../components/OttimizzazioneLineare/Unfeasible"; import Empty from "../components/OttimizzazioneLineare/Empty";
import Unbounded from "../components/OttimizzazioneLineare/Unbounded"; import Unbounded from "../components/OttimizzazioneLineare/Unbounded";
import Min from "../components/OttimizzazioneLineare/Min"; import Min from "../components/OttimizzazioneLineare/Min";
import Max from "../components/OttimizzazioneLineare/Max"; import Max from "../components/OttimizzazioneLineare/Max";
import PLatex from "../components/PLatex"; import PLatex from "../components/PLatex";
import LatexDefaultInline from "../contexts/LatexDefaultInline";
import TablePanel from "../components/TablePanel";
import Finite from "../components/OttimizzazioneLineare/Finite";
const r = String.raw; const r = String.raw;
@ -39,6 +42,91 @@ export default class OttimizzazioneLineare extends Component {
</ol> </ol>
</Panel> </Panel>
</Split> </Split>
<LatexDefaultInline.Provider value={false}>
<Split title={"Glossario"}>
<TablePanel>
<thead>
<tr>
<th><abbr title={"Vettore / matrice"}>v</abbr></th>
<th><abbr title={"Elemento singolo"}>s</abbr></th>
<th>Significato</th>
</tr>
</thead>
<tbody>
<tr>
<td><Latex>{r`\mathbf{x}`}</Latex></td>
<td><Latex>{r`x_i`}</Latex></td>
<td>Incognite</td>
</tr>
<tr>
<td><Latex>{r`\mathbf{s}`}</Latex></td>
<td><Latex>{r`s_i`}</Latex></td>
<td>Variabili slack</td>
</tr>
<tr>
<td><Latex>{r`\mathbf{c}`}</Latex></td>
<td><Latex>{r`c_i`}</Latex></td>
<td>Coefficienti della funzione obiettivo</td>
</tr>
<tr>
<td><Latex>{r`\mathbf{A}`}</Latex></td>
<td><Latex>{r`a_{ij}`}</Latex></td>
<td>Coefficienti dei vincoli</td>
</tr>
<tr>
<td><Latex>{r`\mathbf{b}`}</Latex></td>
<td><Latex>{r`b_i`}</Latex></td>
<td>Termini noti dei vincoli</td>
</tr>
<tr>
<td><Latex>{r`\mathbf{y}`}</Latex></td>
<td><Latex>{r`y_i`}</Latex></td>
<td>Incognite artificiali</td>
</tr>
<tr>
<td><Latex>{r`\mathbf{u}`}</Latex></td>
<td><Latex>{r`u_i`}</Latex></td>
<td>Coefficienti di rilassamento</td>
</tr>
<tr>
<td/>
<td><Latex>{r`c_0`}</Latex></td>
<td>Valore ottimo di un problema</td>
</tr>
</tbody>
</TablePanel>
<TablePanel>
<thead>
<tr>
<th>Simboli</th>
<th>Significato</th>
</tr>
</thead>
<tbody>
<tr>
<td><Latex>{r`\mathbf{c}^T \mathbf{x}`}</Latex></td>
<td>Soluzione del problema</td>
</tr>
<tr>
<td><Latex>{r`\mathbf{A} \mathbf{x} = \mathbf{b}`}</Latex></td>
<td>Vincoli in forma standard</td>
</tr>
<tr>
<td><Latex>{r`z(\dots)`}</Latex></td>
<td>Funzione obiettivo</td>
</tr>
<tr>
<td><Latex>{r`\mathbf{u}^T \mathbf{b}`}</Latex></td>
<td>Soluzione del problema duale</td>
</tr>
<tr>
<td><Latex>{r`\mathbf{u}^T \mathbf{A} = \mathbf{c}^T`}</Latex></td>
<td>Vincoli del problema duale in forma standard</td>
</tr>
</tbody>
</TablePanel>
</Split>
</LatexDefaultInline.Provider>
<Split title={"Le basi"}> <Split title={"Le basi"}>
<Panel title={"Funzione obiettivo"}> <Panel title={"Funzione obiettivo"}>
<p> <p>
@ -62,12 +150,6 @@ export default class OttimizzazioneLineare extends Component {
<p> <p>
Il vettore dei suoi coefficienti è detto <Latex>{r`\mathbf{c}`}</Latex>, mentre quello delle sue incognite <Latex>{r`\mathbf{x}`}</Latex>. Il vettore dei suoi coefficienti è detto <Latex>{r`\mathbf{c}`}</Latex>, mentre quello delle sue incognite <Latex>{r`\mathbf{x}`}</Latex>.
</p> </p>
<p>
Si può ricavare la sua soluzione, detta <i>valore ottimo</i>, dal prodotto vettoriale <Latex>{r`\mathbf{c} \times \mathbf{x}`}</Latex>, scritto solitamente in forma matriciale come <Latex>{r`\mathbf{c}^T \mathbf{x}`}</Latex>.
</p>
<p>
Spesso, la funzione obiettivo è indicata con il nome <Latex>{r`z(\dots)`}</Latex>.
</p>
</Panel> </Panel>
<Panel title={"Vincoli"}> <Panel title={"Vincoli"}>
<p> <p>
@ -77,6 +159,25 @@ export default class OttimizzazioneLineare extends Component {
I loro coefficienti sono contenuti nella matrice <Latex>{r`\mathbf{A}`}</Latex>, mentre i loro termini noti nel vettore <Latex>{r`\mathbf{b}`}</Latex>. I loro coefficienti sono contenuti nella matrice <Latex>{r`\mathbf{A}`}</Latex>, mentre i loro termini noti nel vettore <Latex>{r`\mathbf{b}`}</Latex>.
</p> </p>
</Panel> </Panel>
<Panel title={"Valore ottimo"}>
<p>
La <b>soluzione</b> di un problema, ricavabile dal prodotto <Latex>{r`\mathbf{c}^T \mathbf{x}`}</Latex>.
</p>
<p>
Spesso, la funzione obiettivo è indicata con il nome <Latex>{r`z(\dots)`}</Latex>.
</p>
</Panel>
<Panel title={"Poliedro"}>
<p>
L'<b>insieme</b> che racchiunde tutte le <b>soluzioni ammissibili</b> di un problema.
</p>
<p>
In particolare, il valore ottimo è un <b>vertice</b> del poliedro, detto <i>vertice ottimo</i>.
</p>
<p>
Può essere <i><Finite/></i>, <i><Empty/></i> oppure <i><Unbounded/></i>.
</p>
</Panel>
<Panel title={"Gradiente"}> <Panel title={"Gradiente"}>
<p> <p>
<b>Funzione</b> della funzione obiettivo che restituisce la direzione del suo aumento più veloce. <b>Funzione</b> della funzione obiettivo che restituisce la direzione del suo aumento più veloce.
@ -235,10 +336,10 @@ export default class OttimizzazioneLineare extends Component {
</p> </p>
</Panel> </Panel>
</Split> </Split>
<Split title={"Simplex"}> <Split title={"Simplex primale"}>
<Panel title={"Cos'è?"}> <Panel title={"Cos'è?"}>
<p> <p>
Un algoritmo per <Min>minimizzare</Min>/<Max>massimizzare</Max> efficientemente variabili di sistemi lineari, derivato da Gauss-Jordan. Un algoritmo per <Min>minimizzare</Min>/<Max>massimizzare</Max> trovare efficientemente <b>valore e vertice ottimo</b> di problemi di ottimizzazione lineare, derivato da Gauss-Jordan.
</p> </p>
<Example> <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 ci sono dei codici sorgenti di esempio <a href={"https://www.cs.cmu.edu/~15451-f17/handouts/simplexcodes/"}>qui</a>. 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>.
@ -256,17 +357,20 @@ export default class OttimizzazioneLineare extends Component {
<li>Finchè ci sono variabili con coefficienti <Min>positivi</Min>/<Max>negativi</Max> nella funzione obiettivo: <li>Finchè ci sono variabili con coefficienti <Min>positivi</Min>/<Max>negativi</Max> nella funzione obiettivo:
<ol> <ol>
<li> <li>
<b>Scegli</b> la prima variabile con coefficiente <Min>positivo</Min>/<Max>negativo</Max> nella funzione obiettivo: essa è la <i>variabile entrante</i>. <b>Scegli</b> la prima variabile fuori base con coefficiente <Min>positivo</Min>/<Max>negativo</Max> nella funzione obiettivo: essa è la <i>variabile entrante</i>.<br/>
<Example>Si potrebbe scegliere qualsiasi variabile, ma scegliendo sempre la prima possibile (<i>Regola di Bland</i>) ci si assicura che l'algoritmo termini.</Example> <aside><i>Regola di Bland</i>: Si potrebbe scegliere qualsiasi variabile come entrante, ma scegliendo sempre la prima ammissibile ci si assicura che l'algoritmo termini.</aside>
</li> </li>
<li>Trova la variabile di base (detta <i>variabile uscente</i>) tramite il rapporto <Latex>{r`\frac{termine\ noto}{coeff.\ variabile\ entrante}`}</Latex>:<br/> scegli la variabile con il <b>rapporto minore</b>, assicurandoti che esso sia <b>positivo</b>.<br/> Se tutti i rapporti sono negativi, allora il problema è <b><Unbounded/></b>.</li> <li>
<li><b>Riscrivi</b> tutte le funzioni del sistema in termini della variabile entrante.</li> <b>Scegli</b> la variabile in base con il minor rapporto positivo <Latex>{r`\frac{termine\ noto}{coeff.\ variabile\ entrante}`}</Latex>.
<aside>Se non sei riuscito a trovare nessuna variabile con un rapporto positivo, significa che il poliedro è <Unbounded/>.</aside>
</li>
<li><u>Pivot</u>: <b>riscrivi</b> tutte le funzioni del sistema in termini della variabile entrante.</li>
</ol> </ol>
</li> </li>
<li>I <b>termini noti dei vincoli</b> sono le coordinate del risultato, mentre il <b>termine noto della funzione obiettivo</b> è il valore ottimo.</li> <li>I <b>termini noti dei vincoli</b> sono le coordinate del risultato, mentre il <b>termine noto della funzione obiettivo</b> è il valore ottimo.</li>
</ol> </ol>
<Example> <Example>
È praticamente l'algoritmo di Gauss-Jordan applicato il tableau con delle regole aggiuntive per la decisione delle variabili di pivot. È praticamente l'algoritmo di Gauss-Jordan applicato al tableau, con delle regole aggiuntive per la decisione delle variabili di pivot.
</Example> </Example>
</Panel> </Panel>
<Panel title={"Soluzioni di base degenerata"}> <Panel title={"Soluzioni di base degenerata"}>
@ -287,7 +391,7 @@ export default class OttimizzazioneLineare extends Component {
Prevede l'introduzione di un <i>problema ausiliario</i>, le cui incognite sono dette <i>artificiali</i>. Prevede l'introduzione di un <i>problema ausiliario</i>, le cui incognite sono dette <i>artificiali</i>.
</p> </p>
<p> <p>
Il vettore delle incognite artificiali è solitamente chiamato <Latex>{r`\mathbf{y}`}.</Latex> Il vettore delle incognite artificiali è solitamente chiamato <Latex>{r`\mathbf{y}`}</Latex>.
</p> </p>
<Example> <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' spiegato in modo semplice <a href={"https://web.archive.org/web/20200523052252/https://www.cs.cmu.edu/~15451-f17/handouts/simplex.pdf"}>qui</a>.
@ -297,11 +401,11 @@ export default class OttimizzazioneLineare extends Component {
<ol> <ol>
<li>Crea un nuovo tableau, <b>aggiungendo variabili artificiali</b> in modo da avere una base ammissibile.</li> <li>Crea un nuovo tableau, <b>aggiungendo variabili artificiali</b> in modo da avere una base ammissibile.</li>
<li>Sostituisci la vecchia funzione obiettivo con una nuova che <b>minimizzi la somma</b> di tutte le variabili artificiali.</li> <li>Sostituisci la vecchia funzione obiettivo con una nuova che <b>minimizzi la somma</b> di tutte le variabili artificiali.</li>
<li><u>Fase 1</u>: <b>Risolvi</b> il nuovo problema con il metodo Simplex.</li> <li><u>Fase 1</u>: <b>Risolvi</b> il nuovo problema con il simplex primale.</li>
<li>Se il Simplex termina con ancora <b>variabili artificiali nella base</b>, allora il problema è <b><Unfeasible/></b>.</li> <li>Se il Simplex termina quando ci sono ancora <b>variabili artificiali nella base</b>, allora il poliedro è <b><Empty/></b>.</li>
<li>Una volta che le variabili artificiali sono fuori base, <b>elimina</b> le loro colonne e la nuova funzione obiettivo.<br/></li> <li>Una volta che le variabili artificiali sono fuori base, <b>elimina</b> le loro colonne e la nuova funzione obiettivo.<br/></li>
<li>Riporta il tableau in forma base compiendo operazioni per <b>azzerare i coefficienti</b> delle variabili di base nella funzione obiettivo.</li> <li>Riporta il tableau in forma base compiendo operazioni per <b>azzerare i coefficienti</b> delle variabili di base nella funzione obiettivo.</li>
<li><u>Fase 2</u>: <b>Risolvi</b> il tableau con il metodo Simplex.</li> <li><u>Fase 2</u>: <b>Risolvi</b> il tableau con il simplex primale.</li>
</ol> </ol>
</Panel> </Panel>
</Split> </Split>
@ -339,7 +443,7 @@ export default class OttimizzazioneLineare extends Component {
</p> </p>
<Latex inline={false}>{r` <Latex inline={false}>{r`
\begin{cases} \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 )\\ 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_1 \geq 0\\
x_2 \geq 0 x_2 \geq 0
\end{cases} \end{cases}
@ -350,10 +454,7 @@ export default class OttimizzazioneLineare extends Component {
<Split title={"Dualità"}> <Split title={"Dualità"}>
<Panel title={"Duale"}> <Panel title={"Duale"}>
<p> <p>
Il sistema che <b><Min>massimizza</Min>/<Max>minimizza</Max> i moltiplicatori di rilassamento</b> di un qualsiasi sistema, detto <i>primale</i>. Il sistema che <b><Min>massimizza</Min>/<Max>minimizza</Max> i moltiplicatori di rilassamento</b> di un problema detto <i>primale</i>.
</p>
<p>
Si dimostra che la sua soluzione (se esiste) è <b>uguale</b> alla soluzione del problema primale.
</p> </p>
</Panel> </Panel>
<Panel title={"In termini matriciali"}> <Panel title={"In termini matriciali"}>
@ -367,15 +468,20 @@ export default class OttimizzazioneLineare extends Component {
<Panel title={"Feasibility del duale"}> <Panel title={"Feasibility del duale"}>
<ul> <ul>
<li>Se un problema ha una <b>soluzione finita</b>, allora anche il suo duale la avrà.</li> <li>Se un problema ha una <b>soluzione finita</b>, allora anche il suo duale la avrà.</li>
<li>Se un problema è <b><Unfeasible/></b>, allora il suo duale potrà essere <Unfeasible/> oppure <Unbounded/>.</li> <li>Se un problema è <b><Empty/></b>, allora il suo duale potrà essere <Empty/> oppure <Unbounded/>.</li>
<li>Se un problema è <b><Unbounded/></b>, allora il suo duale sarà certamente <Unfeasible/>.</li> <li>Se un problema è <b><Unbounded/></b>, allora il suo duale sarà certamente <Empty/>.</li>
</ul> </ul>
</Panel> </Panel>
</Split> </Split>
<Split> <Split title={"Un po' di teoria"}>
<Panel title={"Lemma di Farkas"}> <Panel title={"Lemma di Farkas"}>
<p> <p>
<Todo>TODO: una complicata dimostrazione per dire varie cose. Probabilmente si riesce a saltare se non si l'orale...</Todo> Una disuguaglianza lineare <Latex>{r`c_0 \leq \mathbf{c}^T \mathbf{x}`}</Latex> è verificata da tutti i punti di un poliedro non-<Empty/> se e solo se esiste un vettore <Latex>{r`u \in \mathfrak{R}^m`}</Latex> tale che:
</p>
<PLatex>{r`\mathbf{c}^T \geq \mathbf{u}^T \mathbf{A}`}</PLatex>
<PLatex>{r`c_0 \leq \mathbf{u}^T \mathbf{b}`}</PLatex>
<p>
<Todo>TODO: Cioè?</Todo>
</p> </p>
</Panel> </Panel>
<Panel title={"Dualità forte"}> <Panel title={"Dualità forte"}>
@ -400,6 +506,24 @@ export default class OttimizzazioneLineare extends Component {
<Todo>TODO: Dimostrazione cortina, ma sembra complicata.</Todo> <Todo>TODO: Dimostrazione cortina, ma sembra complicata.</Todo>
</p> </p>
</Panel> </Panel>
<Panel title={"Condizioni di ottimalità"}>
<p>
Il teorema che ci permette di passare dalla soluzione del duale alla soluzione del primale. <Todo>TODO: credo?</Todo>
</p>
<p>
Si deriva combinando le seguenti condizioni:
</p>
<ul>
<li>Ammissibilità del primale: <Latex>{r`\mathbf{A} \mathbf{X} \geq \mathbf{b}, \quad \mathbf{x} \geq 0`}</Latex></li>
<li>Ammissibilità del duale: <Latex>{r`\mathbf{u}^T \mathbf{A} \leq \mathbf{c}^T, \quad \mathbf{u} \geq 0`}</Latex></li>
<li>Teorema della dualità forte: <Latex>{r`\mathbf{c}^T \mathbf{x} = \mathbf{u}^T \mathbf{b}`}</Latex> (alla soluzione ottima)</li>
</ul>
<p>
Ne risulta che una soluzione è ottima se e solo se:
</p>
<PLatex>{r`\left( \mathbf{c}^T - \mathbf{u}^T \mathbf{A} \right) \mathbf{x} = 0`}</PLatex>
<PLatex>{r`\mathbf{u}^T \left( \mathbf{A} \mathbf{x} - \mathbf{b} \right) = 0`}</PLatex>
</Panel>
</Split> </Split>
</div> </div>
) )