mirror of
https://github.com/Steffo99/unisteffo.git
synced 2024-11-26 09:54:19 +00:00
Commit source
This commit is contained in:
parent
1c6c74bde0
commit
e0544c0a4c
10 changed files with 173 additions and 40 deletions
File diff suppressed because one or more lines are too long
|
@ -1,7 +1,7 @@
|
|||
import style from "./Unbounded.less";
|
||||
import style from "./Styles.less";
|
||||
|
||||
export default function (props) {
|
||||
return (
|
||||
<span class={style.unbounded}>{props.children ? props.children : "unbounded"}</span>
|
||||
<span class={style.max}>{props.children ? props.children : "max"}</span>
|
||||
);
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import style from "./Unbounded.less";
|
||||
import style from "./Styles.less";
|
||||
|
||||
export default function (props) {
|
||||
return (
|
||||
<span class={style.unbounded}>{props.children ? props.children : "unbounded"}</span>
|
||||
<span class={style.min}>{props.children ? props.children : "min"}</span>
|
||||
);
|
||||
}
|
||||
|
|
|
@ -1,2 +1,17 @@
|
|||
@import "../styles/constants.less";
|
||||
@import "../../styles/constants.less";
|
||||
|
||||
.unbounded {
|
||||
color: @blue;
|
||||
}
|
||||
|
||||
.unfeasible {
|
||||
color: @red;
|
||||
}
|
||||
|
||||
.min {
|
||||
color: @cyan;
|
||||
}
|
||||
|
||||
.max {
|
||||
color: @orange;
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import style from "Unfeasible.less";
|
||||
import style from "./Styles.less";
|
||||
|
||||
export default function (props) {
|
||||
return (
|
||||
<span class={style.unfeasible}>{this.props.children}</span>
|
||||
<span class={style.unbounded}>{props.children ? props.children : "unbounded"}</span>
|
||||
);
|
||||
}
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
import style from "./Styles.less";
|
||||
|
||||
export default function (props) {
|
||||
return (
|
||||
<div>
|
||||
</div>
|
||||
<span class={style.unfeasible}>{props.children ? props.children : "unfeasible"}</span>
|
||||
);
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
.todo {
|
||||
border: 4px yellow solid;
|
||||
border-radius: 4px;
|
||||
padding: 2px;
|
||||
border: 1px yellow solid;
|
||||
border-radius: 2px;
|
||||
padding: 1px;
|
||||
background-color: black;
|
||||
color: yellow;
|
||||
}
|
||||
|
|
|
@ -136,3 +136,7 @@ p:first-child {
|
|||
p:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
b {
|
||||
color: @accent;
|
||||
}
|
||||
|
|
|
@ -13,19 +13,12 @@ export default class CalcoloNumerico extends Component {
|
|||
return (
|
||||
<div>
|
||||
<h1>Calcolo Numerico</h1>
|
||||
<Split title={"Contatti"}>
|
||||
<Split title={"Unimore"}>
|
||||
<Panel title={"Email della prof.ssa"}>
|
||||
<p>
|
||||
<a href={"mailto:silvia.bonettini@unimore.it"}>silvia.bonettini@unimore.it</a>
|
||||
</p>
|
||||
</Panel>
|
||||
<Panel title={"Ricevimento"}>
|
||||
<p>
|
||||
Su appuntamento.
|
||||
</p>
|
||||
</Panel>
|
||||
</Split>
|
||||
<Split title={"Esame"}>
|
||||
<Panel title={"Orale"}>
|
||||
<p>
|
||||
E' composto da:
|
||||
|
@ -34,10 +27,16 @@ export default class CalcoloNumerico extends Component {
|
|||
<li>2 domande sugli argomenti teorici</li>
|
||||
<li>1 domanda di implementazione algoritmo in MATLAB <small>(facoltativa per i punteggi migliori del TBL)</small></li>
|
||||
</ul>
|
||||
<p>
|
||||
Prossimo appello:
|
||||
<Timer/>
|
||||
</p>
|
||||
</Panel>
|
||||
<Panel title={"Prossimi appelli"}>
|
||||
<ol>
|
||||
<li><Timer to={"2020-06-15"}/></li>
|
||||
<li><Timer to={"2020-06-22"}/></li>
|
||||
<li><Timer to={"2020-07-06"}/></li>
|
||||
<li><Timer to={"2020-07-13"}/></li>
|
||||
<li><Timer to={"2020-07-20"}/></li>
|
||||
<li><Timer to={"2020-07-27"}/></li>
|
||||
</ol>
|
||||
</Panel>
|
||||
</Split>
|
||||
<Split title={"Algoritmi"}>
|
||||
|
|
|
@ -9,6 +9,10 @@ import Plus from "../components/old/plus";
|
|||
import Code from "../components/old/code";
|
||||
import Timer from "../components/old/timer";
|
||||
import Image from "../components/Image";
|
||||
import Unfeasible from "../components/OttimizzazioneLineare/Unfeasible";
|
||||
import Unbounded from "../components/OttimizzazioneLineare/Unbounded";
|
||||
import Min from "../components/OttimizzazioneLineare/Min";
|
||||
import Max from "../components/OttimizzazioneLineare/Max";
|
||||
|
||||
const r = String.raw;
|
||||
|
||||
|
@ -116,6 +120,11 @@ export default class OttimizzazioneLineare extends Component {
|
|||
La funzione da minimizzare/massimizzare, tipicamente indicata con una <Latex>{r`z`}</Latex> al termine noto.
|
||||
</p>
|
||||
</Panel>
|
||||
<Panel title={"Vincoli"}>
|
||||
<p>
|
||||
Le funzioni del sistema che non sono quella obiettivo.
|
||||
</p>
|
||||
</Panel>
|
||||
<Panel title={"Tableu"}>
|
||||
<p>
|
||||
Un modo per rappresentare sistemi in forma standard, anche noto come <b>matrice equivalente completa</b> del sistema.
|
||||
|
@ -189,23 +198,27 @@ export default class OttimizzazioneLineare extends Component {
|
|||
<Split title={"Simplex"}>
|
||||
<Panel title={"Cos'è?"}>
|
||||
<p>
|
||||
Un algoritmo per massimizzare efficientemente variabili di sistemi lineari, derivato da Gauss-Jordan.
|
||||
Un algoritmo per <Min>minimizzare</Min>/<Max>massimizzare</Max> efficientemente variabili di sistemi lineari, derivato da Gauss-Jordan.
|
||||
</p>
|
||||
<Example>
|
||||
E' spiegato semplicemente <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>, e ci sono dei codici sorgenti di esempio <a href={"https://www.cs.cmu.edu/~15451-f17/handouts/simplexcodes/"}>qui</a>.
|
||||
</Example>
|
||||
</Panel>
|
||||
<Panel title={"I passi"}>
|
||||
<ol>
|
||||
<li>Trasforma il sistema in <b>forma standard</b>.</li>
|
||||
<li>Finchè ci sono variabili con coefficienti positivi nella funzione obiettivo:
|
||||
<li>Trova tante variabili <b>linearmente indipendenti</b> quante siano le righe: esse saranno la <i>base iniziale</i>.</li>
|
||||
<li>Finchè ci sono variabili con coefficienti <Min>positivi</Min>/<Max>negativi</Max> nella funzione obiettivo:
|
||||
<ol>
|
||||
<li><b>Scegli</b> una variabile della funzione obiettivo, chiamandola <i>variabile entrante</i>. <Example>Come? Vedi nel prossimo pannello.</Example></li>
|
||||
<li>Trova la variabile di base (detta <i>variabile uscente</i>) con il <b>valore minore</b> per il rapporto <Latex>{r`\frac{termine\ noto}{coeff.\ variabile\ entrante}`}</Latex></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>.
|
||||
<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>
|
||||
</li>
|
||||
<li>Trova la variabile di base (detta <i>variabile uscente</i>) tramite il rapporto <Latex>{r`\frac{termine\ noto}{coeff.\ variabile\ entrante}`}</Latex>: scegli la variabile con il <b>rapporto minore</b>, assicurandoti che esso sia <b>positivo</b>. Se tutti i rapporti sono negativi, allora il problema è <b><Unbounded/></b>.</li>
|
||||
<li><b>Riscrivi</b> tutte le funzioni del sistema in termini della variabile entrante.</li>
|
||||
</ol>
|
||||
</li>
|
||||
<li>Il <b>termine noto</b> della funzione obiettivo è il tuo risultato.</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 <Min>minimizzato</Min>/<Max>massimizzato</Max>.</li>
|
||||
</ol>
|
||||
</Panel>
|
||||
<Panel title={"Sotto forma di tableau"}>
|
||||
|
@ -213,13 +226,15 @@ export default class OttimizzazioneLineare extends Component {
|
|||
Se il problema è rappresentato in forma di tableau, allora esso è risolvibile applicando l'algoritmo di Gauss-Jordan, in aggiunta tenendo conto delle regole per la selezione delle variabili entranti e uscenti.
|
||||
</p>
|
||||
</Panel>
|
||||
<Panel title={"Criteri per la variabile entrante"}>
|
||||
<ul>
|
||||
<li>Coefficiente maggiore nella funzione obiettivo.</li>
|
||||
<li>Incremento maggiore della funzione obiettivo.</li>
|
||||
<li>A caso.</li>
|
||||
<li><i>Regola di Bland</i>: scegli variabili entranti e uscenti con indice minore (ovvero, prendi le prime possibili). <Example>È usato nella teoria perchè impedisce i cicli infiniti!</Example></li>
|
||||
</ul>
|
||||
</Split>
|
||||
<Split>
|
||||
<Panel title={"Soluzioni di base degenerata"}>
|
||||
<p>
|
||||
Una soluzione con almeno una variabile di valore <Latex>0</Latex>, dovuta a uno o più <b>vincoli ridondanti</b>.
|
||||
</p>
|
||||
<p>
|
||||
Senza <b>Regola di Bland</b> e in presenza di vincoli ridondanti si rischia di trovarsi a fare pivot infiniti.
|
||||
</p>
|
||||
</Panel>
|
||||
<Panel title={"Esempio"}>
|
||||
<Example>
|
||||
|
@ -233,10 +248,109 @@ export default class OttimizzazioneLineare extends Component {
|
|||
<Split title={"Metodo delle due fasi"}>
|
||||
<Panel title={"Metodo delle due fasi"}>
|
||||
<p>
|
||||
Un estensione del Simplex per permettere la risoluzione di problemi con termini noti negativi.
|
||||
Un estensione del Simplex per permettere la risoluzione di problemi la cui origine non è una soluzione ammissibile.
|
||||
</p>
|
||||
<p>
|
||||
Prevede l'introduzione di un <b>problema ausiliario</b>.
|
||||
Prevede l'introduzione di un <i>problema ausiliario</i>, le cui variabili sono dette <i>artificiali</i> e sono solitamente rappresentate come <Latex>{r`y_n`}</Latex>.
|
||||
</p>
|
||||
<Example>
|
||||
E' spiegato in modo semplice <a href={"https://web.archive.org/web/20200523052252/https://www.cs.cmu.edu/~15451-f17/handouts/simplex.pdf"}>qui</a>.
|
||||
</Example>
|
||||
</Panel>
|
||||
<Panel title={"Procedimento"}>
|
||||
<ol>
|
||||
<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><u>Fase 1</u>: <b>Risolvi</b> il nuovo problema con il metodo Simplex.</li>
|
||||
<li>Se il Simplex termina con ancora <b>variabili artificiali nella base</b>, allora il problema è <b><Unfeasible/></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>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>
|
||||
</ol>
|
||||
</Panel>
|
||||
</Split>
|
||||
<Split title={"Dualità"}>
|
||||
<Panel title={"Rilassamento"}>
|
||||
<p>
|
||||
Una versione semplificata di un problema nella quale si <b>ignorano</b> uno o più vincoli.
|
||||
</p>
|
||||
</Panel>
|
||||
<Panel title={"Rilassamento di Lagrange"}>
|
||||
<p>
|
||||
Un rilassamento che permette di misurare <b>di quanto i vincoli vengono violati</b>.
|
||||
</p>
|
||||
<p>
|
||||
I vincoli vengono aggiunti alla funzione obiettivo assieme a un moltiplicatore, solitamente rappresentato con <Latex>{r`u_n`}</Latex>.
|
||||
</p>
|
||||
<Example>
|
||||
<p>
|
||||
Il sistema:
|
||||
</p>
|
||||
<Latex inline={false}>{r`
|
||||
\begin{cases}
|
||||
z = 3 x_1 + 5 x_2\\
|
||||
2 x_1 + 3 x_2 \geq 12\\
|
||||
- x_1 + 3 x_2 \geq 3\\
|
||||
x_1 \geq 0\\
|
||||
x_2 \geq 0
|
||||
\end{cases}
|
||||
`}</Latex>
|
||||
<p>
|
||||
diventa:
|
||||
</p>
|
||||
<Latex inline={false}>{r`
|
||||
\begin{cases}
|
||||
z_{LR} = 3 x_1 + 5 x_2 + u_1 ( 12 - 2 x_1 - 3 x_2 ) + u_2 ( 3 + x_1 - 3 x_2 )\\
|
||||
x_1 \geq 0\\
|
||||
x_2 \geq 0
|
||||
\end{cases}
|
||||
`}</Latex>
|
||||
</Example>
|
||||
</Panel>
|
||||
<Panel title={"Duale"}>
|
||||
<p>
|
||||
Il sistema che <b><Min>massimizza</Min>/<Max>minimizza</Max> i moltiplicatori di rilassamento</b> di un qualsiasi sistema, detto <i>primale</i>.
|
||||
</p>
|
||||
<p>
|
||||
Si dimostra che la sua soluzione (se esiste) è <b>uguale</b> alla soluzione del problema primale.
|
||||
</p>
|
||||
</Panel>
|
||||
<Panel title={"In termini matriciali"}>
|
||||
<p>
|
||||
Possiamo <b>trasporre</b> il tableau e sostituire le variabili <Latex>{r`x_n`}</Latex> con variabili <Latex>{r`u_n`}</Latex> per ottenere il sistema duale!
|
||||
</p>
|
||||
<p>
|
||||
I maggiori e minori dei vincoli diventeranno maggiori e minori delle variabili e viceversa.
|
||||
</p>
|
||||
</Panel>
|
||||
<Panel title={"Feasibility del duale"}>
|
||||
<ul>
|
||||
<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><Unbounded/></b>, allora il suo duale sarà certamente <Unfeasible/>.</li>
|
||||
</ul>
|
||||
</Panel>
|
||||
</Split>
|
||||
<Split>
|
||||
<Panel title={"Lemma di Farkas"}>
|
||||
<p>
|
||||
<Todo>TODO: una complicata dimostrazione per dire varie cose. Probabilmente si riesce a saltare se non si dà l'orale...</Todo>
|
||||
</p>
|
||||
</Panel>
|
||||
<Panel title={"Dualità forte"}>
|
||||
<p>
|
||||
Il teorema che dimostra l'equivalenza tra primale e duale.
|
||||
</p>
|
||||
<p>
|
||||
<Todo>TODO: Anche qui c'è una lunga dimostrazione...</Todo>
|
||||
</p>
|
||||
</Panel>
|
||||
<Panel title={"Dualità debole"}>
|
||||
<p>
|
||||
Il teorema che dimostra che il valore della funzione obiettivo del duale (di un qualsiasi tableau) è sempre <Min>minore o uguale</Min>/<Max>maggiore o uguale</Max> alla soluzione del corrispettivo primale.
|
||||
</p>
|
||||
<p>
|
||||
<Todo>TODO: Dimostrazione cortina, ma sembra complicata.</Todo>
|
||||
</p>
|
||||
</Panel>
|
||||
</Split>
|
||||
|
|
Loading…
Reference in a new issue