// Copyright (C) 2026 Kiyotsugu Arai // SPDX-License-Identifier: LGPL-3.0-or-later // linear_programming_impl.hpp — simplex, simplexMaximize の実装 #ifndef SANGI_LINEAR_PROGRAMMING_IMPL_HPP #define SANGI_LINEAR_PROGRAMMING_IMPL_HPP #include namespace sangi { template LPResult simplex( const LinearProgram& lp, T eps, size_t maxIterations) { if (lp.numVariables() == 0 || lp.numConstraints() == 0) { return LPResult::infeasible(0); } detail::SimplexSolver solver(lp, eps, maxIterations); return solver.solve(); } template LPResult simplexMaximize( const LinearProgram& lp, T eps, size_t maxIterations) { // 目的関数の符号を反転してコピー LinearProgram minLP = lp; for (auto& c : minLP.objective) { c = -c; } minLP.objectiveConstant = -lp.objectiveConstant; auto result = simplex(minLP, eps, maxIterations); // 目的関数値の符号を戻す result.objectiveValue = -result.objectiveValue; return result; } } // namespace sangi #endif // SANGI_LINEAR_PROGRAMMING_IMPL_HPP