0
votes

I am a beginner in programming and my code is showing the error cplex (default) can not extract the expression. My model should minimize the cost with subject to emissions (pareto-optimiation) by comparing different transport modes. When I run the model with just min cost or min emissions it works fine, but once I add the subjective of emissions or costs respectively the error occurs. I have tested the model with smaller input data, and it worked well.

The errors are:

  • Cplex (default) can not extract the expression: emissions_constraint: TotalEmission <= 976222726.
  • CPLEX(default) can not extract the expression : forall(a in 1..13462) emissions_constraint: TotalEmission <= 976222726. Karolina_MA.mod /Karolina_MA 115:4-117:33 C:\Users\seitzkar\opl\Karolina_MA\Karolina_MA.mod OPL-Problemmarkierung
  • OPL can not extract the expression: emissions_constraint: TotalEmission <= 976222726. Karolina_MA.mod /Karolina_MA 116:6-117:33 C:\Users\seitzkar\opl\Karolina_MA\Karolina_MA.mod OPL-Problemmarkierung

Can someone help me to figure out what the problem is? Thank you!

Following is part of my code:

 // Parameters
 int a=...; // Set of arcs available from departure to destination
 int m=...; // Set of transport modes for direct shipment (trucks)
 int n=...; // Set of transport modes for multi-mode shipments (train, vessel, airplane)
 range arc =1..a;
 range transport_dir =1..m;
 range transport_mm=1..n;

// decision variables
 dvar boolean Y[arc]; 
 dvar boolean X_dir[arc][transport_dir]; 
 dvar boolean X_mm[arc][transport_mm];

// expression costs
 dexpr float TotalCost_dir = sum(a in arc, m in transport_dir) cost_dir[a][m]*shipments_dir[a]*X_dir[a][m];
 dexpr float TotalCost_mm = sum(a in arc, n in transport_mm) cost_mm[a][n]*shipments_dir[a]*X_mm[a][n];
 dexpr float TotalCost = TotalCost_dir + TotalCost_mm;
 
 //expression emissions
 dexpr float TotalEmission_dir = sum(a in arc, m in transport_dir) emissions_dir[a][m]*shipments_dir[a]*X_dir[a][m];
 dexpr float TotalEmission_mm = sum(a in arc, n in transport_mm) emissions_mm[a][n]*shipments_dir[a]*X_mm[a][n];
 dexpr float TotalEmission = TotalEmission_dir + TotalEmission_mm; 
 
 // objective 
  //minimize TotalEmission;
  minimize TotalCost;

 subject to {
 
 //General Emission constraint - subject to min. cost 
   forall (a in arc)
     emissions_constraint: 
     TotalEmission <= 976222726;}
1

1 Answers

0
votes
// Parameters
 int a=5; // Set of arcs available from departure to destination
 int m=6; // Set of transport modes for direct shipment (trucks)
 int n=7; // Set of transport modes for multi-mode shipments (train, vessel, airplane)
 range arc =1..a;
 range transport_dir =1..m;
 range transport_mm=1..n;
 
 int cost_dir[arc][transport_dir];
 int cost_mm[arc][transport_mm];
 
 int emissions_dir[arc][transport_dir];
 int emissions_mm[arc][transport_mm];
 int shipments_dir[arc];

// decision variables
 dvar boolean Y[arc]; 
 dvar boolean X_dir[arc][transport_dir]; 
 dvar boolean X_mm[arc][transport_mm];

// expression costs
 dexpr float TotalCost_dir = sum(a in arc, m in transport_dir) cost_dir[a][m]*shipments_dir[a]*X_dir[a][m];
 dexpr float TotalCost_mm = sum(a in arc, n in transport_mm) cost_mm[a][n]*shipments_dir[a]*X_mm[a][n];
 dexpr float TotalCost = TotalCost_dir + TotalCost_mm;
 
 //expression emissions
 dexpr float TotalEmission_dir = sum(a in arc, m in transport_dir) emissions_dir[a][m]*shipments_dir[a]*X_dir[a][m];
 dexpr float TotalEmission_mm = sum(a in arc, n in transport_mm) emissions_mm[a][n]*shipments_dir[a]*X_mm[a][n];
 dexpr float TotalEmission = TotalEmission_dir + TotalEmission_mm; 
 
 // objective 
  //minimize TotalEmission;
  minimize TotalCost;

 subject to {
 
 //General Emission constraint - subject to min. cost 
   forall (a in arc)
     emissions_constraint: 
     TotalEmission <= 976222726;}

works fine