77 : fMster( master ) , fSlave( slave )
80 throw( std::invalid_argument(
"null master MPSolver" ) );
82 throw( std::invalid_argument(
"null slave MPSolver" ) );
89 MPSolver * get_master(
void ) {
return( fMster ); }
93 MPSolver * get_slave(
void ) {
return( fSlave ); }
99 virtual ~MPTester() {
delete fMster;
delete fSlave; };
106 const bool UsAvSt =
false ) override final
108 fMster->
SetDim( MxBSz , Oracle , UsAvSt );
109 fSlave->
SetDim( MxBSz , Oracle , UsAvSt );
127 fMster->
SetPar( wp , value );
128 fSlave->
SetPar( wp , value );
162 const char lvl = 0 ) override final
174 void SetMPTime(
const bool TimeIt =
true ) override final
192 if( master != slave )
211 CompareDouble( master , slave ,
"ReadFiBLambda" );
214 CompareDouble( master , slave ,
"ReadFiBLambda( all - 0 )" );
216 std::string mess(
"ReadFiBLambda( " + std::to_string( wFi ) +
" )" );
217 CompareDouble( master , slave , mess.data() );
230 CompareDouble( master , slave ,
"ReadDt" );
242 CompareDouble( master , slave ,
"ReadSigma" );
244 std::string mess(
"ReadSigma( " + std::to_string( wFi ) +
" )" );
245 CompareDouble( master , slave , mess.data() );
258 CompareDouble( master , slave ,
"ReadDStart" );
271 CompareVector( master , slave , fMster->
GetCrrSGLen() ,
"d" );
280 static std::vector< LMNum > slave;
285 fMster->
ReadZ( tz , I , D , wFi );
286 fSlave->
ReadZ( slave.data() , slaveI , slaveD , wFi );
290 CompareInt( D , slaveD ,
"ReadZ-D" );
291 CompareVector( tz , slave.data() , D ,
"z" );
297 const bool IncldCnst =
true ) override final
303 cHpRow slave = fSlave->
ReadMult( slaveI , slaveD , wFi , IncldCnst );
312 static std::vector< HpNum > denseD;
313 static std::vector< HpNum > denseSlaveD;
319 denseD[ i ] = denseSlaveD[ i ] = 0;
321 for( i = 0 ; i < D ; ++i )
322 denseD[ I[ i ] ] = master[ i ];
324 for( i = 0 ; i < slaveD ; ++i )
325 denseSlaveD[ slaveI[ i ] ] = slave[ i ];
328 CompareVector( denseD.data() , denseSlaveD.data() ,
331 std::string mess(
"Mult( " + std::to_string( wFi ) +
" )" );
332 CompareVector( denseD.data() , denseSlaveD.data() ,
347 CompareDouble( master , slave ,
"LBMult" );
349 std::string mess(
"LBMult( " + std::to_string( wFi ) +
" )" );
350 CompareDouble( master , slave , mess.data() );
363 CompareDouble( master , slave ,
"Gid" );
373 static std::vector< HpNum > sLmbd1;
379 CompareVector( Lmbd1 , sLmbd1.data() , fMster->
GetCrrSGLen() ,
392 CompareDouble( lp , slp ,
"SensitAnals-lp" );
393 CompareDouble( cp , scp ,
"SensitAnals-cp" );
400 Index GetMaxBSize(
void )
405 CompareInt( master , slave ,
"MaxBSize" );
411 Index GetMaxSGLen(
void )
416 CompareInt( master , slave ,
"MaxSGLen" );
422 Index GetCrrSGLen(
void )
427 CompareInt( master , slave ,
"CrrSGLen" );
433 Index GetNrFi(
void )
438 CompareInt( master , slave ,
"NrFi" );
449 CompareInt( master , slave ,
"BSize" );
460 CompareInt( master , slave ,
"BCsize" );
471 CompareInt( master , slave ,
"MaxName" );
482 CompareInt( master , slave ,
"WComponent" );
490 bool master = fMster->
IsSubG( i );
491 bool slave = fSlave->
IsSubG( i );
493 CompareBool( master , slave ,
"IsSubG" );
504 CompareInt( master , slave ,
"NumNNVars" );
515 CompareInt( master , slave ,
"NumBxdVars" );
523 bool master = fMster->
IsNN(i);
524 bool slave = fSlave->
IsNN(i);
526 CompareBool( master , slave ,
"IsNN" );
539 CompareInt( mBS , fSlave->
GetMaxBSize() ,
"GetMaxBSize" );
540 for(
int i = 0 ; i < mBS ; ++i )
542 if( ! CompareDouble( master[ i ] , slave[ i ] ) ) {
545 *MPLog << std::endl <<
"LinErr[ " << i <<
" ] = "
546 << master[ i ] <<
", " << slave[ i ];
560 CompareDouble( master , slave ,
"GlobalLowerBound" );
562 std::string mess(
"LowerBound( " + std::to_string( wFi ) +
" )" );
563 CompareDouble( master , slave , mess.data() );
576 CompareDouble( master , slave ,
"EpsilonD" );
586 fMsterItem = fMster->
GetItem( wFi );
587 fSlaveItem = fSlave->
GetItem( wFi );
591 return( fMsterItem );
598 memcpy( fSlaveItem , fMsterItem ,
sizeof(
SgNum ) * SGBDm );
611 HpNum slaveScPri = ScPri;
614 Index slave = fSlave->
CheckSubG( DFi , Tau , slaveAi , slaveScPri );
616 CompareInt( master , slave ,
"CheckSubG ret" );
617 CompareDouble( Ai , slaveAi ,
"CheckSubG Ai" );
618 CompareDouble( ScPri , slaveScPri ,
"CheckSubG ScPri" );
627 HpNum slaveScPri = ScPri;
632 CompareInt( master , slave ,
"CheckCnst ret" );
633 CompareDouble( Ai , slaveAi ,
"CheckCns Ai" );
634 CompareDouble( ScPri , slaveScPri ,
"CheckCnst ScPri" );
645 CompareBool( master , slave ,
"ChangesMPSol" );
726 fMster->
RmvVars( whch , hwmny );
727 fSlave->
RmvVars( whch , hwmny );
744 fMster->
ChgAlfa( NewAlfa , wFi );
745 fSlave->
ChgAlfa( NewAlfa , wFi );
780 fMster->
ChgSubG( strt , stp , wFi );
781 fSlave->
ChgSubG( strt , stp , wFi );
795 bool CompareDouble(
double master ,
double slave )
806 const double kMinPrecision = 1e-4;
808 return( std::abs( master - slave ) <= kMinPrecision *
809 std::max( std::abs( master ) , std::max(
double( 1 ) ,
810 std::abs( slave ) ) ) );
815 bool CompareDouble(
double master ,
double slave ,
816 const char *
const caller )
818 if( CompareDouble( master , slave ) )
822 *MPLog << std::endl << caller <<
": " << master <<
", " << slave;
828 bool CompareInt(
unsigned int master ,
unsigned int slave ,
829 const char *
const caller = 0 )
831 if( master == slave )
835 *MPLog << std::endl << caller <<
": " << master <<
", " << slave;
841 bool CompareBool(
bool master ,
bool slave ,
const char *
const caller )
843 if( master == slave )
847 *MPLog << std::endl << caller <<
": " << master <<
", " << slave;
853 bool CompareVector(
const double * master ,
const double * slave ,
int len ,
854 const char *
const caller )
858 for(
int i = 0 ; i < len ; ++i )
859 if( ! CompareDouble( master[ i ] , slave[ i ] ) ) {
862 *MPLog << std::endl << *caller <<
"[ " << i <<
" ] = "
863 << master[ i ] <<
", " << slave[ i ];
871 void CheckProblem(
void )
875 Index i = GetCrrSGLen();
Definition FiOracle.h:231
Definition MPSolver.h:121
virtual void RmvItems(void)=0
virtual void AddVars(cIndex NNwVrs)=0
virtual MPStatus SolveMP(void)=0
virtual HpNum ReadLBMult(cIndex wFi=Inf< Index >())=0
virtual HpNum ReadFiBLambda(cIndex wFi=Inf< Index >())=0
virtual HpNum ReadSigma(cIndex wFi=Inf< Index >())=0
virtual HpNum ReadDt(cHpNum tt=1)=0
virtual cHpRow ReadLinErr(void)=0
virtual void MakeLambda1(cHpRow Lmbd, HpRow Lmbd1, cHpNum Tau)=0
virtual Index WComponent(cIndex i)=0
virtual HpNum EpsilonD(void)=0
MPSolver(void)
Definition MPSolver.h:168
virtual cLMRow Readd(bool Fulld=false)=0
virtual void SetDim(cIndex MxBSz=0, FiOracle *Oracle=nullptr, const bool UsAvSt=false)
Definition MPSolver.h:278
virtual void ChgAlfa(cHpRow DeltaAlfa)=0
virtual void ChgSubG(cIndex strt, Index stp, cIndex wFi)=0
virtual HpNum ReadLowerBound(cIndex wFi=Inf< Index >())=0
virtual void AddActvSt(cIndex_Set Addd, cIndex AdDm, cIndex_Set AVrs)=0
virtual cHpRow ReadMult(cIndex_Set &I, Index &D, cIndex wFi=Inf< Index >(), const bool IncldCnst=true)=0
virtual void RmvActvSt(cIndex_Set Rmvd, cIndex RmDm, cIndex_Set AVrs)=0
Index GetCrrSGLen(void)
returns the current subgradient length
Definition MPSolver.h:900
virtual void SetItemBse(cIndex_Set SGBse=0, cIndex SGBDm=0)=0
virtual void ChangeCurrPoint(cLMRow DLambda, cHpRow DFi)=0
virtual Index MaxName(cIndex wFi=Inf< Index >())=0
virtual void SetActvSt(cIndex_Set AVrs=0, cIndex AVDm=0)=0
virtual Index BCSize(cIndex wFi=Inf< Index >())=0
returns the current number of constraints in the bundle.
virtual void SubstItem(cIndex Nm)=0
virtual HpNum ReadGid(cIndex Nm=Inf< Index >())=0
Index GetNrFi(void)
returns the number of components of Fi()
Definition MPSolver.h:905
virtual HpNum ReadDStart(cHpNum tt=1)=0
virtual Index CheckCnst(HpNum &Ai, HpNum &ScPri, cHpRow CrrPnt)=0
virtual Index BSize(cIndex wFi=Inf< Index >())=0
returns the current number of items (of either type) in the bundle.
Index GetMaxBSize(void)
returns the maximum bundle size
Definition MPSolver.h:890
virtual Index NumNNVars(void)
Definition MPSolver.h:947
virtual void Sett(cHpNum tt=1)=0
Index GetMaxSGLen(void)
returns the maximum subgradient length
Definition MPSolver.h:895
virtual SgRow GetItem(cIndex wFi=Inf< Index >())=0
virtual bool IsNN(cIndex i)
Definition MPSolver.h:963
virtual void RmvVars(cIndex_Set whch=0, Index hwmny=0)=0
virtual void ReadZ(LMRow tz, cIndex_Set &I, Index &D, cIndex wFi=Inf< Index >())=0
MPStatus
Definition MPSolver.h:151
virtual void SensitAnals(HpNum &lp, HpNum &cp)=0
virtual void SetItem(cIndex Nm=Inf< Index >())=0
virtual bool IsSubG(cIndex i)=0
virtual bool ChangesMPSol(void)=0
virtual Index NumBxdVars(void)
Definition MPSolver.h:956
virtual void RmvItem(cIndex i)=0
virtual Index CheckSubG(cHpNum DFi, cHpNum Tau, HpNum &Ai, HpNum &ScPri)=0
void RmvItems(void) override final
Definition MPTester.h:677
void RmvActvSt(cIndex_Set Rmvd, cIndex RmDm, cIndex_Set AVrs) override final
Definition MPTester.h:705
HpNum ReadLowerBound(cIndex wFi=Inf< Index >()) override final
Definition MPTester.h:554
Index WComponent(cIndex i) override final
Definition MPTester.h:477
void RmvVars(cIndex_Set whch=0, Index hwmny=0) override final
Definition MPTester.h:724
void SetLowerBound(cHpNum LwBnd=- Inf< HpNum >(), cIndex wFi=Inf< Index >()) override final
Definition MPTester.h:142
HpNum ReadDStart(cHpNum tt=1) override final
Definition MPTester.h:253
void ChgAlfa(cHpRow NewAlfa, cIndex wFi) override final
Definition MPTester.h:742
void RmvItem(cIndex i) override final
Definition MPTester.h:668
cHpRow ReadMult(cIndex_Set &I, Index &D, cIndex wFi=Inf< Index >(), const bool IncldCnst=true) override final
Definition MPTester.h:296
void SubstItem(cIndex Nm) override final
Definition MPTester.h:659
void SetMPLog(std::ostream *outs=NULL, const char lvl=0) override final
Definition MPTester.h:161
void MakeLambda1(cHpRow Lmbd, HpRow Lmbd1, cHpNum Tau) override final
Definition MPTester.h:369
void SetItem(cIndex Nm=Inf< Index >()) override final
Definition MPTester.h:651
HpNum EpsilonD(void) override final
Definition MPTester.h:571
void SetActvSt(cIndex_Set AVrs=0, cIndex AVDm=0) override final
Definition MPTester.h:686
void SetMPTime(const bool TimeIt=true) override final
Definition MPTester.h:174
cLMRow Readd(bool Fulld=false) override final
Definition MPTester.h:264
void ChgSubG(cIndex strt, Index stp, cIndex wFi) override final
Definition MPTester.h:778
Index CheckCnst(HpNum &Ai, HpNum &ScPri, cHpRow CrrPnt) override final
Definition MPTester.h:624
void SetItemBse(cIndex_Set SGBse=0, cIndex SGBDm=0) override final
Definition MPTester.h:596
HpNum ReadFiBLambda(cIndex wFi=Inf< Index >()) override final
Definition MPTester.h:202
MPStatus SolveMP(void) override final
Definition MPTester.h:185
void ChgAlfa(cIndex i, cHpNum Ai) override final
Definition MPTester.h:751
bool IsSubG(cIndex i) override final
Definition MPTester.h:488
void ChgAlfa(cHpRow DeltaAlfa) override final
Definition MPTester.h:733
bool IsNN(cIndex i) override final
Definition MPTester.h:521
HpNum ReadGid(cIndex Nm=Inf< Index >()) override final
Definition MPTester.h:358
Index NumNNVars(void) override final
Definition MPTester.h:499
void CheckIdentical(const bool Chk=true) override final
Definition MPTester.h:152
Index CheckSubG(cHpNum DFi, cHpNum Tau, HpNum &Ai, HpNum &ScPri) override final
Definition MPTester.h:607
void SetThreads(int nthreads) override final
Definition MPTester.h:134
void AddVars(cIndex NNwVrs) override final
Definition MPTester.h:715
void ChangeCurrPoint(cLMRow DLambda, cHpRow DFi) override final
Definition MPTester.h:760
HpNum ReadLBMult(cIndex wFi=Inf< Index >()) override final
Definition MPTester.h:341
Index BSize(cIndex wFi=Inf< Index >()) override final
returns the current number of items (of either type) in the bundle.
Definition MPTester.h:444
bool ChangesMPSol(void) override final
Definition MPTester.h:640
HpNum ReadDt(cHpNum tt=1) override final
Definition MPTester.h:225
void ChangeCurrPoint(cHpNum Tau, cHpRow DFi) override final
Definition MPTester.h:769
void SensitAnals(HpNum &lp, HpNum &cp) override final
Definition MPTester.h:385
void Sett(cHpNum tt=1) override final
Definition MPTester.h:116
void SetPar(const int wp, cHpNum value) override final
Definition MPTester.h:125
SgRow GetItem(cIndex wFi=Inf< Index >()) override final
Definition MPTester.h:584
Index BCSize(cIndex wFi=Inf< Index >()) override final
returns the current number of constraints in the bundle.
Definition MPTester.h:455
void AddActvSt(cIndex_Set Addd, cIndex AdDm, cIndex_Set AVrs) override final
Definition MPTester.h:695
Index NumBxdVars(void) override final
Definition MPTester.h:510
Index MaxName(cIndex wFi=Inf< Index >()) override final
Definition MPTester.h:466
void SetDim(cIndex MxBSz=0, FiOracle *Oracle=nullptr, const bool UsAvSt=false) override final
Definition MPTester.h:105
cHpRow ReadLinErr(void) override final
Definition MPTester.h:532
HpNum ReadSigma(cIndex wFi=Inf< Index >()) override final
Definition MPTester.h:236
void ReadZ(LMRow tz, cIndex_Set &I, Index &D, cIndex wFi=Inf< Index >()) override final
Definition MPTester.h:277
HpNum * HpRow
"finer" (fp) array
Definition OPTtypes.h:99
const HpNum cHpNum
a read-only HpNum
Definition OPTtypes.h:102
double HpNum
"finer" floating point numbers
Definition OPTtypes.h:98
const Index cIndex
a read-only Index
Definition OPTtypes.h:64
cIndex * cIndex_Set
read-only array
Definition OPTtypes.h:65
unsigned int Index
Index in a vector ( >= 0 )
Definition OPTtypes.h:60
cHpNum * cHpRow
read-only array
Definition OPTtypes.h:103
SgNum * SgRow
a subgradient
Definition OPTtypes.h:112
LMNum * LMRow
a vector of Lagrangean Multipliers
Definition OPTtypes.h:130
cLMNum * cLMRow
a read-only vector of LMs
Definition OPTtypes.h:134
double SgNum
subgradient entries
Definition OPTtypes.h:111
static constexpr T Inf(void) noexcept
Inf< T >() = infinity value for T.
Definition OPTUtils.h:357
virtual void SetPar(const int wp, cHpNum value)=0
virtual void CheckIdentical(const bool Chk=true)
Definition MPSolver.h:396
virtual void SetLowerBound(cHpNum LwBnd=- Inf< HpNum >(), cIndex wFi=Inf< Index >())=0
virtual void SetMPTime(const bool TimeIt=true)
Definition MPSolver.h:426
virtual void SetThreads(int nthreads)
Definition MPSolver.h:343
virtual void SetMPLog(std::ostream *outs=0, const char lvl=0)
Definition MPSolver.h:408