Residuals(const Problem& problem, const Omega& omega, const Psi& psi)
     : normOfC{problem.c.norm()},
       normOfB{problem.b.norm()},
       AXPlusS{problem.A * omega.x + psi.s},
       ATransposeY{problem.A.transpose() * omega.y},
       cTransposeX{problem.c.transpose() * omega.x},
       bTranspoesY{problem.b.transpose() * omega.y},
       primal{getPrimal(problem, omega, psi)},
       dual{getDual(problem, omega)},
       primalDualGap{getGap(problem, omega)},
       unbounded{cTransposeX < 0 ? AXPlusS.norm() * normOfC / -cTransposeX
                                 : NAN},
       infeasible{bTranspoesY < 0 ? ATransposeY.norm() * normOfB / -bTranspoesY
                                  : NAN} {}
Exemple #2
0
uint Board::scoreMove(const Cell* cell, AXIS::Axis axis) {
    uint primaryScore = scoreAxis(cell, axis);
    uint dualScores = 0;
    uint numChanged = 0;
    Cell *from, *to;
    uint incr = getIncrement(axis);
    AXIS::Axis dual = getDual(axis);
    if (getEndpoints(cell, axis, from, to)) {
        for (const Cell* c = from; c <= to; c += incr) {
            if (changed(c)) {
                numChanged++;
                uint sec = scoreAxis(c, dual, "   ");
                dualScores += sec;
            }
        }
    }
    uint totalScore = primaryScore + dualScores;
    if(numChanged == Common::rackSize) totalScore+=Common::bingoValue;
    return totalScore;
}