40 std::vector<double> m_fixed_costs;
41 std::vector<double> m_capacities;
44 std::vector<double> m_demands;
45 std::optional<std::vector<double>> m_per_unit_penalties;
48 std::vector<std::vector<double>> m_per_unit_transportation_costs;
50 explicit Instance(
unsigned int t_n_facilities,
unsigned int t_n_customers);
52 [[nodiscard]]
unsigned int n_facilities()
const {
return m_fixed_costs.size(); }
53 [[nodiscard]]
unsigned int n_customers()
const {
return m_demands.size(); }
55 [[nodiscard]]
virtual double fixed_cost(
unsigned int t_i)
const {
return m_fixed_costs[t_i]; }
56 [[nodiscard]]
virtual double capacity(
unsigned int t_i)
const {
return m_capacities[t_i]; }
57 [[nodiscard]]
virtual double demand(
unsigned int t_j)
const {
return m_demands[t_j]; }
58 [[nodiscard]]
virtual double per_unit_transportation_cost(
unsigned int t_i,
unsigned int t_j)
const {
return m_per_unit_transportation_costs[t_i][t_j]; }
59 [[nodiscard]]
virtual bool has_penalties()
const {
return m_per_unit_penalties.has_value(); }
60 [[nodiscard]]
virtual double per_unit_penalty(
unsigned int t_j)
const {
return (*m_per_unit_penalties)[t_j]; }
62 void set_fixed_cost(
unsigned int t_i,
double t_value) { m_fixed_costs[t_i] = t_value; }
63 void set_capacity(
unsigned int t_i,
double t_value) { m_capacities[t_i] = t_value; }
64 void set_demand(
unsigned int t_j,
double t_value) { m_demands[t_j] = t_value; }
65 void set_per_unit_transportation_cost(
unsigned int t_i,
unsigned int t_j,
double t_value) { m_per_unit_transportation_costs[t_i][t_j] = t_value; }
66 void set_per_unit_penalty(
unsigned int t_j,
double t_value);