Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 具有多时间窗的惩罚约束车辆路径问题_C_Time_Routes_Vehicle Routing_Busy Waiting - Fatal编程技术网

C 具有多时间窗的惩罚约束车辆路径问题

C 具有多时间窗的惩罚约束车辆路径问题,c,time,routes,vehicle-routing,busy-waiting,C,Time,Routes,Vehicle Routing,Busy Waiting,简介: LKH-3是Lin Kernighan旅行商启发式算法的一个实现。 目标是构建能够解决以下问题类型的LKH-3版本: CVRPMTW:具有多时间窗的容量受限车辆路径问题 检查:说明“如何增加等待时间”的注释 我需要做的是: 输出等待时间(最早)以及我们在哪个节点面临等待时间 清晰理解的示例: |--------|____________________|--------| 等待|时间窗口节点N |惩罚 GainType Penalty_CVRPMTW() { static No

简介:

LKH-3是Lin Kernighan旅行商启发式算法的一个实现。 目标是构建能够解决以下问题类型的LKH-3版本:

CVRPMTW:具有多时间窗的容量受限车辆路径问题

检查:说明“如何增加等待时间”的注释 我需要做的是:

输出等待时间(最早)以及我们在哪个节点面临等待时间


清晰理解的示例:

|--------|____________________|--------|

等待|时间窗口节点N |惩罚

GainType Penalty_CVRPMTW()
{
    static Node *StartRoute = 0;
    Node *N, *NextN, *CurrentRoute;
    GainType CostSum, DemandSum, P = 0;
    int Forward = SUCC(Depot)->Id != Depot->Id + DimensionSaved;
    int j;
    int RouteCounter = 0;

    if (!StartRoute)
        StartRoute = Depot;
    if (StartRoute->Id > DimensionSaved)
        StartRoute -= DimensionSaved;
    N = StartRoute;
    do {
        CurrentRoute = N;
        CostSum = DemandSum = 0;
        do {
            if (N->Id <= Dim && N != Depot) {
                if ((DemandSum += N->Demand) > Capacity)
                        P += DemandSum - Capacity;

                if (MultipleTimeWindowPenaltyMode == PENALTY_ON_EARLIEST || MultipleTimeWindowPenaltyMode == NO) {
                    // Loop over the earliest values of the node's time windows and find the appropriate time window
                    if (CostSum > N->Latest)
                        P += CostSum - N->Latest;
                    else {
                        for (j = 0; j < N->NumberTimeWindows; j++){
                            if (CostSum < N->EarliestList[j]){
                                if (MultipleTimeWindowPenaltyMode == NO) {
                                    *CostSum = N->EarliestList[j]*; //how can i add the waiting time in this line?
                                }
                                else if (MultipleTimeWindowPenaltyMode == PENALTY_ON_EARLIEST) {
                                    // CostSum = N->EarliestList[j]; /* Enable this to also add the waiting time to the cost */
                                    P += N->EarliestList[j] - CostSum;
                                }
                                break;
                            } else if (CostSum >= N->EarliestList[j] && CostSum <= N->LatestList[j]){
                                break;
                            }
                        }
                    }  
                }


GainType惩罚_CVRPMTW()
{
静态节点*StartRoute=0;
节点*N,*NextN,*CurrentRoute;
收益型成本总额,需求总额,P=0;
int Forward=SUCC(车辆段)->Id!=车辆段->Id+已保存尺寸;
int j;
int RouteCounter=0;
如果(!StartRoute)
StartRoute=仓库;
如果(StartRoute->Id>DimensionSaved)
StartRoute-=已保存的尺寸;
N=星型;
做{
CurrentRoute=N;
成本总和=需求总和=0;
做{
如果(N->Id需求)>容量)
P+=需求量um-容量;
if(MultipleTimeWindowPenaltyMode==惩罚| | | MultipleTimeWindowPenaltyMode==否){
//循环遍历节点时间窗口的最早值,并找到适当的时间窗口
如果(成本总额>N->最新)
P+=成本总和-N->最新;
否则{
对于(j=0;jNumberTimeWindows;j++){
如果(成本总和EarliestList[j]){
如果(MultipleTimeWindowPenaltyMode==否){
*CostSum=N->EarliestList[j]*;//如何在该行中添加等待时间?
}
else if(MultipleTimeWindowPenaltyMode==最早的惩罚){
//CostSum=N->EarliestList[j];/*启用此选项还可以将等待时间添加到成本中*/
P+=N->EarliestList[j]-成本总和;
}
打破
}else if(CostSum>=N->EarliestList[j]&CostSum LatestList[j]){
打破
}
}
}  
}

祝你好运!或者你有什么问题吗?我正在打印等待(提前)时间和节点,我被卡住了,不知道如何实现it@Avy请更具体一点,仔细阅读