full_exact_pricing.h
来自「CGAL is a collaborative effort of severa」· C头文件 代码 · 共 176 行
H
176 行
// Copyright (c) 1997-2001 ETH Zurich (Switzerland).// All rights reserved.//// This file is part of CGAL (www.cgal.org); you may redistribute it under// the terms of the Q Public License version 1.0.// See the file LICENSE.QPL distributed with CGAL.//// Licensees holding a valid commercial license may use this file in// accordance with the commercial license agreement provided with the software.//// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.//// $Source: /CVSROOT/CGAL/Packages/_QP_solver/include/CGAL/_QP_solver/Full_exact_pricing.h,v $// $Revision: 1.6 $ $Date: 2004/09/03 17:41:10 $// $Name: $//// Author(s) : Sven Schoenherr <sven@inf.ethz.ch> #ifndef CGAL_FULL_EXACT_PRICING_H#define CGAL_FULL_EXACT_PRICING_H// includes#include <CGAL/_QP_solver/Pricing_strategy_base.h>#include <CGAL/_QP_solver/Join_random_access_iterator.h>#include <CGAL/_QP_solver/Access_by_index.h>#include <numeric>CGAL_BEGIN_NAMESPACE // Class declaration// =================template < class Rep >class Full_exact_pricing; // Class interface// ===============template < class _Rep >class Full_exact_pricing : public CGAL::Pricing_strategy_base<_Rep> { public: // self typedef _Rep Rep; typedef Full_exact_pricing<Rep> Self; typedef Pricing_strategy_base<Rep> Base; // types from the base class typedef typename Base::NT NT; typedef typename Base::ET ET; typedef typename Base::A_iterator A_iterator; typedef typename Base::B_iterator B_iterator; typedef typename Base::C_iterator C_iterator; typedef typename Base::D_iterator D_iterator; typedef typename Base::A_artificial_iterator A_artificial_iterator; typedef typename Base::C_auxiliary_iterator C_auxiliary_iterator; typedef typename Base::Basic_variable_index_iterator Basic_variable_index_iterator; typedef typename Base::Is_lp Is_lp; typedef typename Base::Solver Solver; typedef typename Base::Tag_true Tag_true; typedef typename Base::Tag_false Tag_false; using Base::vout; using Base::solver; private: // some constants ET et_0, et_2; public: // creation Full_exact_pricing( ) : et_0( 0), et_2( 2) { } // initialization void set( ) { CGAL_optimisation_debug { vout() << "full exact pricing" << std::endl; } } // operations int pricing( ) { typedef CGAL::Access_by_index< typename std::iterator_traits<D_iterator>::value_type, false,false> Access_D_Bj; typedef CGAL::Join_random_access_iterator_1< Basic_variable_index_iterator, Access_D_Bj > D_Bj_iterator; const Solver& s = solver(); int n = s.number_of_variables(); int m = s.number_of_constraints(); ET d = s.variables_common_denominator(); int j, min_j = -1; ET mu, min_mu = 0; bool is_phase_I = ( s.phase() == 1); // loop over all non-basic variables for ( j = 0; j < ( is_phase_I ? n+m : n); ++j) { // variable non-basic? if ( ! s.is_basic( j)) { // compute mu_j if ( is_phase_I) { // phase I if ( j < n) { // original variable mu = std::inner_product( s.lambda_numerator_begin(), s.lambda_numerator_end(), s.a_begin()[ j], d * s.c_auxiliary_begin()[ j]); } else { // artificial variable mu = std::inner_product( s.lambda_numerator_begin(), s.lambda_numerator_end(), s.a_artificial_begin()[ j-n], d * s.c_auxiliary_begin()[ j]); } } else { // phase II mu = std::inner_product( s.lambda_numerator_begin(), s.lambda_numerator_end(), s.a_begin()[ j], d * s.c_begin()[ j]); // is QP? if ( ! CGAL::check_tag( Is_lp())) { mu += et_2 * std::inner_product( s.basic_variables_numerator_begin(), s.basic_variables_numerator_end(), D_Bj_iterator( s.basic_variables_index_begin(), Access_D_Bj( s.d_begin()[ j])), et_0); } } CGAL_optimisation_debug { vout() << "mu_" << j << ": " << mu << std::endl; } // new minimum? if ( mu < min_mu) { min_j = j; min_mu = mu; } } } vout() << std::endl; // return index of entering variable return min_j; } }; CGAL_END_NAMESPACE #endif // CGAL_FULL_EXACT_PRICING_H// ===== EOF ==================================================================
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?