// Copyright 2008, 2009 Brady J. Garvin
// This file is part of Covering Arrays by Simulated Annealing (CASA).
// CASA 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 3 of the License, or
// (at your option) any later version.
// CASA 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 CASA. If not, see .
#include
#include
#include
#include
#include "io/Usage.H"
#include "io/SpecificationFile.H"
#include "io/ConstraintFile.H"
#include "io/OutputFile.H"
#include "covering/state/CoveringArray.H"
#include "annealing/Anneal.H"
using namespace std;
int main(int argc, char**argv) {
// Absorb the command line arguments into shared variables.
parseOptions(argc, argv);
// Process the random seed.
if (!seeded) {
seed = time(NULL);
cout << "Choosing random seed " << seed << endl;
}
srand(seed);
// Process the specification file.
SpecificationFile specification(modelFile);
// Process the constraints file.
ConstraintFile constraints(constraintFile ? constraintFile : "");
// ready the output file
ostringstream defaultOutputFile("anneal", ios::out | ios::app);
if (!outputFile) {
defaultOutputFile << '.' << seed;
defaultOutputFile << ".out";
cout << "Using output filename " << defaultOutputFile.str() << endl;
}
OutputFile output(outputFile ? outputFile : defaultOutputFile.str());
// Start the core algorithm.
if (verbose) {
cout << "Passing control to primary algorithm" << endl;
}
CoveringArray solution =
anneal
(specification,
constraints,
iterations,
startingTemperature,
decrement);
if (verbose) {
cout << "Control returned from primary algorithm" << endl;
}
// Store the results in the output file.
output.setCoveringArray(solution);
output.write();
if (verbose) {
cout << "Done" << endl;
}
return 0;
}