|
void | setInstance (const Instance &data) |
|
void | solve (SolveResult &_return, const vector< bool > &fix, const int lastBest) |
|
|
Instance | _data |
| Server merkt sich die Daten, mit denen er durch solve() arbeiten soll. Mehr ...
|
|
glp_prob * | _lp |
| Das "GLPK-Objekt" _lp, welches zum Lösen mit der GLPK-API notwendig ist. Mehr ...
|
|
Die Klasse SolverHandler ist die Implementierung von Solver und erbt vom Solver-Interface alles notwendige, damit das thrift-Framework daraus einen Server (mit einem einzelnen "Solve"-Service) erstellen kann.
void SolverHandler::setInstance |
( |
const Instance & |
data | ) |
|
|
inline |
Diese Methode wird vom Solver-Service (= unser Worker) zur Verfügung gestellt, damit der Client (= unser Farmer) zu Anfang allen die Daten, mit denen gerechnet werden sollen, zusenden kann.
- Parameter
-
[in] | data | Enthält die Daten im Datentyp Instance, so wie in der IDL beschreiben |
- Rückgabe
- nichts
60 if (
_lp !=
nullptr) glp_delete_prob(
_lp);
61 _lp = glp_create_prob();
63 glp_term_out(GLP_OFF);
65 int N =
_data._profits.size();
66 int T =
_data._budgets.size();
68 int *ia =
new int[(T+1)*N +1];
70 int *ja =
new int[(T+1)*N +1];
71 double *ar =
new double[(T+1)*N +1];
77 glp_set_obj_dir(
_lp, GLP_MAX);
82 glp_add_rows(
_lp, T+1);
86 for (
int t=0; t < T; ++t) {
88 glp_set_row_bnds(
_lp, t+1, GLP_UP, 0.0,
_data._budgets[t]);
92 for (
int n=0; n < N; ++n) {
93 for (
int t=0; t <= T; ++t) {
98 ar[qq] =
_data._costs[t][n];
103 ar[qq] =
_data._profits[n];
109 glp_set_obj_coef(
_lp, n+1,
_data._profits[n]);
111 glp_load_matrix(
_lp, (T+1)*N, ia, ja, ar);
112 cout <<
"Instance ready." << endl;
glp_prob * _lp
Das "GLPK-Objekt" _lp, welches zum Lösen mit der GLPK-API notwendig ist.
Definition: Worker.cpp:45
Instance _data
Server merkt sich die Daten, mit denen er durch solve() arbeiten soll.
Definition: Worker.cpp:43
void SolverHandler::solve |
( |
SolveResult & |
_return, |
|
|
const vector< bool > & |
fix, |
|
|
const int |
lastBest |
|
) |
| |
|
inline |
Diese Methode wird vom Solver-Service (= unser Worker) zur Verfügung gestellt, damit der Client (= unser Farmer) zu Anfang allen die Daten, mit denen gerechnet werden sollen, zusenden kann.
- Parameter
-
[out] | _return | Enthält das Ergebnis der Berechnung |
[in] | fix | fix enthält die Projekt-Vorbelegung |
[in] | lastBest | lastBest enthält eine bisher beste Lösung und soll als untere Grenze dienen |
- Rückgabe
- nichts; Rückgabe ist in der Referenz
_return
enthalten
130 int N =
_data._profits.size();
131 int T =
_data._budgets.size();
136 glp_set_row_bnds(
_lp, T+1, GLP_LO, lastBest, 0.0);
138 for(
int n=0; n < N; ++n) {
141 glp_set_col_kind(
_lp, n+1, GLP_BV);
143 glp_set_col_bnds(
_lp, n+1, GLP_DB, 0.0, 1.0);
147 glp_set_col_bnds(
_lp, n+1, GLP_FX, 1.0, 1.0);
149 glp_set_col_bnds(
_lp, n+1, GLP_FX, 0.0, 0.0);
156 glp_init_smcp(¶1);
158 errCode = glp_simplex(
_lp, ¶1);
161 _return._flag = Flag::CUT;
164 _return._flag = Flag::OK;
168 glp_init_iocp(¶2);
169 para2.tm_lim =
_data._timeoutMs;
171 errCode = glp_intopt(
_lp, ¶2);
175 _return._flag = Flag::OK;
179 _return._flag = Flag::TIMEOUT;
183 _return._flag = Flag::CUT;
187 _return._projects.resize(N);
188 for (
int n=0; n<N; ++n) {
189 if (glp_mip_col_val(
_lp, n+1) > 0)
190 _return._projects[n] =
true;
192 _return._projects[n] =
false;
194 _return._optimum = glp_mip_obj_val(
_lp);
glp_prob * _lp
Das "GLPK-Objekt" _lp, welches zum Lösen mit der GLPK-API notwendig ist.
Definition: Worker.cpp:45
Instance _data
Server merkt sich die Daten, mit denen er durch solve() arbeiten soll.
Definition: Worker.cpp:43
Instance SolverHandler::_data |
|
private |
Server merkt sich die Daten, mit denen er durch solve() arbeiten soll.
glp_prob* SolverHandler::_lp |
|
private |
Das "GLPK-Objekt" _lp, welches zum Lösen mit der GLPK-API notwendig ist.
Die Dokumentation für diese Klasse wurde erzeugt aufgrund der Datei: