/*Includes all Lysgaard package headers*/

#ifndef _LYSGAARDPACKAGEHEADERS_H
#define _LYSGAARDPACKAGEHEADERS_H

#include "MEMMOD.h"
#include "BASEGRPH.h"
#include "SORT.h"
#include "CNSTRMGR.h"
#include "STRNGCMP.h"
#include "CUTBASE.h"
#include "COMPRESS.h"
#include "COMPCUTS.h"
#include "MXF.h"
#include "FCAPFIX.h"
#include "Grsearch.h"
#include "CAPSEP.h"
#include "HPMSTAR.h"
#include "MSTARSEP.h"
#include "BINPACK.h"
#include "FCITS.h"
#include "FCISEP.h"
#include "TWOMATCH.h"
#include "STRCOMB.h"
#include "COMBSEP.h"
#include "GLMSEP.h"
#include "BLOCKS.h"
#include "INTAP.h"
#include "NEWHTOUR.h"
#include "HTOURSEP.h"
#include "BRNCHING.h"

#endif

//Code for testing:
/*
std::cout << std::endl << "----------------------------------------------------" << std::endl;
//multistar
CnstrMgrPointer MyCutsCMP2;
CMGR_CreateCMgr(&MyCutsCMP2,AlgorithmSettings.CCSettings.MaxCCPerIterationPerScenario);
MSTARSEP_SeparateMultiStarCuts(Instance.NumberOfCustomers,Demand,int(Instance.VehicleCapacity),NoOfEdges,EdgeTail,EdgeHead,EdgeX,LysgaardCuts.at(k),AlgorithmSettings.CCSettings.MaxCCPerIterationPerScenario,&MaxViolation,MyCutsCMP2);
std::cout << "Multistar cuts:                   " << MyCutsCMP2->Size << std::endl;
//generalized large multistar
int CustListSize;
double Violation;
int *CustList;
CustList=new int[Instance.NumberOfCustomers+1];
GLMSEP_SeparateGLM(Instance.NumberOfCustomers,Demand,int(Instance.VehicleCapacity),NoOfEdges,EdgeTail,EdgeHead,EdgeX,CustList,&CustListSize,&MaxViolation);
std::cout << "Generalized large multistar cuts: " << CustListSize << std::endl;
//framed capacity cuts
CnstrMgrPointer MyCutsCMP4;
CMGR_CreateCMgr(&MyCutsCMP4,AlgorithmSettings.CCSettings.MaxCCPerIterationPerScenario);
FCISEP_SeparateFCIs(Instance.NumberOfCustomers,Demand,int(Instance.VehicleCapacity),NoOfEdges,EdgeTail,EdgeHead,EdgeX,LysgaardCuts.at(k),10,AlgorithmSettings.CCSettings.MaxCCPerIterationPerScenario,&MaxViolation,MyCutsCMP4);
std::cout << "Framed capacity cuts:             " << MyCutsCMP4->Size << std::endl;
//Strengthened comb inequalities
CnstrMgrPointer MyCutsCMP5;
CMGR_CreateCMgr(&MyCutsCMP5,AlgorithmSettings.CCSettings.MaxCCPerIterationPerScenario);
COMBSEP_SeparateCombs(Instance.NumberOfCustomers,Demand,int(Instance.VehicleCapacity),1,NoOfEdges,EdgeTail,EdgeHead,EdgeX,AlgorithmSettings.CCSettings.MaxCCPerIterationPerScenario,&MaxViolation,MyCutsCMP5);
std::cout << "Strengthened comb inequalities:   " << MyCutsCMP5->Size << std::endl;
//Hypotour inequalities
CnstrMgrPointer MyCutsCMP6;
CMGR_CreateCMgr(&MyCutsCMP6,AlgorithmSettings.CCSettings.MaxCCPerIterationPerScenario);
HTOURSEP_SeparateHTours(Instance.NumberOfCustomers,Demand,int(Instance.VehicleCapacity),NoOfEdges,EdgeTail,EdgeHead,EdgeX,LysgaardCuts.at(k),AlgorithmSettings.CCSettings.MaxCCPerIterationPerScenario,&MaxViolation,MyCutsCMP6);
std::cout << "Hypotour inequalities:            " << MyCutsCMP6->Size << std::endl;
*/