189 lines
8.7 KiB
Java
189 lines
8.7 KiB
Java
package jobshop;
|
|
|
|
import jobshop.encodings.JobNumbers;
|
|
import jobshop.encodings.ResourceOrder;
|
|
import jobshop.encodings.Task;
|
|
import jobshop.solvers.DescentSolver;
|
|
import jobshop.solvers.DescentSolver.Block;
|
|
import jobshop.solvers.DescentSolver.Swap;
|
|
import jobshop.solvers.GreedySolver;
|
|
import jobshop.solvers.GreedySolver.PriorityESTRule;
|
|
import jobshop.solvers.GreedySolver.PriorityRule;
|
|
import jobshop.solvers.TabooSolver;
|
|
|
|
import java.io.IOException;
|
|
import java.nio.file.Paths;
|
|
import java.util.List;
|
|
|
|
public class DebuggingMain {
|
|
|
|
public static void main(String[] args) {
|
|
try {
|
|
// load the aaa1 instance
|
|
Instance instance = Instance.fromFile(Paths.get("instances/aaa1"));
|
|
|
|
// construit une solution dans la représentation par
|
|
// numéro de jobs : [0 1 1 0 0 1]
|
|
// Note : cette solution a aussi été vue dans les exercices (section 3.3)
|
|
// mais on commençait à compter à 1 ce qui donnait [1 2 2 1 1 2]
|
|
JobNumbers enc = new JobNumbers(instance);
|
|
enc.jobs[enc.nextToSet++] = 0;
|
|
enc.jobs[enc.nextToSet++] = 1;
|
|
enc.jobs[enc.nextToSet++] = 1;
|
|
enc.jobs[enc.nextToSet++] = 0;
|
|
enc.jobs[enc.nextToSet++] = 0;
|
|
enc.jobs[enc.nextToSet++] = 1;
|
|
|
|
System.out.println("\nENCODING: " + enc);
|
|
|
|
Schedule sched = enc.toSchedule();
|
|
// TODO: make it print something meaningful
|
|
// by implementing the toString() method
|
|
System.out.println("SCHEDULE: " + sched);
|
|
System.out.println("VALID: " + sched.isValid());
|
|
System.out.println("MAKESPAN: " + sched.makespan());
|
|
|
|
System.out.println("---------------------------------------------\n");
|
|
|
|
ResourceOrder ro = new ResourceOrder(instance);
|
|
ro.tasksByMachine[0][0] = new Task(0,0);
|
|
ro.tasksByMachine[0][1] = new Task(1,1);
|
|
ro.tasksByMachine[1][0] = new Task(1,0);
|
|
ro.tasksByMachine[1][1] = new Task(0,1);
|
|
ro.tasksByMachine[2][0] = new Task(0,2);
|
|
ro.tasksByMachine[2][1] = new Task(1,2);
|
|
|
|
System.out.println("RESOURCE ORDER ENCODING:\n" + ro + "\n");
|
|
|
|
System.out.println("---------------------------------------------\n");
|
|
|
|
// load the aaa2 instance
|
|
Instance instance2 = Instance.fromFile(Paths.get("instances/aaa2"));
|
|
|
|
ResourceOrder ro2 = new ResourceOrder(instance2);
|
|
ro2.tasksByMachine[0][0] = new Task(2,0); //O7: Job 2, Task 0 (Machine 0)
|
|
ro2.tasksByMachine[0][1] = new Task(1,1); //O5: Job 1, Task 1 (Machine 0)
|
|
ro2.tasksByMachine[0][2] = new Task(0,1); //O2: Job 0, Task 1 (Machine 0)
|
|
ro2.tasksByMachine[1][0] = new Task(1,0); //O4: Job 1, Task 0 (Machine 1)
|
|
ro2.tasksByMachine[1][1] = new Task(2,1); //O8: Job 2, Task 1 (Machine 1)
|
|
ro2.tasksByMachine[1][2] = new Task(0,2); //O3: Job 0, Task 2 (Machine 1)
|
|
ro2.tasksByMachine[2][0] = new Task(2,2); //O9: Job 2, Task 2 (Machine 2)
|
|
ro2.tasksByMachine[2][1] = new Task(0,0); //O1: Job 0, Task 0 (Machine 2)
|
|
ro2.tasksByMachine[2][2] = new Task(1,2); //O6: Job 1, Task 2 (Machine 2)
|
|
|
|
System.out.println("RESOURCE ORDER ENCODING:\n" + ro2 + "\n");
|
|
|
|
System.out.println("---------------------------------------------\n");
|
|
|
|
System.out.println("Default Solver\n");
|
|
sched = ro.toSchedule();
|
|
|
|
System.out.println("SCHEDULE:\n" + sched);
|
|
System.out.println("VALID: " + sched.isValid());
|
|
System.out.println("MAKESPAN: " + sched.makespan());
|
|
|
|
System.out.println("---------------------------------------------\n");
|
|
|
|
/*JobNumbers jo = JobNumbers.fromSchedule(sched);
|
|
System.out.println("JOB NUMBER ENCODING (FROM_SCHEDULE): " + jo + "\n");*/
|
|
|
|
System.out.println("---------------------------------------------\n");
|
|
System.out.println("Greedy Solver: STP");
|
|
PriorityRule SPT = PriorityRule.SPT;
|
|
Solver solverSPT = new GreedySolver(SPT);
|
|
Result resultSPT = solverSPT.solve(instance, System.currentTimeMillis() + 10);
|
|
sched = resultSPT.schedule;
|
|
|
|
System.out.println("SCHEDULE:\n" + sched);
|
|
System.out.println("VALID: " + sched.isValid());
|
|
System.out.println("MAKESPAN: " + sched.makespan());
|
|
|
|
System.out.println("---------------------------------------------\n");
|
|
System.out.println("Greedy Solver: LRPT\n");
|
|
PriorityRule LRPT = PriorityRule.LRPT;
|
|
Solver solverLRPT = new GreedySolver(LRPT);
|
|
Result resultLRPT = solverLRPT.solve(instance, System.currentTimeMillis() + 10);
|
|
sched = resultLRPT.schedule;
|
|
|
|
System.out.println("SCHEDULE:\n" + sched);
|
|
System.out.println("VALID: " + sched.isValid());
|
|
System.out.println("MAKESPAN: " + sched.makespan());
|
|
|
|
System.out.println("---------------------------------------------\n");
|
|
System.out.println("Greedy Solver: EST_SPT\n");
|
|
PriorityESTRule EST_SPT = PriorityESTRule.EST_SPT;
|
|
Solver solverEST_SPT = new GreedySolver(EST_SPT);
|
|
Result resultEST_SPT = solverEST_SPT.solve(instance, System.currentTimeMillis() + 10);
|
|
sched = resultEST_SPT.schedule;
|
|
|
|
System.out.println("SCHEDULE:\n" + sched);
|
|
System.out.println("VALID: " + sched.isValid());
|
|
System.out.println("MAKESPAN: " + sched.makespan());
|
|
|
|
System.out.println("---------------------------------------------\n");
|
|
System.out.println("Greedy Solver: EST_LRPT\n");
|
|
PriorityESTRule EST_LRPT = PriorityESTRule.EST_LRPT;
|
|
Solver solverEST_LRPT = new GreedySolver(EST_LRPT);
|
|
Result resultEST_LRPT = solverEST_LRPT.solve(instance, System.currentTimeMillis() + 10);
|
|
sched = resultEST_LRPT.schedule;
|
|
|
|
System.out.println("SCHEDULE:\n" + sched);
|
|
System.out.println("VALID: " + sched.isValid());
|
|
System.out.println("MAKESPAN: " + sched.makespan());
|
|
|
|
System.out.println("---------------------------------------------\n");
|
|
System.out.println("Descent Solver: [Executed with EST_LRPT]\n");
|
|
|
|
DescentSolver solverDescent = new DescentSolver(EST_LRPT);
|
|
|
|
|
|
System.out.print("****** TEST: blocksOfCriticalPath() ******\n");
|
|
System.out.print("Number of Jobs : " + instance2.numJobs + "\n");
|
|
System.out.print("Number of Tasks : " + instance2.numTasks + "\n");
|
|
System.out.print("Number of Machines : " + instance2.numMachines + "\n\n");
|
|
|
|
|
|
|
|
List<Block> criticalBlockList = solverDescent.blocksOfCriticalPath(ro2);
|
|
for(Block b : criticalBlockList) {
|
|
System.out.println(b);
|
|
for(Swap s : solverDescent.neighbors(b)) {
|
|
System.out.println(s);
|
|
}
|
|
}
|
|
System.out.print("******************************************\n");
|
|
|
|
|
|
Result resultDescent = solverDescent.solve(instance2, System.currentTimeMillis() + 10);
|
|
sched = resultDescent.schedule;
|
|
|
|
System.out.println("SCHEDULE:\n" + sched);
|
|
System.out.println("VALID: " + sched.isValid());
|
|
System.out.println("MAKESPAN: " + sched.makespan());
|
|
|
|
System.out.println("---------------------------------------------\n");
|
|
System.out.println("Taboo Solver: [Executed with EST_LRPT]\n");
|
|
|
|
TabooSolver solverTaboo = new TabooSolver(EST_LRPT, 50, 1000);
|
|
Result resultTaboo = solverTaboo.solve(instance2, System.currentTimeMillis() + 10);
|
|
sched = resultTaboo.schedule;
|
|
/*
|
|
List<Block>criticalBlockList2 = solverTaboo.blocksOfCriticalPath(ro2);
|
|
for(Block b : criticalBlockList2) {
|
|
System.out.println(b);
|
|
for(Swap s : solverTaboo.neighbors(b)) {
|
|
System.out.println(s);
|
|
}
|
|
}
|
|
*/
|
|
System.out.println("SCHEDULE:\n" + sched);
|
|
System.out.println("VALID: " + sched.isValid());
|
|
System.out.println("MAKESPAN: " + sched.makespan());
|
|
|
|
} catch (IOException e) {
|
|
e.printStackTrace();
|
|
System.exit(1);
|
|
}
|
|
|
|
}
|
|
}
|