Scrivere modelli di programmazione lineare con Align.

  • Creatore
    Topic
  • #11511
    Up
    0
    Down
    ::


    Ciao ragazzi. Sto usando LaTex da un mese (o poco più) per scrivere la tesi. Ogni tanto un’occhiata al forum mi risolve dei problemi…ma non sono riuscito a trovare una soluzione per la seguente questione.

    Il codice sottostante rappresenta il modello di un problema di programmazione lineare:
    `
    \begin{align}
    &\text{min}\sum_{e_{ij}\in E}(c_{ij}x_{ij}+c_{ji}x_{ji}) &&\textrm{(WPP)}\\
    \intertext{soggetto a}
    &x_{ij}+x_{ji}\geq 1 &&\forall e_{ij}\in E,\\
    &\sum_{e_{ij}\in\delta(i)}(x_{ij}-x_{ji})=0 &&\forall i\in V,\\
    &x_{ij},x_{ji}\geq 0 &&\forall e_{ij}\in E,\\
    &x_{ij},x_{ji}\text{ interi} &&\forall e_{ij}\in E.
    \end{align}
    `
    ..abbiamo una funzione obiettivo (la prima riga), e i vincoli da rispettare (dopo l’intertext).
    Capita spesso che il layout in pdf della compilazione si trovi diviso su due pagine…con la funzione obiettivo al termine di una pagina e le altre equazioni/disequazioni all’inizio della pagina successiva…mentre vorrei ottenere un risulato simile all’ ambiente table. Avere tutto il modello scritto sulla stessa pagina sarebbe certamente più elegante e di più facile lettura.

    Ora, mi chiedo se utilizzare l’ambiente Align sia accettabile (mi trovo bene tutto sommato) o se sia il caso di inserirlo all’interno di qualche altro ambiente (Table???) o addirittura sostituirlo con qlcs altro?…al fine di risolvere il problema di impaginazione. Vorrei cmq che ogni equazione sia numerata (align me lo garantisce).

    Vi ringrazio per l’attenzione.

Visualizzazione 6 filoni di risposte
  • Autore
    Risposte
    • #11512
      Up
      0
      Down
      ::

      Ciao ragazzi. Sto usando LaTex da un mese (o poco più) per scrivere la tesi. Ogni tanto un’occhiata al forum mi risolve dei problemi…ma non sono riuscito a trovare una soluzione per la seguente questione.

      Il codice sottostante rappresenta il modello di un problema di programmazione lineare:
      `\begin{align}
      &\text{min}\sum_{e_{ij}\in E}(c_{ij}x_{ij}+c_{ji}x_{ji}) &&\textrm{(WPP)}\\
      \intertext{soggetto a}
      &x_{ij}+x_{ji}\geq 1 &&\forall e_{ij}\in E,\\
      &\sum_{e_{ij}\in\delta(i)}(x_{ij}-x_{ji})=0 &&\forall i\in V,\\
      &x_{ij},x_{ji}\geq 0 &&\forall e_{ij}\in E,\\
      &x_{ij},x_{ji}\text{ interi} &&\forall e_{ij}\in E.
      \end{align}`
      ..abbiamo una funzione obiettivo (la prima riga), e i vincoli da rispettare (dopo l’intertext).
      Capita spesso che il layout in pdf della compilazione si trovi diviso su due pagine…con la funzione obiettivo al termine di una pagina e le altre equazioni/disequazioni all’inizio della pagina successiva…mentre vorrei ottenere un risulato simile all’ ambiente table. Avere tutto il modello scritto sulla stessa pagina sarebbe certamente più elegante e di più facile lettura.

      Ti prego, scrivi le parole intere. 😕 PDF va bene, qlcs no.

      Premesso che questi problemi di impaginazione vanno risolti alla fine, quando il testo è definitivo, obietterei sull’uso di \intertext, perché la locuzione “soggetto a” fa parte di tutto l’insieme. Ma sono opinioni.

      Ti suggerirei di usare il pacchetto mathtools che mette a disposizione \shortintertext che diminuisce gli spazi verticali rispetto a \intertext. Userei anche l’ambiente alignat
      `\begin{alignat}{2}
      &\text{min}\sum_{e_{ij}\in E}(c_{ij}x_{ij}+c_{ji}x_{ji})\qquad &&\textrm{(WPP)}\\*
      \shortintertext{soggetto a}\noalign{\nobreak}
      &x_{ij}+x_{ji}\geq 1 &&\forall e_{ij}\in E,\\
      &\sum_{e_{ij}\in\delta(i)}(x_{ij}-x_{ji})=0 &&\forall i\in V,\\
      &x_{ij},x_{ji}\geq 0 &&\forall e_{ij}\in E,\\
      &x_{ij},x_{ji}\text{ interi} &&\forall e_{ij}\in E.
      \end{alignat}`
      L’aggiunta di \noalign{\nobreak} e dell’asterisco dovrebbero curare il problema. Puoi naturalmente usare anche align (togli quel \qquad, in tal caso).

      Ciao
      Enrico

    • #11513
      Up
      0
      Down
      ::


      Di default non dovrebbe spezzarty gli ambienti display. Sei sicuro di non aver dichiarato globalmente \allowdisplaybreaks?

    • #11514
      Up
      0
      Down
      ::

      \begin{alignat}{2}
      &\text{min}\sum_{e_{ij}\in E}(c_{ij}x_{ij}+c_{ji}x_{ji})\qquad &&\textrm{(WPP)}\\*

      Una domanda da (attento) osservatore: perché utilizzate `text{min}` e non `\min`?

    • #11515
      Up
      0
      Down
      ::

      Di default non dovrebbe spezzarti gli ambienti display. Sei sicuro di non aver dichiarato globalmente \allowdisplaybreaks?

      Il problema è la presenza di \intertext, che fa il suo mestiere con un \noalign nel quale introduce un paio di \penalty, che sono punti legali dove eseguire un cambio pagina. Infatti noterai che ho scritto \\* nell’ultima riga prima di \intertext e \noalign{\nobreak} che dovrebbero impedire il cambio pagina sia prima che dopo \intertext.

      Per olotiv: hai ragione, si usa \min e non \text{min}; nel copia-incolla non ci avevo fatto caso.

      Ciao
      Enrico

    • #11516
      Up
      0
      Down
      ::

      Di default non dovrebbe spezzarti gli ambienti display. Sei sicuro di non aver dichiarato globalmente \allowdisplaybreaks?

      No, non ho dichiarato \allowdisplaybreaks. A proposito, riporto l’inizio del documento, se può dare qualche indicazione utile. Mi ero dimenticato di postarla.
      `
      \documentclass[12pt,a4paper,openright,reqno]{book}
      \usepackage[italian]{babel}
      \usepackage[T1]{fontenc}
      \usepackage[centertags]{amsmath}
      \usepackage{amsfonts}
      \usepackage{amssymb}
      \usepackage{amsthm}
      \usepackage{xypic}
      \usepackage{verbatim}
      \usepackage{fancyhdr}
      \usepackage{mathtools}
      \usepackage{longtable}
      \usepackage{afterpage}
      `
      Ora,

      Il problema è la presenza di \intertext, che fa il suo mestiere con un \noalign nel quale introduce un paio di \penalty, che sono punti legali dove eseguire un cambio pagina. Infatti noterai che ho scritto \\* nell’ultima riga prima di \intertext e \noalign{\nobreak} che dovrebbero impedire il cambio pagina sia prima che dopo \intertext.

      Ho provato a fare come mi dicevate, ma il risultato non cambia. Strano. Ho provato anche con \shortintertext, ma niente da fare. Il risultato è sempre quello di avere la prima equazione e “soggetto a” in una pagina e il resto delle righe nella pagina successiva.

      Visto che il problema dovrebbe essere \intertext, ho provato a scrivere anche qualcosa del genere:
      `\begin{align}
      &\min\sum_{e_{ij}\in E}c_{ij}x_{ij} &&\textrm{(UCPP1)}\\
      \text{soggetto a}\\
      &\sum_{e_{ij}\in \delta(i)}x_{ij}=\begin{cases}\textrm{1 (mod 2) se $i\in T$,}\\ \textrm{0 (mod 2) se $i\in V\backslash T$,}\end{cases}\\
      &x_{ij}\in \{0,1\} &&\forall e_{ij}\in E.
      \end{align}`
      cioè, trattare quella riga intermedia come il resto dell’ambiente. In effetti, la pagina non si spezza più. Giocando con il carattere &, posso mantenere un allineamento simile all’originale con “soggetto a” messo in evidenza.
      Ma due problemi sorgono. 1)numera quella riga di testo. Qual’è il comando per evitare la numerazione di una singola riga nell’ambiente align? L’ho cercato anche nella documentazione ma senza successo.
      2) La cosa più grave, a mio parere (mi fa pensare che questo approccio non vada per niente bene). Il nuovo allineamento crea problemi non appena le equazioni diventano più corpose, perchè “soggetto a” non viene più piazzato all’estrema sinistra della pagina (in riga con il resto del testo fuori da align) e mi schiaccia un pò le equazioni sulla destra. (spero di essermi spiegato 😳 )

      PS: scusate se non vi ho risposto per un pò di tempo, ma non ho potuto avere sotto mano un collegamento internet.

    • #11517
      Up
      0
      Down
      ::

      In effetti, la pagina non si spezza più. Giocando con il carattere &, posso mantenere un allineamento simile all’originale con “soggetto a” messo in evidenza.
      Ma due problemi sorgono. 1)numera quella riga di testo. Qual’è il comando per evitare la numerazione di una singola riga nell’ambiente align? L’ho cercato anche nella documentazione ma senza successo.
      2) La cosa più grave, a mio parere (mi fa pensare che questo approccio non vada per niente bene). Il nuovo allineamento crea problemi non appena le equazioni diventano più corpose, perchè “soggetto a” non viene più piazzato all’estrema sinistra della pagina (in riga con il resto del testo fuori da align) e mi schiaccia un pò le equazioni sulla destra. (spero di essermi spiegato 😳 )

      1) Hai cercato male: \notag o \nonumber nella riga che non vuoi numerare

      2) Secondo me, e te l’ho già detto, il “soggetto a” fa parte di tutto l’insieme e dovrebbe andare allineato alle equazioni stesse; quindi
      `&\text{soggetto a}\notag\\`

      Domandati: il problema consiste solo della prima equazione o non piuttosto dell’equazione insieme ai vincoli? Se la risposta è che i vincoli fanno parte del problema, il “soggetto a” deve stare insieme a tutto il malloppo e quindi non ha senso che sia allineato con il margine del documento.

      I soliti puntigli ortografici, perdonami: “qual è” senza apostrofo, mentre il troncamento di “poco” vuole l’apostrofo. Un po’ di pignoleria, lo so.

      Ciao
      Enrico

    • #11518
      Up
      0
      Down
      ::

      Secondo me, e te l’ho già detto, il “soggetto a” fa parte di tutto l’insieme e dovrebbe andare allineato alle equazioni stesse; quindi
      `&\text{soggetto a}\notag\\`

      L’unico motivo per cui insisto nel cercare di ottenere l’allineamento tanto desiderato è che lo ritrovo nei libri e negli articoli che ho consultato per la tesi. Proverò a chiedere al professore, se fa molta differenza ai fini dell’elaborato conclusivo.

      I soliti puntigli ortografici, perdonami: “qual è” senza apostrofo, mentre il troncamento di “poco” vuole l’apostrofo. Un po’ di pignoleria, lo so.

      Grazie, invece. 😳 😉

Visualizzazione 6 filoni di risposte
  • Devi essere connesso per rispondere a questo topic.

Go to top