Skip to content

Commit 34b2450

Browse files
committed
Complete (unstable) functor for #9 + Remove useless comments
1 parent e7d903e commit 34b2450

10 files changed

+57
-108
lines changed

src/abstract_solver.h

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -33,13 +33,9 @@ class abstract_solver {
3333
// called before objective definitions
3434
virtual int begin_objectives(void) { return 0; };
3535

36-
// get the current coefficient value of the objective function for parameter package
37-
//FIXME virtual CUDFcoefficient get_obj_coeff(CUDFVersionedPackage *package) { return 0; };
3836
// get the current coefficient value of the objective function for variable rank
3937
virtual CUDFcoefficient get_obj_coeff(int rank) { return 0; };
4038

41-
// set objective coefficient value according to a package
42-
//FIXME virtual int set_obj_coeff(CUDFVersionedPackage *package, CUDFcoefficient value) { return 0; };
4339
// set objective coefficient value according to a rank (column number)
4440
virtual int set_obj_coeff(int rank, CUDFcoefficient value) { return 0; };
4541

@@ -61,13 +57,9 @@ class abstract_solver {
6157
// called before the definition of a new constraint
6258
virtual int new_constraint(void) { return 0; };
6359

64-
// get current constraint coefficient according to a package
65-
//FIXME virtual CUDFcoefficient get_constraint_coeff(CUDFVersionedPackage *package) { return 0; };
6660
// get current constraint coefficient according to a rank
6761
virtual CUDFcoefficient get_constraint_coeff(int rank) { return 0; };
6862

69-
// set constraint coefficient of a package
70-
//FIXME virtual int set_constraint_coeff(CUDFVersionedPackage *package, CUDFcoefficient value) { return 0; };
7163
// set constraint coefficient of a rank (i.e. column number)
7264
virtual int set_constraint_coeff(int rank, CUDFcoefficient value) { return 0; };
7365

@@ -97,8 +89,7 @@ class abstract_solver {
9789
// get the objective value at the end of solving
9890
virtual CUDFcoefficient objective_value() { return 0; };
9991

100-
// get the status of a package in the final configuration
101-
//FIXME virtual CUDFcoefficient get_solution(CUDFVersionedPackage *package) { return 0; };
92+
// get the status of a rank in the final configuration
10293
virtual CUDFcoefficient get_solution(int k) { return 0; };
10394

10495
// ******************************************************************

src/constraint_generation.c

Lines changed: 44 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -10,23 +10,35 @@ bool generate_agregate_constraints = false;
1010
int new_var = 0;
1111
CUDFcoefficient min_bandwidth = 2; //TODO change value of min_bandwidth
1212

13-
struct GetVar {
13+
struct SetPathCoeff {
1414

1515
public:
16-
GetVar(RankMapper* rankM, abstract_solver* solver) : rankM(rankM), solver(solver) {
16+
17+
SetPathCoeff(RankMapper* rankM, abstract_solver* solver) : rankM(rankM), solver(solver), stage(0) {
1718

1819
}
19-
~GetVar() {
20+
21+
~SetPathCoeff() {
2022
rankM = NULL;
2123
solver = NULL;
2224
}
25+
inline unsigned int getStage() const { return stage; }
26+
inline void setStage(unsigned int stage) { this->stage = stage; };
27+
28+
inline unsigned int getVarType() const { return varBorZ; }
29+
inline void setVarType(bool varBorZ) { this->varBorZ = varBorZ; };
2330
void operator()(FacilityNode* s, FacilityNode* d) {
24-
int rank = rankM->rankB(s, d, 0);
25-
solver->set_constraint_coeff(rank, 1);;
31+
int rank = varBorZ ? rankM->rankB(s, d, stage) : rankM->rankZ(s, d, stage);
32+
solver->set_constraint_coeff(rank, 1);
33+
;
2634
}
27-
private :
28-
RankMapper* rankM;
29-
abstract_solver* solver;
35+
36+
private:
37+
RankMapper *rankM;
38+
abstract_solver *solver;
39+
unsigned int stage;
40+
bool varBorZ;
41+
3042
};
3143

3244
// Generate MILP objective function(s) and constraints for a given solver
@@ -80,6 +92,14 @@ int generate_constraints(PSLProblem *problem, abstract_solver &solver, abstract_
8092
///////////
8193
//connections flow conservation
8294
//TODO special case: initial broadcast (s=0)
95+
solver.new_constraint();
96+
if(! i->isRoot()) {
97+
solver.set_constraint_coeff( rankM->rankY(i->toFather(), 0), 1);
98+
}
99+
for(LinkListIterator l = i->cbegin(); l != i->cend() ; l++) {
100+
solver.set_constraint_coeff( rankM->rankY(*l, 0), -1);
101+
}
102+
//solver.add_constraint_eq(i->getType()->getDemand(s - 1)); //TODO define Xi or set directly coeffs of Xik ?
83103
//standard case: groups of clients
84104
for (int s = 1; s < problem->getNbGroups() + 1; ++s) {
85105
solver.new_constraint();
@@ -89,35 +109,34 @@ int generate_constraints(PSLProblem *problem, abstract_solver &solver, abstract_
89109
for(LinkListIterator l = i->cbegin(); l != i->cend() ; l++) {
90110
solver.set_constraint_coeff( rankM->rankY(*l, s), -1);
91111
}
92-
solver.add_constraint_eq(i->getType()->getDemand(s - 1)); //TODO check demand index
112+
solver.add_constraint_eq(i->getType()->getDemand(s - 1));
93113
}
94114

95115
}
96116

97-
GetVar getV(rankM, &solver);
117+
SetPathCoeff setPC(rankM, &solver);
98118
///////////////////////
99119
//for each link ...
100120
///////////////////////
101-
for(LinkIterator l = problem->getRoot()->lbegin() ; l!= problem->getRoot()->lend() ; l++) {
102-
///////////
103-
//for each stage ...
104-
for (int s = 0; s < problem->getNbGroups() + 1; ++s) {
105-
///////////
106-
//number of connections passing through the link
107-
solver.new_constraint();
108-
solver.set_constraint_coeff(rankM->rankY(*l, s), 1);
109-
//FIXME l->forEachPath(getV);
110-
//solver.set_constraint_coeff(rankM->rankZ(source, dest, s), -1);
111-
solver.add_constraint_eq(0);
112-
121+
///////////
122+
//for each stage ...
123+
for (int s = 0; s < problem->getNbGroups() + 1; ++s) {
124+
setPC.setStage(s);
125+
for(LinkIterator l = problem->getRoot()->lbegin() ; l!= problem->getRoot()->lend() ; l++) {
113126
///////////
114127
//bandwidth passing through the link
128+
setPC.setVarType(true);
115129
solver.new_constraint();
116130
// TODO l->forEachPath();
117-
//solver.set_constraint_coeff(rankM->rankB(source, dest, s), -1);
118131
solver.add_constraint_leq(l->getBandwidth());
119132

120-
133+
///////////
134+
//number of connections passing through the link
135+
setPC.setVarType(false);
136+
solver.new_constraint();
137+
solver.set_constraint_coeff(rankM->rankY(*l, s), 1);
138+
//FIXME l->forEachPath(getV);
139+
solver.add_constraint_eq(0);
121140
}
122141
}
123142

@@ -131,7 +150,7 @@ int generate_constraints(PSLProblem *problem, abstract_solver &solver, abstract_
131150
//for each stage ...
132151
for (int s = 0; s < problem->getNbGroups() + 1; ++s) {
133152
///////////
134-
//minimal bandwidth for a connection
153+
//minimal bandwidth for a single connection
135154
solver.new_constraint();
136155
solver.set_constraint_coeff(rankM->rankB(*i, *j, s), 1);
137156
solver.set_constraint_coeff(rankM->rankZ(*i, *j, s), - min_bandwidth);

src/constraint_generation.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,5 +42,6 @@ extern CUDFcoefficient min_bandwidth;
4242
// main function for constraint generation (translate a CUDF problem into MILP problem for a given solver and a given criteria)
4343
extern int generate_constraints(PSLProblem *problem, abstract_solver &solver, abstract_combiner &combiner);
4444

45+
4546
#endif
4647

src/cplex_solver.c

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -276,8 +276,7 @@ int cplex_solver::init_solutions() {
276276
return 0;
277277
}
278278

279-
// get the computed status of a package (0 = uninstalled, 1 = installed)
280-
//CUDFcoefficient cplex_solver::get_solution(CUDFVersionedPackage *package) { return (CUDFcoefficient)nearbyint(solution[package->rank]); }
279+
281280
CUDFcoefficient cplex_solver::get_solution(int k) { return (CUDFcoefficient)nearbyint(solution[k]); }
282281

283282
// initialize the objective function
@@ -288,14 +287,10 @@ int cplex_solver::begin_objectives(void) {
288287
return 0;
289288
}
290289

291-
// return the objective function coefficient of a package
292-
//CUDFcoefficient cplex_solver::get_obj_coeff(CUDFVersionedPackage *package) { return (CUDFcoefficient)get_coeff(package); }
293290

294291
// return the objective function coefficient of a rank
295292
CUDFcoefficient cplex_solver::get_obj_coeff(int rank) { return (CUDFcoefficient)get_coeff(rank); }
296293

297-
// set the objective function coefficient of a package
298-
//int cplex_solver::set_obj_coeff(CUDFVersionedPackage *package, CUDFcoefficient value) { set_coeff(package, value); return 0; }
299294

300295
// set the objective function coefficient of a ranked variable
301296
int cplex_solver::set_obj_coeff(int rank, CUDFcoefficient value) { set_coeff(rank, value); return 0; };

src/cplex_solver.h

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,8 @@ class cplex_solver: public abstract_solver, public scoeff_solver<double, 0, 0> {
2727

2828
// Init the objective function definitions
2929
int begin_objectives(void);
30-
// Get current objective coefficient of package
31-
//FIXME CUDFcoefficient get_obj_coeff(CUDFVersionedPackage *package);
3230
// Get current objective coefficient of a column
3331
CUDFcoefficient get_obj_coeff(int rank);
34-
// Set current objective coefficient of package
35-
//FIXME int set_obj_coeff(CUDFVersionedPackage *package, CUDFcoefficient value);
3632
// Set current objective coefficient of column
3733
int set_obj_coeff(int rank, CUDFcoefficient value);
3834
// Begin the definition of a new objective
@@ -46,12 +42,8 @@ class cplex_solver: public abstract_solver, public scoeff_solver<double, 0, 0> {
4642
int begin_add_constraints(void);
4743
// Begin the definition of a new constraint
4844
int new_constraint(void);
49-
// Get current constraint coefficient of a package
50-
//FIXME CUDFcoefficient get_constraint_coeff(CUDFVersionedPackage *package);
5145
// Get current constraint coefficient of a column
5246
CUDFcoefficient get_constraint_coeff(int rank);
53-
// Set current constraint coefficient of a package
54-
//FIXME int set_constraint_coeff(CUDFVersionedPackage *package, CUDFcoefficient value);
5547
// Set current constraint coefficient of a column
5648
int set_constraint_coeff(int rank, CUDFcoefficient value);
5749
// Add current constraint as a more or equal constraint
@@ -73,7 +65,6 @@ class cplex_solver: public abstract_solver, public scoeff_solver<double, 0, 0> {
7365
// Init solutions (required before calling get_solution)
7466
int init_solutions();
7567
// Get the solution for a package
76-
//FIXME CUDFcoefficient get_solution(CUDFVersionedPackage *package);
7768
// Get the solution for a column
7869
CUDFcoefficient get_solution(int k);
7970

src/cudf.c

Lines changed: 8 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -435,25 +435,25 @@ CriteriaList *process_criteria(char *crit_descr, unsigned int &pos, bool first_l
435435

436436
// handle criteria
437437
if (strncmp(crit_descr+crit_name, "removed", crit_name_length) == 0) {
438-
; //FIXME criteria->push_back(new removed_criteria(get_criteria_lambda(crit_descr, pos, crit_descr[sign])));
438+
; // criteria->push_back(new removed_criteria(get_criteria_lambda(crit_descr, pos, crit_descr[sign])));
439439
} else if (strncmp(crit_descr+crit_name, "changed", crit_name_length) == 0) {
440-
; //FIXME criteria->push_back(new changed_criteria(get_criteria_lambda(crit_descr, pos, crit_descr[sign])));
440+
; // criteria->push_back(new changed_criteria(get_criteria_lambda(crit_descr, pos, crit_descr[sign])));
441441
} else if (strncmp(crit_descr+crit_name, "new", crit_name_length) == 0) {
442442
criteria->push_back(new new_criteria(get_criteria_lambda(crit_descr, pos, crit_descr[sign])));
443-
; //FIXME criteria->push_back(new notuptodate_criteria(get_criteria_lambda(crit_descr, pos, crit_descr[sign])));
443+
; // criteria->push_back(new notuptodate_criteria(get_criteria_lambda(crit_descr, pos, crit_descr[sign])));
444444
} else if (strncmp(crit_descr+crit_name, "nunsat", crit_name_length) == 0) {
445445
bool with_providers = true;
446446
char *property_name = get_criteria_property_name_and_bool(crit_descr, pos, with_providers);
447447
if (property_name != (char *)NULL) {
448-
; //FIXME abstract_criteria *crit = new nunsat_criteria(property_name, with_providers, get_criteria_lambda(crit_descr, pos, crit_descr[sign]));
448+
; //abstract_criteria *crit = new nunsat_criteria(property_name, with_providers, get_criteria_lambda(crit_descr, pos, crit_descr[sign]));
449449
//criteria_with_property->push_back(crit);
450450
//criteria->push_back(crit);
451451
}
452452
} else if (strncmp(crit_descr+crit_name, "count", crit_name_length) == 0) {
453453
bool onlynew = false;
454454
char *property_name = get_criteria_property_name_and_bool(crit_descr, pos, onlynew);
455455
if (property_name != (char *)NULL) {
456-
; //FIXME abstract_criteria *crit = new count_criteria(property_name, onlynew, get_criteria_lambda(crit_descr, pos, crit_descr[sign]));
456+
; //abstract_criteria *crit = new count_criteria(property_name, onlynew, get_criteria_lambda(crit_descr, pos, crit_descr[sign]));
457457
//criteria_with_property->push_back(crit);
458458
//criteria->push_back(crit);
459459
}
@@ -517,7 +517,7 @@ int main(int argc, char *argv[]) {
517517
bool fulloutput = false;
518518
PSLProblem *problem;
519519
vector<abstract_criteria *> criteria_with_property;
520-
520+
//TODO remove useless options;
521521
// parameter handling
522522
if (argc > 1) {
523523
for (int i = 1; i < argc; i++) {
@@ -548,6 +548,7 @@ int main(int argc, char *argv[]) {
548548
exit(-1);
549549
}
550550
}
551+
551552
} else if (strcmp(argv[i], "-fo") == 0) {
552553
fulloutput = true;
553554
} else if (strncmp(argv[i], "-v", 2) == 0) {
@@ -564,7 +565,7 @@ int main(int argc, char *argv[]) {
564565
} else if (strcmp(argv[i], "-cov") == 0) {
565566
criteria_opt_var = true;
566567
} else if (strcmp(argv[i], "-noreduce") == 0) {
567-
; //FIXME use_reduced = false;
568+
;
568569
} else if (strncmp(argv[i], "-lex[", 5) == 0) {
569570
CriteriaList *criteria = get_criteria(argv[i]+4, true, &criteria_with_property);
570571
if (criteria->size() > 0)
@@ -737,15 +738,6 @@ int main(int argc, char *argv[]) {
737738
combiner = new lexicographic_combiner(criteria);
738739
}
739740

740-
// reduce the problem (if use_reduced is true)
741-
// if (combiner->can_reduce()) {
742-
// if (verbosity > 0) fprintf(stdout, "Can reduce graph.\n");
743-
// } else {
744-
// // FIXME use_reduced = false;
745-
// if (verbosity > 0) fprintf(stdout, "Can NOT reduce graph.\n");
746-
// }
747-
//FIXME problem = compute_reduced_CUDF(the_problem);
748-
749741
problem = the_problem;
750742
// combiner initialization
751743
combiner->initialize(problem, solver);

src/glpk_solver.c

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -112,14 +112,9 @@ int glpk_solver::begin_objectives(void) {
112112
return 0;
113113
}
114114

115-
// return the package coefficient of the objective function
116-
//CUDFcoefficient glpk_solver::get_obj_coeff(CUDFVersionedPackage *package) { return (CUDFcoefficient)get_coeff(package); }
117-
118115
// return the package coefficient of the objective function
119116
CUDFcoefficient glpk_solver::get_obj_coeff(int rank) { return (CUDFcoefficient)get_coeff(rank); }
120117

121-
// set package coefficient to a value
122-
//int glpk_solver::set_obj_coeff(CUDFVersionedPackage *package, CUDFcoefficient value) { set_coeff(package, value); return 0; }
123118
// set column coefficient to a value
124119
int glpk_solver::set_obj_coeff(int rank, CUDFcoefficient value) { set_coeff(rank, value); return 0; }
125120

src/glpk_solver.h

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -35,17 +35,12 @@ class glpk_solver: public abstract_solver, public scoeff_solver<double, 1, 1> {
3535
CUDFcoefficient objective_value();
3636
// Init solutions (required before calling get_solution)
3737
int init_solutions();
38-
// Get the solution for a package
39-
//CUDFcoefficient get_solution(CUDFVersionedPackage *package);
38+
4039

4140
// Init the objective function definitions
4241
int begin_objectives(void);
43-
// Get current objective coefficient of package
44-
//CUDFcoefficient get_obj_coeff(CUDFVersionedPackage *package);
4542
// Get current objective coefficient of a column
4643
CUDFcoefficient get_obj_coeff(int rank);
47-
// Set current objective coefficient of package
48-
//int set_obj_coeff(CUDFVersionedPackage *package, CUDFcoefficient value);
4944
// Set current objective coefficient of column
5045
int set_obj_coeff(int rank, CUDFcoefficient value);
5146
// Begin the definition of a new objective
@@ -59,12 +54,8 @@ class glpk_solver: public abstract_solver, public scoeff_solver<double, 1, 1> {
5954
int begin_add_constraints(void);
6055
// Begin the definition of a new constraint
6156
int new_constraint(void);
62-
// Get current constraint coefficient of a package
63-
//CUDFcoefficient get_constraint_coeff(CUDFVersionedPackage *package);
6457
// Get current constraint coefficient of a column
6558
CUDFcoefficient get_constraint_coeff(int rank);
66-
// Set current constraint coefficient of a package
67-
//int set_constraint_coeff(CUDFVersionedPackage *package, CUDFcoefficient value);
6859
// Set current constraint coefficient of a column
6960
int set_constraint_coeff(int rank, CUDFcoefficient value);
7061
// Add current constraint as a more or equal constraint

src/lp_solver.c

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -241,23 +241,14 @@ int lp_solver::set_intvar_range(int rank, CUDFcoefficient lower, CUDFcoefficient
241241
return 0;
242242
}
243243

244-
// return the status of a package within the final configuration
245-
//CUDFcoefficient lp_solver::get_solution(CUDFVersionedPackage *package) { return solution[package->rank]; }
246244

247245
// initialize objective function
248246
int lp_solver::begin_objectives(void) { return 0; }
249247

250-
// return the package coefficient of the objective function
251-
//CUDFcoefficient lp_solver::get_obj_coeff(CUDFVersionedPackage *package) { return get_coeff(package); }
252248

253249
// return the package coefficient of the objective function
254250
CUDFcoefficient lp_solver::get_obj_coeff(int rank) { return get_coeff(rank); }
255251

256-
// set the package coefficient of the objective function
257-
//int lp_solver::set_obj_coeff(CUDFVersionedPackage *package, CUDFcoefficient value) {
258-
// set_coeff(package, value);
259-
// return 0;
260-
//}
261252

262253
// set the column coefficient of the objective function
263254
int lp_solver::set_obj_coeff(int rank, CUDFcoefficient value) {
@@ -288,18 +279,10 @@ int lp_solver::new_constraint(void) {
288279
return 0;
289280
}
290281

291-
// get the package coefficient of the current constraint
292-
//CUDFcoefficient lp_solver::get_constraint_coeff(CUDFVersionedPackage *package) { return get_coeff(package); }
293282

294283
// get the package coefficient of the current constraint
295284
CUDFcoefficient lp_solver::get_constraint_coeff(int rank) { return get_coeff(rank); }
296285

297-
// set package coefficient of the current constraint
298-
//int lp_solver::set_constraint_coeff(CUDFVersionedPackage *package, CUDFcoefficient value) {
299-
// set_coeff(package, value);
300-
// return 0;
301-
//}
302-
303286
// set column coefficient of the current constraint
304287
int lp_solver::set_constraint_coeff(int rank, CUDFcoefficient value) {
305288
set_coeff(rank, value);

0 commit comments

Comments
 (0)