2017-01-09 3 views
2

J'ai un modèle en AMPL. Ce modèle doit s'exécuter trois fois et, à chaque itération, le résultat doit redéfinir la taille d'un ensemble précédemment défini.Comment redéfinir un ensemble entre les exécutions en AMPL

Exemple:

set item := 1..12; 
... 
var out{other_set} >=0 integer; 

Le modèle irait me chercher la solution sur. Ensuite, je veux redéfinir l'ensemble item comme:

set item := 1..out. 

Est-ce possible?

Dans la page 462 du manuel que j'ai trouvé ceci:

Recursive definitions of indexed sets are allowed, so long as the assigned 
values can be computed in a sequence that only references previously computed values. 

Suis-je raison de penser ce que je veux?

Merci

Répondre

2

Vous pouvez attribuer une nouvelle valeur à un ensemble. Pour ce faire, assurez-vous d'abord qu'il n'a pas de := dans la déclaration. Vous pouvez le remplacer par la clause par défaut:

set item default 1..12; 

Ensuite, utilisez la déclaration let pour attribuer la nouvelle valeur:

let item := 1..out; 

Notez que dans votre exemple out est indexé sur un ensemble de sorte que vous aurez besoin pour fournir un indice out[...].

+0

Merci, je vais essayer dans les prochains jours et je vous ferai savoir le résultat. – mclzc