#ifndef DUAL_SOLUTION_H
#define DUAL_SOLUTION_H


#include "Header.h"
#include "Instance.h"

/**
*	\class DualSolution.
*	\brief	Stores the value of dual variables related to the master problem's constraints.
*/
class DualSolution {

//protected:
public:
	vector<double>				pi; //packing
	vector<double>		gamma; //branch
	vector<double>		sigma; //SSI
	double beta;				//dual bound

public:
	/**
	 * \brief Constructor by default.
	 *
	 */
	DualSolution();

	/**
	 * \brief Constructor with instance.
	 *
	 */
	DualSolution(const vector<double>& pi, const vector<double>& gamma, const vector<double>& sigma, const double& beta);

	/**
	 * \brief Copy constructor.
	 *
	 */
	DualSolution(const DualSolution& dual_solution);

	/**
	 * \brief Destructor.
	 *
	 */
	~DualSolution();

	/**
	*	\brief Gets the value of alpha[i].
	* 
	*/
	double get_pi_i(const int i) const;
	double get_gamma_i(const int i) const;
	double get_sigma_i(const int i) const;
	const vector<double>& get_sigma() const;
	double get_beta() const;

	string toString() const;

	/**
	*	\brief	Operator assignment
	*	\param new_subject : Subject
	*	\return Subject : The result of assigning all the attributs of new_Subject to the current customer.
	*/
	DualSolution& operator=(const DualSolution& new_dual_solution);
};

#endif //DUAL_SOLUTION_H