logger.info("Total number of " + model.variables().size() + " activities generated.");
return model;
}
public void start() throws InterruptedException {
DataProperties properties = new DataProperties();
properties.setProperty("General.Seed", "123321");
UniTimeSimpleModel model = createModel();
Solver solver = new Solver(properties);
condition.init();
solver.setTerminalCondition(new TerminationCondition() {
@Override
public boolean canContinue(Solution sltn) {
return condition.canContinue() && !statusBar.getMyProgressMonitor().isCanceled();
}
});
Progress p = new Progress();
p.addProgressListener(new ProgressListener() {
private String status;
@Override
public void statusChanged(String status) {
this.status = status;
}
@Override
public void phaseChanged(String phase) {
}
@Override
public void progressChanged(long currentProgress, long maxProgress) {
statusBar.setMessage(status + " " + currentProgress * 100f / maxProgress);
}
@Override
public void progressSaved() {
}
@Override
public void progressRestored() {
}
@Override
public void progressMessagePrinted(Message message) {
statusBar.setMessage(message.getMessage());
}
});
solver.setProgress(p);
solver.setInitalSolution(model);
solver.start();
solver.getSolverThread().join();
if (solver.lastSolution().getBestInfo() == null)
logger.severe("No solution found :-(");
logger.info("Last solution:" + solver.lastSolution().getInfo());
logger.info("Best solution:" + solver.lastSolution().getBestInfo());
Solution best = solver.lastSolution();
best.restoreBest();
int value = 0;
for (Enumeration iv = best.getModel().assignedVariables().elements(); iv.hasMoreElements();) {
value += (int) ((Variable) iv.nextElement()).getAssignment().toDouble();
}
logger.info("Last solution:" + best.getInfo());
logger.info(doubleFormat.format(properties.getPropertyDouble("Generator.FillFactor", 0.0)) + ";"
+ doubleFormat.format(properties.getPropertyInt("Generator.NrRooms", 0)) + ";");
logger.info(doubleFormat.format(best.getTime()) + ";" + best.getIteration() + ";"
+ doubleFormat.format(((double) best.getIteration()) / best.getTime()) + ";");
logger.info(best.getModel().assignedVariables().size() + ";"
+ doubleFormat.format(100.0 * best.getModel().assignedVariables().size()
/ best.getModel().variables().size()) + ";" + value);