Implémentation heuristique gloutonne en cours
This commit is contained in:
parent
9bc6dfdec3
commit
74543116eb
1 changed files with 89 additions and 1 deletions
|
@ -2,6 +2,10 @@ package jobshop.solvers;
|
|||
|
||||
import jobshop.Instance;
|
||||
import jobshop.Result;
|
||||
import jobshop.encodings.Task;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
|
||||
/** An empty shell to implement a greedy solver. */
|
||||
public class GreedySolver implements Solver {
|
||||
|
@ -14,13 +18,97 @@ public class GreedySolver implements Solver {
|
|||
/** Priority that the solver should use. */
|
||||
final Priority priority;
|
||||
|
||||
final ArrayList<Task> tachesRestantes;
|
||||
|
||||
|
||||
/** Creates a new greedy solver that will use the given priority. */
|
||||
public GreedySolver(Priority p) {
|
||||
this.priority = p;
|
||||
this.tachesRestantes = new ArrayList<>();
|
||||
}
|
||||
|
||||
/** return true if t1 est plus prioritaire que t1 **/
|
||||
private boolean prioritaire(Instance instance, Task t1, Task t2) throws Exception {
|
||||
boolean rt = false;
|
||||
switch(priority) {
|
||||
case SPT:
|
||||
rt = instance.duration(t1) <= instance.duration(t2);
|
||||
break;
|
||||
case LPT:
|
||||
rt = instance.duration(t1) >= instance.duration(t2);
|
||||
break;
|
||||
case SRPT:
|
||||
int i;
|
||||
int sigmaT1 = 0;
|
||||
int sigmaT2 = 0;
|
||||
for (i=t1.task; i<instance.numTasks; i++) {
|
||||
sigmaT1 += instance.duration(t1.job, i);
|
||||
}
|
||||
for (i=t2.task; i<instance.numTasks; i++) {
|
||||
sigmaT2 += instance.duration(t2.job, i);
|
||||
}
|
||||
rt = sigmaT1 <= sigmaT2;
|
||||
break;
|
||||
case LRPT:
|
||||
sigmaT1 = 0;
|
||||
sigmaT2 = 0;
|
||||
for (i=t1.task; i<instance.numTasks; i++) {
|
||||
sigmaT1 += instance.duration(t1.job, i);
|
||||
}
|
||||
for (i=t2.task; i<instance.numTasks; i++) {
|
||||
sigmaT2 += instance.duration(t2.job, i);
|
||||
}
|
||||
rt = sigmaT1 >= sigmaT2;
|
||||
break;
|
||||
case EST_SPT:
|
||||
throw new Exception("UNKNOWN PRIORITY");
|
||||
//break;
|
||||
case EST_LPT:
|
||||
throw new Exception("UNKNOWN PRIORITY");
|
||||
//break;
|
||||
case EST_SRPT:
|
||||
throw new Exception("UNKNOWN PRIORITY");
|
||||
//break;
|
||||
case EST_LRPT:
|
||||
throw new Exception("UNKNOWN PRIORITY");
|
||||
//break;
|
||||
}
|
||||
return rt;
|
||||
}
|
||||
|
||||
private void addTask(Instance instance, Task task) throws Exception {
|
||||
Iterator<Task> iter = this.tachesRestantes.iterator();
|
||||
int index = 0;
|
||||
boolean trouve = false;
|
||||
while (iter.hasNext() && !trouve) {
|
||||
Task current = iter.next();
|
||||
if (this.prioritaire(instance, task, current)) {
|
||||
trouve = true;
|
||||
this.tachesRestantes.add(index, task);
|
||||
} else {
|
||||
index++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Result solve(Instance instance, long deadline) {
|
||||
throw new UnsupportedOperationException();
|
||||
//Initialisation
|
||||
int i;
|
||||
for (i=0; i<instance.numJobs; i++) {
|
||||
try {
|
||||
addTask(instance, new Task(i,0));
|
||||
} catch (Exception e) {
|
||||
System.out.println("ERREUR POLITIQUE DE PRIORITE INCONNUE");
|
||||
System.exit(2);
|
||||
}
|
||||
}
|
||||
Result result = null;
|
||||
|
||||
//Itérations
|
||||
while (!this.tachesRestantes.isEmpty()) {
|
||||
//TAF
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue