Vol  1.5.4
 All Classes Files Functions Variables Enumerations Enumerator Friends Macros
ufl.hpp
Go to the documentation of this file.
1 // Copyright (C) 2000, International Business Machines
2 // Corporation and others. All Rights Reserved.
3 // This code is licensed under the terms of the Eclipse Public License (EPL).
4 
5 #ifndef __UFL_HPP__
6 #define __UFL_HPP__
7 
8 #include <cstdio>
9 #include <cfloat>
10 #include <cstring>
11 #include <string>
12 
13 #include "VolVolume.hpp"
14 
15 // parameters controlled by the user
16 class UFL_parms {
17 public:
18  std::string fdata; // file with the data
19  std::string dualfile; // file with an initial dual solution
20  std::string dual_savefile; // file to save final dual solution
21  std::string int_savefile; // file to save primal integer solution
22  int h_iter; // number of times that the primal heuristic will be run
23  // after termination of the volume algorithm
24 
25  UFL_parms(const char* filename);
27 };
28 
29 
30 
31 class UFL : public VOL_user_hooks {
32 public:
33  // for all hooks: return value of -1 means that volume should quit
34  // compute reduced costs
35  int compute_rc(const VOL_dvector& u, VOL_dvector& rc);
36  // solve relaxed problem
37  int solve_subproblem(const VOL_dvector& u, const VOL_dvector& rc,
38  double& lcost, VOL_dvector& x, VOL_dvector&v,
39  double& pcost);
40  // primal heuristic
41  // return DBL_MAX in heur_val if feas sol wasn't/was found
42  int heuristics(const VOL_problem& p,
43  const VOL_dvector& x, double& heur_val);
44 
45  // original data for uncapacitated facility location
46 public:
47  VOL_dvector fcost; // cost for opening facilities
48  VOL_dvector dist; // cost for connecting a customer to a facility
49  VOL_dvector fix; // vector saying if some variables should be fixed
50  // if fix=-1 nothing is fixed
51  int ncust, nloc; // number of customers, number of locations
52  VOL_ivector ix; // best integer feasible solution so far
53  double icost; // value of best integer feasible solution
54 public:
55  UFL() : icost(DBL_MAX) {}
56  virtual ~UFL() {}
57 };
58 
59 //#############################################################################
60 //######## Member functions #########################################
61 //#############################################################################
62 
63 //****** UFL_parms
64 // reading parameters specific to facility location
65 UFL_parms::UFL_parms(const char *filename) :
66  fdata(""),
67  h_iter(10)
68 {
69  char s[500];
70  FILE * file = fopen(filename, "r");
71  if (!file) {
72  printf("Failure to open ufl datafile: %s\n ", filename);
73  abort();
74  }
75 
76  while (fgets(s, 500, file)) {
77  const int len = strlen(s) - 1;
78  if (s[len] == '\n')
79  s[len] = 0;
80  std::string ss;
81  ss = s;
82 
83  if (ss.find("fdata") == 0) {
84  int j = ss.find("=");
85  int j1 = ss.length() - j + 1;
86  fdata = ss.substr(j+1, j1);
87 
88  } else if (ss.find("dualfile") == 0) {
89  int j = ss.find("=");
90  int j1 = ss.length() - j + 1;
91  dualfile = ss.substr(j+1, j1);
92 
93  } else if (ss.find("dual_savefile") == 0) {
94  int j = ss.find("=");
95  int j1 = ss.length() - j + 1;
96  dual_savefile = ss.substr(j+1, j1);
97 
98  } else if (ss.find("int_savefile") == 0) {
99  int j = ss.find("=");
100  int j1 = ss.length() - j + 1;
101  int_savefile = ss.substr(j+1, j1);
102 
103  } else if (ss.find("h_iter") == 0) {
104  int i = ss.find("=");
105  h_iter = atoi(&s[i+1]);
106  }
107  }
108  fclose(file);
109 }
110 
111 #endif
std::string dualfile
Definition: ufl.hpp:19
~UFL_parms()
Definition: ufl.hpp:26
The user hooks should be overridden by the user to provide the problem specific routines for the volu...
Definition: VolVolume.hpp:563
int nloc
Definition: ufl.hpp:51
This class holds every data for the Volume Algorithm and its solve method must be invoked to solve th...
Definition: VolVolume.hpp:605
double icost
Definition: ufl.hpp:53
int solve_subproblem(const VOL_dvector &u, const VOL_dvector &rc, double &lcost, VOL_dvector &x, VOL_dvector &v, double &pcost)
Solve the subproblem for the subgradient step.
VOL_dvector dist
Definition: ufl.hpp:48
virtual ~UFL()
Definition: ufl.hpp:56
std::string fdata
Definition: ufl.hpp:18
VOL_ivector ix
Definition: ufl.hpp:52
VOL_dvector fcost
Definition: ufl.hpp:47
int heuristics(const VOL_problem &p, const VOL_dvector &x, double &heur_val)
Starting from the primal vector x, run a heuristic to produce an integer solution.
std::string int_savefile
Definition: ufl.hpp:21
std::string dual_savefile
Definition: ufl.hpp:20
UFL_parms(const char *filename)
Definition: ufl.hpp:65
VOL_dvector fix
Definition: ufl.hpp:49
UFL()
Definition: ufl.hpp:55
int h_iter
Definition: ufl.hpp:22
vector of ints.
Definition: VolVolume.hpp:242
vector of doubles.
Definition: VolVolume.hpp:148
Definition: ufl.hpp:31
int compute_rc(const VOL_dvector &u, VOL_dvector &rc)
compute reduced costs
int ncust
Definition: ufl.hpp:51