AMPL中的索引变量

时间:2016-05-09 13:29:44

标签: ampl

我有以下模型,其变量是来自矢量的值(目标函数中的p的索引)

但AMPL显示错误:尚未允许下标变量。

如何在目标函数中实现这种寻址?

提前致谢并致以最诚挚的问候。 加布里埃尔

param dimension;                


set T:={1..dimension};          
set O:={0};                     
set V:= O union T;                      
param c{i in V, j in V};        
param p{i in V};                                

set ady{i in V} within V := {j in V : i<>j and c[i,j] <> -1} ;    



# Variables 

var x{i in V, j in V}                         binary;   
var u{i in V}                                 integer;      


# Objective
minimize costo: sum{i in V, j in V}   p[u[i]-1] *  x[i,j] * c[i,j];

# Constraints


s.t. grado_a     {j in V}          : sum{i in ady[j] : j <> i} x[i,j] = 1; 

s.t. grado_b     {i in V}          : sum{j in ady[i] : i <> j} x[i,j] = 1; 

s.t. origen      {i in O}          : u[i] = 0;  

s.t. sigo_1      {i in T}          : u[i] >=1;

s.t. sigo_2      {i in T}          : u[i] <= card(V) -1;

s.t. precedencia {i in T, j in T : i <> j}  : u[i] - u[j] + 1  <= (card(V) - 1)*(1 - x[i,j]) ; 

1 个答案:

答案 0 :(得分:0)

AMPL尚未允许下标中的变量。但是,AMPL的ilogcp驱动程序支持element约束,例如:

include cp.ampl;
minimize costo:
  sum{i in V, j in V} element({v in V} p[v], u[i] - 1) *  x[i,j] * c[i,j];

其中element({v in V} p[v], u[i] - 1)相当于p[u[i] - 1],并被转换为IloElement约束。