mirror of
https://github.com/graphhopper/jsprit.git
synced 2020-01-24 07:45:05 +01:00
remove unused classes
This commit is contained in:
parent
1f53c72620
commit
e7c626e785
2 changed files with 0 additions and 364 deletions
|
|
@ -1,156 +0,0 @@
|
||||||
/*******************************************************************************
|
|
||||||
* Copyright (C) 2013 Stefan Schroeder
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License
|
|
||||||
* as published by the Free Software Foundation; either version 2
|
|
||||||
* of the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
||||||
*
|
|
||||||
* Contributors:
|
|
||||||
* Stefan Schroeder - initial API and implementation
|
|
||||||
******************************************************************************/
|
|
||||||
package algorithms;
|
|
||||||
|
|
||||||
|
|
||||||
import java.io.BufferedWriter;
|
|
||||||
import java.io.FileWriter;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Collection;
|
|
||||||
|
|
||||||
import algorithms.RouteStates.ActivityState;
|
|
||||||
import basics.algo.AlgorithmEndsListener;
|
|
||||||
import basics.algo.JobInsertedListener;
|
|
||||||
import basics.route.TourActivity;
|
|
||||||
import basics.route.VehicleRoute;
|
|
||||||
import basics.route.TourActivity.JobActivity;
|
|
||||||
import basics.Job;
|
|
||||||
import basics.Service;
|
|
||||||
import basics.VehicleRoutingProblem;
|
|
||||||
import basics.VehicleRoutingProblemSolution;
|
|
||||||
|
|
||||||
class JobObserver implements JobInsertedListener, BeforeJobInsertionListener, AlgorithmEndsListener{
|
|
||||||
|
|
||||||
private static class Info {
|
|
||||||
double depTime;
|
|
||||||
double tourSize;
|
|
||||||
double insertionIndex;
|
|
||||||
double error;
|
|
||||||
public Info(double depTime, double tourSize, double insertionIndex,
|
|
||||||
double error) {
|
|
||||||
super();
|
|
||||||
this.depTime = depTime;
|
|
||||||
this.tourSize = tourSize;
|
|
||||||
this.insertionIndex = insertionIndex;
|
|
||||||
this.error = error;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private String locationId = "70";
|
|
||||||
|
|
||||||
private double routeCostBefore;
|
|
||||||
private double estimatedMC;
|
|
||||||
private boolean beforeFirst = false;
|
|
||||||
|
|
||||||
private RouteStates actStates;
|
|
||||||
|
|
||||||
public void setActivityStates(RouteStates actStates){
|
|
||||||
this.actStates = actStates;
|
|
||||||
}
|
|
||||||
|
|
||||||
public ActivityState state(TourActivity act){
|
|
||||||
return actStates.getState(act);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
Collection<Info> infos = new ArrayList<Info>();
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void informJobInserted(Job job2insert, VehicleRoute inRoute, double additionalCosts, double additionalTime) {
|
|
||||||
if(job2insert instanceof Service){
|
|
||||||
if(((Service) job2insert).getLocationId().equals(locationId)){
|
|
||||||
double actualMC = inRoute.getCost()-routeCostBefore;
|
|
||||||
TourActivity act = getAct(job2insert,inRoute);
|
|
||||||
double error = (estimatedMC-actualMC);
|
|
||||||
int tourSize = inRoute.getTourActivities().getActivities().size();
|
|
||||||
int insertionIndex = getIndexOf(job2insert, inRoute);
|
|
||||||
// infos.add(new Info())
|
|
||||||
double depTime = state(act).getEarliestOperationStart()+act.getOperationTime();
|
|
||||||
infos.add(new Info(depTime,tourSize,insertionIndex,error));
|
|
||||||
// System.out.println("[id=1][tourSize="+tourSize+"][index="+insertionIndex+
|
|
||||||
// "][earliestDeparture="+depTime+
|
|
||||||
// "][tourCostBefore="+routeCostBefore+"][routeCostAfter="+insertedIn.getCost()+"]" +
|
|
||||||
// "[estimated="+Math.round(estimatedMC)+"][actual="+Math.round(actualMC)+"][error(abs)="+error +
|
|
||||||
// "][errorPerNextCustomer="+ (error/(double)(tourSize-insertionIndex)) + "]");
|
|
||||||
routeCostBefore = 0.0;
|
|
||||||
estimatedMC = 0.0;
|
|
||||||
if(!beforeFirst) throw new IllegalStateException("ähhh");
|
|
||||||
beforeFirst = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private TourActivity getAct(Job job2insert, VehicleRoute insertedIn) {
|
|
||||||
for(TourActivity act : insertedIn.getTourActivities().getActivities()){
|
|
||||||
if(act instanceof JobActivity){
|
|
||||||
if(((JobActivity) act).getJob().getId().equals(job2insert.getId())){
|
|
||||||
return act;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
private int getIndexOf(Job job2insert, VehicleRoute insertedIn) {
|
|
||||||
int index=0;
|
|
||||||
for(TourActivity act : insertedIn.getTourActivities().getActivities()){
|
|
||||||
if(act instanceof JobActivity){
|
|
||||||
if(((JobActivity) act).getJob().getId().equals(job2insert.getId())){
|
|
||||||
return index;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
index++;
|
|
||||||
}
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void informBeforeJobInsertion(Job job, InsertionData data, VehicleRoute route) {
|
|
||||||
if(job instanceof Service){
|
|
||||||
if(((Service) job).getLocationId().equals(locationId)){
|
|
||||||
// System.out.println("[id=1][tourSize="+route.getTour().getActivities().size()+"][tourCost="+route.getCost()+"]" +
|
|
||||||
// "[estimatedMarginalInsertionCost="+data.getInsertionCost()+"]");
|
|
||||||
routeCostBefore = route.getCost();
|
|
||||||
estimatedMC = data.getInsertionCost();
|
|
||||||
beforeFirst = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void informAlgorithmEnds(VehicleRoutingProblem problem, Collection<VehicleRoutingProblemSolution> solutions) {
|
|
||||||
try {
|
|
||||||
BufferedWriter writer = new BufferedWriter(new FileWriter("output/errorAna.txt"));
|
|
||||||
for(Info info : infos){
|
|
||||||
writer.write(new StringBuilder().append(info.depTime).append(";").append(info.tourSize).append(";").append(info.insertionIndex).append(";")
|
|
||||||
.append(info.error).append("\n").toString());
|
|
||||||
}
|
|
||||||
writer.close();
|
|
||||||
} catch (IOException e) {
|
|
||||||
// TODO Auto-generated catch block
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
@ -1,208 +0,0 @@
|
||||||
/*******************************************************************************
|
|
||||||
* Copyright (C) 2013 Stefan Schroeder
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License
|
|
||||||
* as published by the Free Software Foundation; either version 2
|
|
||||||
* of the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
||||||
*
|
|
||||||
* Contributors:
|
|
||||||
* Stefan Schroeder - initial API and implementation
|
|
||||||
******************************************************************************/
|
|
||||||
package algorithms;
|
|
||||||
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import org.apache.log4j.Logger;
|
|
||||||
|
|
||||||
import basics.Job;
|
|
||||||
import basics.Service;
|
|
||||||
import basics.VehicleRoutingProblem;
|
|
||||||
import basics.VehicleRoutingProblemSolution;
|
|
||||||
import basics.algo.AlgorithmEndsListener;
|
|
||||||
import basics.algo.IterationEndsListener;
|
|
||||||
import basics.algo.IterationStartsListener;
|
|
||||||
import basics.route.ServiceActivity;
|
|
||||||
import basics.route.TourActivity;
|
|
||||||
import basics.route.VehicleRoute;
|
|
||||||
|
|
||||||
class RouteStates implements IterationStartsListener{
|
|
||||||
|
|
||||||
Logger log = Logger.getLogger(RouteStates.class);
|
|
||||||
|
|
||||||
static class RouteState {
|
|
||||||
private double costs;
|
|
||||||
private int load;
|
|
||||||
private VehicleRoute route;
|
|
||||||
public RouteState(VehicleRoute route) {
|
|
||||||
super();
|
|
||||||
this.route = route;
|
|
||||||
}
|
|
||||||
/**
|
|
||||||
* @return the costs
|
|
||||||
*/
|
|
||||||
public double getCosts() {
|
|
||||||
return costs;
|
|
||||||
}
|
|
||||||
/**
|
|
||||||
* @param costs the costs to set
|
|
||||||
*/
|
|
||||||
public void setCosts(double costs) {
|
|
||||||
this.costs = costs;
|
|
||||||
}
|
|
||||||
/**
|
|
||||||
* @return the load
|
|
||||||
*/
|
|
||||||
public int getLoad() {
|
|
||||||
return load;
|
|
||||||
}
|
|
||||||
/**
|
|
||||||
* @param load the load to set
|
|
||||||
*/
|
|
||||||
public void setLoad(int load) {
|
|
||||||
this.load = load;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
static class ActivityState {
|
|
||||||
private double earliestOperationStart;
|
|
||||||
private double latestOperationStart;
|
|
||||||
private double currentLoad;
|
|
||||||
private double currentCost;
|
|
||||||
private TourActivity act;
|
|
||||||
|
|
||||||
public ActivityState(TourActivity activity){
|
|
||||||
this.earliestOperationStart=activity.getTheoreticalEarliestOperationStartTime();
|
|
||||||
this.latestOperationStart=activity.getTheoreticalLatestOperationStartTime();
|
|
||||||
this.act = activity;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString() {
|
|
||||||
return "[earliestStart="+earliestOperationStart+"][latestStart="+
|
|
||||||
latestOperationStart+"][currLoad="+currentLoad+"][currCost="+currentCost+"]";
|
|
||||||
}
|
|
||||||
|
|
||||||
public double getEarliestOperationStart() {
|
|
||||||
return earliestOperationStart;
|
|
||||||
}
|
|
||||||
|
|
||||||
void setEarliestOperationStart(double earliestOperationStart) {
|
|
||||||
this.earliestOperationStart = earliestOperationStart;
|
|
||||||
}
|
|
||||||
|
|
||||||
public double getLatestOperationStart() {
|
|
||||||
return latestOperationStart;
|
|
||||||
}
|
|
||||||
|
|
||||||
void setLatestOperationStart(double latestOperationStart) {
|
|
||||||
this.latestOperationStart = latestOperationStart;
|
|
||||||
}
|
|
||||||
|
|
||||||
public double getCurrentLoad() {
|
|
||||||
return currentLoad;
|
|
||||||
}
|
|
||||||
|
|
||||||
void setCurrentLoad(double currentLoad) {
|
|
||||||
this.currentLoad = currentLoad;
|
|
||||||
}
|
|
||||||
|
|
||||||
public double getCurrentCost() {
|
|
||||||
return currentCost;
|
|
||||||
}
|
|
||||||
|
|
||||||
void setCurrentCost(double currentCost) {
|
|
||||||
this.currentCost = currentCost;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void reset() {
|
|
||||||
earliestOperationStart = act.getTheoreticalEarliestOperationStartTime();
|
|
||||||
latestOperationStart = act.getTheoreticalLatestOperationStartTime() ;
|
|
||||||
currentLoad = 0.0;
|
|
||||||
currentCost = 0.0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private Map<TourActivity, ActivityState> activityStates;
|
|
||||||
|
|
||||||
private Map<Service, TourActivity> tourActivities;
|
|
||||||
|
|
||||||
private Map<VehicleRoute, RouteState> routeStates;
|
|
||||||
|
|
||||||
public RouteStates() {
|
|
||||||
activityStates = new HashMap<TourActivity, RouteStates.ActivityState>();
|
|
||||||
tourActivities = new HashMap<Service,TourActivity>();
|
|
||||||
routeStates = new HashMap<VehicleRoute, RouteStates.RouteState>();
|
|
||||||
}
|
|
||||||
|
|
||||||
ActivityState getState(TourActivity act){
|
|
||||||
if(!activityStates.containsKey(act)) return null;
|
|
||||||
return activityStates.get(act);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void clearStates(){
|
|
||||||
activityStates.clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
public Map<TourActivity, ActivityState> getActivityStates() {
|
|
||||||
return activityStates;
|
|
||||||
}
|
|
||||||
|
|
||||||
TourActivity getActivity(Service service, boolean resetState){
|
|
||||||
TourActivity tourActivity = tourActivities.get(service);
|
|
||||||
getState(tourActivity).reset();
|
|
||||||
return tourActivity;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void resetRouteStates(){
|
|
||||||
routeStates.clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
public RouteState getRouteState(VehicleRoute route){
|
|
||||||
RouteState routeState = routeStates.get(route);
|
|
||||||
if(routeState == null){
|
|
||||||
routeState = new RouteState(route);
|
|
||||||
putRouteState(route, routeState);
|
|
||||||
}
|
|
||||||
return routeState;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void putRouteState(VehicleRoute route, RouteState routeState){
|
|
||||||
routeStates.put(route, routeState);
|
|
||||||
}
|
|
||||||
|
|
||||||
void initialiseStateOfJobs(Collection<Job> jobs){
|
|
||||||
for(Job job : jobs){
|
|
||||||
if(job instanceof Service){
|
|
||||||
ServiceActivity service = ServiceActivity.newInstance((Service)job);
|
|
||||||
ActivityState state = new ActivityState(service);
|
|
||||||
tourActivities.put((Service) job, service);
|
|
||||||
activityStates.put(service, state);
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
throw new IllegalStateException();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void informIterationStarts(int i, VehicleRoutingProblem problem, Collection<VehicleRoutingProblemSolution> solutions) {
|
|
||||||
resetRouteStates();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue