Hi everyone,
I am trying to solve an optimization problem using cplex. I am using "MS ACCESS" as my DB. I have defined all the variables required, but I am not sure why I am getting the following error in .mode
"Data element "nodes" not defined."
"Invalid initialization expression for element "A"."
And I am getting the following error in my .dat file:
I am not really sure which part is the mistake I am doing.... Any hint/help is highly appreciated.
Here's part of my .mod file codes:
===========================
{string} nodes =...;
{string} vnr =...;
tuple NodeProp{
string node_id;
int xaxis;
int yaxis;
int capacity;
float energy;
int type;
}
{NodeProp} PNodes=...;
NodeProp Node[nodes]=[i.node_id: i|i in PNodes];
tuple edge{
string FromNode;
string ToNode;
}
setof(edge) edges=...;
tuple vnrProp{
int xaxis;
int yaxis;
string vnr_id;
}
{vnrProp} VNodes=...;
vnrProp VNR[vnr]=[j.vnr_id: j|j in VNodes];
tuple vnr_edge{
string FromVnr;
string ToVnr;
float VnrDelay;
}
setof(vnr_edge) vnr_edges=...;
//constants
float e_tr = 0.000017;
float e_ov = 0.000005;
float e_link = 0.0002;
float maxDist = 30;
float distance_sensor_vnr;
int L[nodes][vnr];
execute{
function distance(xsen,ysen,xvn,yvn){
return Opl.sqrt(Opl.pow(xsen-xvn,2)+Opl.pow(ysen-yvn,2));
}
for(y in nodes){
for(z in vnr){
distance_sensor_vnr = distance(Node[y].xaxis,Node[y].yaxis,VNR[z].xaxis,VNR[z].yaxis);
if (distance_sensor_vnr<=maxDist){
L[y][z] = 1;
}
else{
L[y][z] = 0;
}
}
}
}
//decision variables
dvar boolean x[nodes][vnr];
dvar boolean u[edges][vnr_edges];
//expressions
dexpr float A = sum(i in nodes: Node[i].type==1, j in vnr) L[i][j]*x[i][j]*(e_tr );
dexpr float B = e_tr + sum(i in nodes: Node[i].type==2, j in vnr) L[i][j]*x[i][j]*(e_ov );
dexpr float C = e_link * sum(p in edges, q in vnr_edges) u[p][q];
dexpr float D = A + B + C;
minimize D;
subject to {
....
}
=========================
.dat file:
DBConnection db("access","Database1.mdb");
nodes from DBRead(db,"SELECT node_id FROM PNodes");
PNodes from DBRead(db,"SELECT node_id, xaxis, yaxis, capacity, energy, type, nodes FROM PNodes");
edges from DBRead(db,"SELECT ID, FromNode, ToNode, PLDelay FROM PLinks");
vnr from DBRead(db,"SELECT vnr_id FROM VNodes");
VNodes from DBRead(db,"SELECT vnr_id, xaxis, yaxis FROM VNodes");
vnr_edges from DBRead(db,"SELECT FromVnr, ToVnr, VnrDelay FROM VLinks");
#DecisionOptimization#Support#SupportMigration