mirror of
https://github.com/graphhopper/jsprit.git
synced 2020-01-24 07:45:05 +01:00
optimize ruin random
This commit is contained in:
parent
6c1483c04f
commit
545eb71b46
1 changed files with 7 additions and 18 deletions
|
|
@ -24,7 +24,7 @@ import org.apache.logging.log4j.Logger;
|
|||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.LinkedList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
|
|
@ -85,35 +85,24 @@ public final class RuinRandom extends AbstractRuinStrategy {
|
|||
throw new IllegalStateException("not supported");
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public void setRuinFraction(double fractionOfAllNodes2beRuined) {
|
||||
this.fractionOfAllNodes2beRuined = fractionOfAllNodes2beRuined;
|
||||
logger.info("fraction set " + this);
|
||||
}
|
||||
|
||||
private void ruin(Collection<VehicleRoute> vehicleRoutes, int nOfJobs2BeRemoved, List<Job> unassignedJobs) {
|
||||
LinkedList<Job> availableJobs = new LinkedList<Job>(vrp.getJobs().values());
|
||||
for (int i = 0; i < nOfJobs2BeRemoved; i++) {
|
||||
if(availableJobs.isEmpty()) break;
|
||||
Job job = pickRandomJob(availableJobs);
|
||||
ArrayList<Job> availableJobs = new ArrayList<Job>(vrp.getJobs().values());
|
||||
Collections.shuffle(availableJobs,random);
|
||||
int removed = 0;
|
||||
for (Job job : availableJobs) {
|
||||
if(removed == nOfJobs2BeRemoved) break;
|
||||
if(removeJob(job,vehicleRoutes)) {
|
||||
unassignedJobs.add(job);
|
||||
availableJobs.remove(job);
|
||||
}
|
||||
removed++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "[name=randomRuin][noJobsToBeRemoved="+selectNuOfJobs2BeRemoved()+"]";
|
||||
}
|
||||
|
||||
private Job pickRandomJob(LinkedList<Job> availableJobs) {
|
||||
int randomIndex = random.nextInt(availableJobs.size());
|
||||
return availableJobs.get(randomIndex);
|
||||
}
|
||||
|
||||
private int selectNuOfJobs2BeRemoved() {
|
||||
return (int) Math.ceil(vrp.getJobs().values().size() * fractionOfAllNodes2beRuined);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue