Creazione e assegnazione valori ad un array in AMPL

Messaggioda MrDavide » 12/01/2018, 10:41

Ciao ragazzi, ho bisogno del vostro aiuto e mi sto perdendo in un bicchier d'acqua.

Allora sto realizzando uno script in AMPL per il TSP con le finestre temporali.
Ho già pensato e lavorato sui tre vincoli principali (da ogni nodo entra/esce un arco ed eliminazione sottocicli) ma non riesco con i vincoli di tempo per il nodo "Ristorante" (che ha indice 4).

Io ho 6 nodi, per esempio (da 1 a 6, "Ristorante" ha indice 4).

Non riesco a creare un array, di 6 elementi (cioè 6 nodi), che chiamerò tempo_arresto_nodo.
Ho provato di tutto ma ho sempre errori (specialmente di sintassi).

Mi potreste gentilmente darmi una mano? Pongo parte del codice qui sotto:
PS: "10" (cioè è il limite temporale messo a caso, per esempio)

Codice:
...
/* Definisco i nodi del mio grafo */
set nodi;
param nomeNodi{nodi} symbolic;

/* Definisco la quantità dei nodi presenti */
param numeroNodi := card(nodi);

/* Definisco la distanza tra due nodi */
param distanza{nodi, nodi};

/* Definisco il tempo per il pranzo */
param pausa_pranzo;

/* Definisco il tempo di fermo di ogni nodo */
param tempo_arresto {nodi} integer;
...
minimize distanzaCammino:
   sum{i in nodi, j in nodi} ((arco[i,j]*distanza[i,j]) + tempo_arresto_nodo[i]);

/* COME DEFINISCO IL VETTORE */

/* Sottoposti ai seguenti vincoli */
subject to
        # exactly one outgoing
        c1{k in nodi}: sum{i in nodi} arco [i,k] = 1;

        # exactly one incoming
        c2{k in nodi}: sum{j in nodi} arco [k,j] = 1;

        # no subtours
        c3{k in nodi, j in nodi: j > 1 and k > 1}: 
           sottoCicli[j] - sottoCicli[k] + numeroNodi*arco [j,k] <= numeroNodi-1;
         
      # finestra temporale dove "4" è l'indice del ristorante (attendere fino all'apertura del ristorante)
      c4:
         sum{i in nodi, j in nodi: i < 4 and j < 4} ((arco[i,j]*distanza[i,j])+tempo_arresto_nodo[i]) <= 100;
         
      
...
data;

param: nodi: nomeNodi :=
        1 "Via Novagli Campagna"
        2 "Pasticceria Europa"
        3 "Penny Market"
        4 "Ristorante"
        5 "Municipio"
        6 "Scuole medie"
;


param distanza: 1 2 3 4 5 6 :=
        1 500000 4.7 4.2 4.3 4.3 4.9
        2 5.4 50000 1.4 2.3 2.1 2.3
        3 4.3 0.85 50000 1 0.85 1.1
        4 4 2.2 1.7 50000 1.7 2.4
        5 4.2 1.6 0.95 0.75 50000 1
        6 6 2.7 2.1 1.7 1.2 50000
      ;
      
---

/* VOGLIO ASSEGNARE PER OGNI ELEMENTO di tempo_arresto_nodo[I] valore (lo deciderò io): ma come? */


L'idea sarebbe giusta?
Arco[i,y] è un vettore di due dimensioni, binario
Grazie!!!
MrDavide
Starting Member
Starting Member
 
Messaggio: 1 di 2
Iscritto il: 11/03/2015, 12:31

Torna a Analisi Numerica e Ricerca Operativa

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite