algorithmbox
Version:
A metaheuristic algorithm development framework for solving discrete optimization problem
164 lines (111 loc) • 4.06 kB
JavaScript
process.chdir("../src/");
console.log("switching to directory " + process.cwd());
var util = require('util');
var assert = require('assert');
var fs = require('fs');
var SAT = require('example/sat/Problem.js');
var GSAT = require('example/sat/Algorithms.js').GSAT_IIA;
var SAT_SA = require('example/sat/Algorithms.js').SAT_SA;
var SAT_TS = require('example/sat/Algorithms.js').SAT_TS;
exports.testTS = function(test){
//async read
fs.readFile('../test/satlib/uf20-01.cnf', {'encoding' : 'utf8'}, function(err, raw) {
test.ok(raw!=undefined,"error reading file");
var data = SAT.parseData(raw);
test.ok(SAT.validData(data), "data invalid");
var p = new SAT($M(data));
console.log("loaded problem with %d clauses %d variables", p.clauses(), p.variables());
var algs = new SAT_TS(p, {
'terminate_fitness' : p.clauses()
});
algs.run(function(step){
//console.log("step %d: %s", step, algs.cur_sol);
});
console.log("final solution %s", algs.cur_sol);
if(algs.lo_trap) console.log("algs local optima trap");
test.done();
});
}
exports.testSA = function(test){
//async read
fs.readFile('../test/satlib/uf20-01.cnf', {'encoding' : 'utf8'}, function(err, raw) {
test.ok(raw!=undefined,"error reading file");
var data = SAT.parseData(raw);
test.ok(SAT.validData(data), "data invalid");
var p = new SAT($M(data));
console.log("loaded problem with %d clauses %d variables", p.clauses(), p.variables());
var algs = new SAT_SA(p, {
'terminate_fitness' : p.clauses(),
'coolingscheme' : 'geometric'
});
algs.run(function(step){
//console.log("step %d: %s", step, algs.cur_sol);
});
console.log("final solution %s", algs.cur_sol);
if(algs.lo_trap) console.log("algs local optima trap");
test.done();
});
}
exports.testGSAT_IIA = function(test){
//async read
fs.readFile('../test/satlib/uf20-01.cnf', {'encoding' : 'utf8'}, function(err, raw) {
test.ok(raw!=undefined,"error reading file");
var data = SAT.parseData(raw);
test.ok(SAT.validData(data), "data invalid");
var p = new SAT($M(data));
console.log("loaded problem with %d clauses %d variables", p.clauses(), p.variables());
var algs = new GSAT(p,
{'terminate_fitness' : p.clauses(),
'terminate_ls_steps' : 50
});
algs.run(function(step){
//console.log("step %d: %s", step, algs.cur_sol);
});
console.log("final solution %s", algs.cur_sol);
if(algs.lo_trap) console.log("algs local optima trap");
test.done();
});
}
exports.testFitness = function(test){
var NUM_CLAUSES = 30;
var p = SAT.randomSAT(NUM_CLAUSES, 5, 3); //3-SAT with 10 clauses and 5 variables
test.ok(SAT.validData(p.data), "invalid random literal set");
//console.log(p.data);
for(var i=0;i<30;i++){
var sol = p.randsol();
test.ok(p.valid(sol));
var fit = p.fitness(sol);
test.ok(typeof(fit)=="number" && fit >= 0 && fit <= NUM_CLAUSES);
}
test.done();
}
exports.testRanSolution = function(test){
var p = SAT.randomSAT(10, 5, 3); //3-SAT with 10 clauses and 5 variables
test.ok(SAT.validData(p.data), "invalid random literal set");
var sol = p.randsol();
test.ok(p.valid(sol));
test.done();
}
exports.testRandomSAT = function(test){
var p = SAT.randomSAT(10, 5, 3); //3-SAT with 10 clauses and 5 variables
test.ok(SAT.validData(p.data), "invalid random literal set");
test.done();
}
exports.testSATLoad = function(test){
//async read
fs.readFile('../test/satlib/uf20-01.cnf', {'encoding' : 'utf8'}, function(err, raw) {
test.ok(raw!=undefined,"error reading file");
var data = SAT.parseData(raw);
test.ok(SAT.validData(data), "data invalid");
var p = new SAT($M(data));
console.log("loaded problem with %d clauses %d variables", p.clauses(), p.variables());
//some random solution
for(var i=0;i<10;i++){
var sol = p.randsol();
test.ok(p.valid(sol));
var fit = p.fitness(sol);
console.log("solution %s ==> (%d)", sol, fit);
}
test.done();
});
}