我有以下模型,其变量是来自矢量的值(目标函数中的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]) ;
答案 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
约束。