我是 CPLEX 的新手,我正在尝试实现一个模型。我有以下代码:
int truckN=...;
int truckCap=...;
int trailerN=...;
int trailerCap=...;
int totalNodes = ...;
tuple Nodo {
key int id;
float xPos;
float yPos;
int demand;
int type;
}
{Nodo} V0 = ...;
float distance[0..totalNodes,0..totalNodes];
range rangeNodes = 0..totalNodes;
tuple edge {int i; int j;}
setof(edge) E = {<i,j> | ordered i,j in rangeNodes};
{Nodo} V = {n | n in V0 : n.id != 0};
{Nodo} V_C = {n | n in V : n.type == 0 };
{Nodo} V_T = {n | n in V: n.type == 1 };
{Nodo} V_C0 = {n | n in V0 : n.type == 0 || n.id == 0};
{Nodo} V_T0 = {n | n in V0 : n.type == 1 || n.id == 0};
{Nodo} V_extended = {n | n in V0} union {<n.id + 100, n.xPos, n.yPos, 0, n.type> | n in V_C0};
{edge} E_extended = {<n1.id, n2.id+100> | n1 in V, n2 in V_C0};
{edge} E_extended_C = {<n1.id, n2.id> | n1 in V_C0, n2 in V_C} union
{<n1.id,100> | n1 in V_C0};
dvar boolean x[E_extended_C];
dvar boolean z[E_extended];
dvar int+ h[V_C0];
minimize sum(e in E_extended_C) distance[e.i][e.j] * x[e] +
sum(e in E_extended) distance[e.i][e.j] * z[e];
subject to {
sum(n in V) z[<0, n.id>] == h[0];
}
但是当我尝试写求和时,出现以下错误:
Cannot use type int for <!id:int,xPos:float,yPos:float,demand:int,type:int>
我试图找出我做错了什么,但我找不到任何相关信息,我正在使用 IBM ILOG CPLEX Optimization Studio 22.1.1.0
而不是
h[0]
尝试
h[<0>]
以下模型有效:
int truckN=5;
int truckCap=4;
int trailerN=2;
int trailerCap=4;
int totalNodes = 100;
tuple Nodo {
key int id;
float xPos;
float yPos;
int demand;
int type;
}
{Nodo} V0 = {<0,1,2,3,4>};
float distance[0..totalNodes,0..totalNodes];
range rangeNodes = 0..totalNodes;
tuple edge {int i; int j;}
setof(edge) E = {<i,j> | ordered i,j in rangeNodes};
{Nodo} V = {n | n in V0 : n.id != 0};
{Nodo} V_C = {n | n in V : n.type == 0 };
{Nodo} V_T = {n | n in V: n.type == 1 };
{Nodo} V_C0 = {n | n in V0 : n.type == 0 || n.id == 0};
{Nodo} V_T0 = {n | n in V0 : n.type == 1 || n.id == 0};
{Nodo} V_extended = {n | n in V0} union {<n.id + 100, n.xPos, n.yPos, 0, n.type> | n in V_C0};
{edge} E_extended = {<n1.id, n2.id+100> | n1 in V, n2 in V_C0};
{edge} E_extended_C = {<n1.id, n2.id> | n1 in V_C0, n2 in V_C} union
{<n1.id,100> | n1 in V_C0};
dvar boolean x[E_extended_C];
dvar boolean z[E_extended];
dvar int+ h[V_C0];
minimize sum(e in E_extended_C) distance[e.i][e.j] * x[e] +
sum(e in E_extended) distance[e.i][e.j] * z[e];
subject to {
sum(n in V:<0,n.id> in E_extended) z[<0, n.id>] == h[<0>];
}