CGeneticTSPSolver::CGeneticTSPSolver(CCityLocData *inputData, int nGenes, int nGroups) { cityLocData = inputData; nPopulation = nGenes; nNumberOfGroups = nGroups; nCities = cityLocData->numCities; mFitness = new float[nPopulation]; mPhenotype = new int*[nPopulation]; initSolver(); }
TEST(LPInitSolver, initialization) { LP lp = simpleLP1(); LPInitSolver initSolver(lp); GaussianFactorGraph::shared_ptr initOfInitGraph = initSolver.buildInitOfInitGraph(); VectorValues x0 = initOfInitGraph->optimize(); VectorValues expected_x0; expected_x0.insert(1, Vector::Zero(2)); CHECK(assert_equal(expected_x0, x0, 1e-10)); double y0 = initSolver.compute_y0(x0); double expected_y0 = 0.0; DOUBLES_EQUAL(expected_y0, y0, 1e-7); Key yKey = 2; LP::shared_ptr initLP = initSolver.buildInitialLP(yKey); LP expectedInitLP; expectedInitLP.cost = LinearCost(yKey, kOne); expectedInitLP.inequalities.push_back(LinearInequality( 1, Vector2(-1, 0), 2, Vector::Constant(1, -1), 0, 1)); // -x1 - y <= 0 expectedInitLP.inequalities.push_back(LinearInequality( 1, Vector2(0, -1), 2, Vector::Constant(1, -1), 0, 2)); // -x2 - y <= 0 expectedInitLP.inequalities.push_back( LinearInequality(1, Vector2(1, 2), 2, Vector::Constant(1, -1), 4, 3)); // x1 + 2*x2 - y <= 4 expectedInitLP.inequalities.push_back( LinearInequality(1, Vector2(4, 2), 2, Vector::Constant(1, -1), 12, 4)); // 4x1 + 2x2 - y <= 12 expectedInitLP.inequalities.push_back( LinearInequality(1, Vector2(-1, 1), 2, Vector::Constant(1, -1), 1, 5)); // -x1 + x2 - y <= 1 CHECK(assert_equal(expectedInitLP, *initLP, 1e-10)); LPSolver lpSolveInit(*initLP); VectorValues xy0(x0); xy0.insert(yKey, Vector::Constant(1, y0)); VectorValues xyInit = lpSolveInit.optimize(xy0).first; VectorValues expected_init; expected_init.insert(1, Vector::Ones(2)); expected_init.insert(2, Vector::Constant(1, -1)); CHECK(assert_equal(expected_init, xyInit, 1e-10)); VectorValues x = initSolver.solve(); CHECK(lp.isFeasible(x)); }
PBDSolver::PBDSolver() { initSolver(); }