Made a bit more readable with Ivan

release/4.3a0
dellaert 2018-11-06 13:39:05 -05:00
parent e00c84227f
commit 2d9d3af8e8
3 changed files with 15 additions and 10 deletions

View File

@ -61,7 +61,7 @@ struct QPSParser::MPSGrammar: base_grammar {
void(
bf::vector<Chars, Chars, Chars, Chars, Chars, Chars, Chars, double> const &)> addBound;
boost::function<
void(bf::vector<Chars, Chars, Chars, Chars, Chars, Chars, Chars> const &)> addBoundFr;
void(bf::vector<Chars, Chars, Chars, Chars, Chars, Chars, Chars> const &)> addFreeBound;
MPSGrammar(QPSVisitor * rqp) :
base_grammar(start), rqp_(rqp), setName(
boost::bind(&QPSVisitor::setName, rqp, ::_1)), addRow(
@ -73,8 +73,8 @@ struct QPSParser::MPSGrammar: base_grammar {
boost::bind(&QPSVisitor::addColumn, rqp, ::_1)), colDouble(
boost::bind(&QPSVisitor::addColumnDouble, rqp, ::_1)), addQuadTerm(
boost::bind(&QPSVisitor::addQuadTerm, rqp, ::_1)), addBound(
boost::bind(&QPSVisitor::addBound, rqp, ::_1)), addBoundFr(
boost::bind(&QPSVisitor::addBoundFr, rqp, ::_1)) {
boost::bind(&QPSVisitor::addBound, rqp, ::_1)), addFreeBound(
boost::bind(&QPSVisitor::addFreeBound, rqp, ::_1)) {
using namespace boost::spirit;
using namespace boost::spirit::qi;
character = lexeme[alnum | '_' | '-' | '.'];
@ -100,7 +100,7 @@ struct QPSParser::MPSGrammar: base_grammar {
bound = lexeme[(*blank >> word >> +blank >> word >> +blank >> word >> +blank
>> double_)[addBound] >> *blank];
bound_fr = lexeme[*blank >> word >> +blank >> word >> +blank >> word
>> *blank][addBoundFr];
>> *blank][addFreeBound];
rows = lexeme[lit("ROWS") >> *blank >> eol >> +(row >> eol)];
rhs = lexeme[lit("RHS") >> *blank >> eol
>> +((rhs_double | rhs_single) >> eol)];

View File

@ -211,7 +211,7 @@ void QPSVisitor::addBound(
}
}
void QPSVisitor::addBoundFr(
void QPSVisitor::addFreeBound(
boost::fusion::vector<vector<char>, vector<char>,
vector<char>, vector<char>, vector<char>,
vector<char>, vector<char>> const &vars) {
@ -241,12 +241,15 @@ void QPSVisitor::addQuadTerm(
}
QP QPSVisitor::makeQP() {
// Create the keys from the variable names
vector < Key > keys;
vector < Matrix > Gs;
vector < Vector > gs;
for (auto kv : varname_to_key) {
keys.push_back(kv.second);
}
// Fill the G matrices and g vectors from
vector < Matrix > Gs;
vector < Vector > gs;
sort(keys.begin(), keys.end());
for (unsigned int i = 0; i < keys.size(); ++i) {
for (unsigned int j = i; j < keys.size(); ++j) {
@ -266,12 +269,14 @@ QP QPSVisitor::makeQP() {
gs.emplace_back(Z_1x1);
}
}
size_t dual_key_num = keys.size() + 1;
// Construct the quadratic program
QP madeQP;
auto obj = HessianFactor(keys, Gs, gs, 2 * f);
madeQP.cost.push_back(obj);
// Add equality and inequality constraints into the QP
size_t dual_key_num = keys.size() + 1;
for (auto kv : E) {
map < Key, Matrix11 > keyMatrixMapPos;
map < Key, Matrix11 > keyMatrixMapNeg;

View File

@ -104,7 +104,7 @@ public:
std::vector<char>, std::vector<char>, std::vector<char>,
std::vector<char>, std::vector<char>, double> const & vars);
void addBoundFr(
void addFreeBound(
boost::fusion::vector<std::vector<char>, std::vector<char>,
std::vector<char>, std::vector<char>, std::vector<char>,
std::vector<char>, std::vector<char>> const & vars);