Optimization 隐含边界处的所有条目CPLEX 我有一套车,预定到达目的地的时间originaltime[cars]。 然而,根据到达的顺序,他们必须等待一段时间 分开(通过数据输入分开[cars][cars]给出) 我的目标是在尊重必要的间隔的同时,尽量减少车辆与原定时间的延误 车辆只能在预定时间前60秒到达原始时间[车辆]后1800秒到达 我修正了顺序,根据他们的预定时间执行先到先得的服务originaltime[cars]

Optimization 隐含边界处的所有条目CPLEX 我有一套车,预定到达目的地的时间originaltime[cars]。 然而,根据到达的顺序,他们必须等待一段时间 分开(通过数据输入分开[cars][cars]给出) 我的目标是在尊重必要的间隔的同时,尽量减少车辆与原定时间的延误 车辆只能在预定时间前60秒到达原始时间[车辆]后1800秒到达 我修正了顺序,根据他们的预定时间执行先到先得的服务originaltime[cars],optimization,sequence,scheduling,cplex,opl,Optimization,Sequence,Scheduling,Cplex,Opl,它应该是一个直接的实现,但是我遇到了一些隐含边界的条目问题。我查看了我的输入数据和约束条件,我真的不知道为什么 为了解决这个问题,我在下面编写了CPLEX代码。谢谢你提前帮忙 //index of the cars considered {string} cars = ...; //original scheduled time int originaltime[cars] = ...; //time separation apart based on arrival sequence int

它应该是一个直接的实现,但是我遇到了一些隐含边界的条目问题。我查看了我的输入数据和约束条件,我真的不知道为什么

为了解决这个问题,我在下面编写了CPLEX代码。谢谢你提前帮忙

//index of the cars considered
{string} cars = ...;
//original scheduled time
int originaltime[cars] = ...;
//time separation apart based on arrival sequence
int separation[cars][cars] = ...;
//decision variables
//the modified time to minimized the delays
dvar float assignedtime[cars];
//the earliest and latest time the cars can arrive
dvar float earliesttime[cars];
dvar float latesttime[cars];
//0-1 variable to specify the order of the cars
dvar boolean order[cars][cars];
//to measure the delay of each car
dvar float indvdelay[cars];
//decision expression to calculate objective ( separated them because I've simplified the problem)
dexpr float objcost[f in cars] = indvdelay2[f];
dexpr float totalobjcost = sum(f in cars) objcost[f];
dexpr float overallobjcost = (1.3*totalobjcost); 
//objective functionn
minimize
    overallobjcost;    
//constraints;
subject to{ 
//obj remove modulus constraint (to account for +/- delay numbers so that it is always positive)
    forall(f in cars)
      indvdelay[f] >= assignedtime[f] -originaltime[f];
    forall(f in arrflights)
      indvdelay[f] >= -(assignedtime[f] -originaltime[f]);  
//earliest and latest times
    forall(f in cars)
      earliesttime[f] == (originaltime[f]-60);
    forall(f in cars)
      latesttime[f] == (originaltime[f] + 1800);  
//constraint to set order precedence based on original time FCFS
  forall(i in cars)
    forall(j in cars: i!=j)
      ctest:(originaltime[j] - originaltime[i])<= (100000*order[i][j] - 0.0005);
  forall(i in cars)
    forall(j in cars: i!=j)
      ctest1b:(originaltime[j] - originaltime[i])>= (-100000*(1-order[i][j]));
      
//order precedence
  forall( i in cars)
    forall(j in cars: i == j)
      ctAA:order[i][j] == 0;
  forall( i in cars)
    forall(j in cars: j > i)
      ctBB:order[i][j] + order[j][i] == 1;    
 //separation 
  forall(i in cars)
    forall(j in cars: i != j)
      ctCC:assignedtime[j] >= assignedtime[i] + separation[i][j] - (100000*(1-order[i][j]));
 //time window constraint 
  forall(f in cars)
    ctDD:assignedtime[f] >= earliesttime[f];
  forall(f in cars)
    ctEE:assignedtime[f] <= latetesttime[f];
      }    
我已经包含了excel数据文件

消息“隐含边界上的所有条目”表示问题实例不可行,CPLEX能够在预解决中证明这一点。您可以使用冲突精简程序对此进行调查,并找出不可行的原因。

此处提出的问题与此完全相同:。您应该使用冲突细化器来找出不可行的约束是什么。或者,尝试使用您知道有解决方案的较小数据集。一次添加一个约束以强制实施已知解决方案,并查看它在何处中断。您还可以将生成的模型保存为LP文件,该文件非常可靠,并检查该模型是否符合您的预期。谢谢,我找到了不可行的根源。
SheetConnection sheet("stage2errortest.xlsx");
cars from SheetRead(sheet,"'ARR'!B2:B25");
originaltime from SheetRead(sheet,"'ARR'!C2:C25");
separation from SheetRead(sheet,"'septable1arr'!A1:X24");

assignedttime to SheetWrite(sheet,"'ARR'!E2:E25");
indvdelay to SheetWrite(sheet,"'ARR'!F2:F25");