Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function checkInsertion(solution,nRoute,idRequest,posI,posJ)
- instance = solution.instance
- road = solution.routes[nRoute].route
- posP = -1
- posD = -1
- cost = 0
- ####### ICI
- ## Cas spécial de avant le retour au noeud dépôt
- if (road[posI+1] == 1)
- solution.fts[road[posI+1]] = instance.nodes[1].latest
- end
- if (road[posJ+1] == 1)
- solution.fts[road[posJ+1]] = instance.nodes[1].latest
- end
- #######
- state = false # If the request can be inserted at this position.
- pP = instance.requests[idRequest].pickup
- pD = instance.requests[idRequest].delivery
- qR = instance.requests[idRequest].qte
- if (qR <= instance.capacity - solution.maxLoad[road[posI+1],road[posJ]])
- #Time a vehicle passes through a node. We assume it as soon as possible.
- h = solution.schedule ## earlyStart(solution,nRoute)[2] : Earliest Service Start
- t1 = max(h[road[posI]]+instance.nodes[road[posI]].serviceTime+getDistance(solution,road[posI],pP),instance.nodes[pP].earliest)
- if (t1 <= instance.nodes[pP].latest)
- t2 = max(instance.nodes[road[posI+1]].earliest,t1+instance.nodes[pP].serviceTime+getDistance(solution,pP,road[posI+1]))
- delta = t2 - h[road[posI+1]]
- if (delta<=solution.fts[road[posI+1]])
- t3 = max(h[road[posJ]]+instance.nodes[road[posJ]].serviceTime+getDistance(solution,road[posJ],pD),instance.nodes[pD].earliest) + delta
- if (t3<=instance.nodes[pD].latest+delta)
- t4 = max(instance.nodes[road[posJ+1]].earliest,t3+instance.nodes[pD].serviceTime+getDistance(solution,pD,road[posJ+1]))
- deltaPrim = t4-h[road[posJ+1]]
- if (deltaPrim <= solution.fts[road[posJ+1]])
- posP = posI
- posD = posJ
- cost = distDelta(instance,road,posI,posJ,pP,pD)
- state = true
- end
- end
- end
- end
- end
- return state,posP,posD,cost
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement