package vroom.trsp.sandbox;
import java.math.RoundingMode;
import vroom.trsp.ALNSSCSolver;
import vroom.trsp.bench.TRSPRunBase;
import vroom.trsp.datamodel.TRSPDetailedSolutionChecker;
import vroom.trsp.datamodel.TRSPSolution;
import vroom.trsp.datamodel.TRSPSolutionChecker;
import vroom.trsp.datamodel.TRSPSolutionCheckerBase;
import vroom.trsp.datamodel.TRSPTour;
import vroom.trsp.datamodel.costDelegates.TRSPWorkingTime;
import vroom.trsp.util.TRSPGlobalParameters;
public class SandBox {
public static void main(String[] args) {
// System.out.println(Integer.MAX_VALUE);
// testDoublePrecision();
// testFwdSlackTime();
// String c = "C101.100_25-5-5-5_rd_10.txt";
// int idx = c.indexOf("rd_");
// String dp = c.substring(idx + 3, idx + 5);
// System.out.println(dp);
testFwdSlackTime();
}
static void testDoublePrecision() {
double n = 100;
double ratio = 1 / 3;
// double ratio = 2;
double result = 1 / Math.pow(3, n);
double result2 = 1;
for (int i = 0; i < n; i++)
result2 = result2 * ratio;
System.out.println(result);
System.out.println(Double.doubleToLongBits(result));
System.out.println(result2);
System.out.println(Double.doubleToLongBits(result2));
}
static void testFwdSlackTime() {
TRSPRunBase run = TRSPRunBase.newTRSPRunTest("C101.100_25-5-5-5.txt",
"./config/bench/bench_trsp_palnssc_25crew.cfg", 10);
run.getInstance().getCostDelegate().setPrecision(0, RoundingMode.FLOOR);
run.getParameters().set(TRSPGlobalParameters.THREAD_COUNT, 1);
ALNSSCSolver solver = (ALNSSCSolver) run.getSolver();
solver.initialization();
TRSPSolution sol = solver.getInitSol();
// Choose the longest tour
TRSPTour tour = sol.getTour(0);
for (int i = 1; i < sol.getTourCount(); i++) {
if (sol.getTour(i).length() > tour.length())
tour = sol.getTour(i);
printTourFwdSlack(sol.getTour(i));
tour.propagateUpdate(tour.getFirstNode(), tour.getLastNode());
}
}
static void printTourFwdSlack(TRSPTour tour) {
if (tour.length() <= 2)
return;
System.out.println(tour);
double delayS = Math.min(tour.getFwdSlackTime(tour.getFirstNode()),
tour.getWaitingTime(tour.getFirstNode(), tour.getLastNode()));
double delayF0n = Math.min(
TRSPSolutionCheckerBase.evaluateFwdSlackTime(tour, tour.getFirstNode(),
tour.getLastNode()),
tour.getWaitingTime(tour.getFirstNode(), tour.getLastNode()));
double time = 0;
double timeS = delayS;
double timeF0n = delayF0n;
int pred = tour.getFirstNode();
for (int i : tour) {
// System.out.printf(
// "%3.0f - %3.0f\n", //
// tour.getTimeWindow(pred).getEarliestStartOfService(time)
// + tour.getServiceTime(pred), //
// tour.getEarliestDepartureTime(pred));
time = tour.getTimeWindow(pred).getEarliestStartOfService(time)
+ tour.getServiceTime(pred) + tour.getTravelTime(pred, i);
timeS = tour.getTimeWindow(pred).getEarliestStartOfService(timeS)
+ tour.getServiceTime(pred) + tour.getTravelTime(pred, i);
timeF0n = tour.getTimeWindow(pred).getEarliestStartOfService(timeF0n)
+ tour.getServiceTime(pred) + tour.getTravelTime(pred, i);
System.out
.printf("%-5s %3.0f@[%3.0f;%3.0f]->%3.0f s=%3.0f Fi=%3.0f\t t=%3.0f ts=%3.0f tF0n=%3.0f W0i=%3.0f %s %s %s sc=%s\n",
i, //
tour.getEarliestArrivalTime(i), //
tour.getTimeWindow(i).startAsDouble(), //
tour.getTimeWindow(i).endAsDouble(), //
tour.getEarliestDepartureTime(i), //
tour.getFwdSlackTime(i), //
TRSPSolutionChecker.evaluateFwdSlackTime(tour, i, tour.getLastNode()),//
time,
timeS,
timeF0n,//
tour.getWaitingTime(tour.getFirstNode(), i),//
tour.getTimeWindow(i).isFeasible(timeS) ? "..." : "/!\\",//
tour.getTimeWindow(i).isFeasible(timeF0n) ? "..." : "/!\\",//
timeS == timeF0n ? "==" : "!=",
Math.abs(tour.getFwdSlackTime(i)
- TRSPDetailedSolutionChecker.evaluateFwdSlackTime(tour, i,
tour.getLastNode())) > 1e-3 ? "!=" : "==");
pred = i;
}
TRSPWorkingTime wt = new TRSPWorkingTime();
System.out.printf("T=%3.0f Ts=%3.0f TF0n=%3.0f Cost=%3.0f Cost2=%3.0f\n", time, timeS
- delayS, timeF0n - delayF0n, tour.getTotalCost(), wt.evaluateGenericTour(tour));
}
}