【问题标题】:CPLEX (default) can not extract expressionCPLEX(默认)无法提取表达式
【发布时间】:2021-04-17 07:53:34
【问题描述】:

我是编程初学者,我的代码显示错误 cplex(默认)无法提取表达式。我的模型应该通过比较不同的运输方式来最小化排放成本(帕累托优化)。当我只用最小成本或最小排放量运行模型时,它工作得很好,但是一旦我分别添加排放量或成本的主观因素,就会发生错误。 我用较小的输入数据测试了模型,效果很好。

错误是:

  • Cplex(默认)无法提取表达式:emission_constraint: TotalEmission
  • CPLEX(default) 无法提取表达式:forall(a in 1..13462) emits_constraint: TotalEmission
  • OPL 无法提取表达式:emissions_constraint: TotalEmission

有人可以帮我找出问题所在吗?谢谢!

以下是我的代码的一部分:

 // 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;}

【问题讨论】:

    标签: default cplex opl


    【解决方案1】:
    // 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;}
    

    工作正常

    【讨论】:

    • 您好,Alex,如果代码对您有用,是 CPLEX 版本问题还是仅仅是数据问题?感谢您的回答。
    • 我解决了这个问题,“forall”在约束之前已经过时了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-12
    • 1970-01-01
    • 1970-01-01
    • 2016-08-06
    相关资源
    最近更新 更多