Bonsoir à tous,
Voilà, j'ai un méga problème à résoudre et je ne sais vraiment pas comment l'aborder. Je vais tenter de vous expliquer clairement :
Je dois résoudre un programme linéaire en utilisant Cplex, mais l'interface est sous C++ Builder !!! En cherchant dans le Help de Cplex, j'ai bien trouvé quelque chose, mais quand je l'essaye dans C++ Builder, ça bloque . Bon, dans le Help, ils nous demandent de rajouter la bibliothèque OPL server, que j'ai fait sans soucis. Ils exposent le code suivant pour un exemple donné :
Il faut savoir qu'en Cplex, on a un fichier .mod pour écrire notre modèle mathématique et un fichier .dat pour les données du problème. Dans cet exemple on veut résoudre "brige" à partir de C++ Builder. Ce code est en C++. J'ai fait un exemple avec juste un bouton et un mémo pour afficher le résultat.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71 #include <ilsolver/ilcint.h> #ifdef ILUSESTL #include <iostream> #else #include <iostream.h> #endif #include <ilopl/oplcomponent.h> #include <ilopl/oplerror.h> ILCSTLBEGIN class MyReporter : public OPLerrorReporter { void notifySyntaxError(const OPLsyntaxError& err){ cout << "OPL syntax error near line " << err.getLine() << " : " << err.getMessage() << endl; } void notifySemanticError(const OPLsemanticError& err){ cout << "OPL semantic error near line " << err.getLine() << " : " << err.getMessage() << endl; } void notifyRuntimeError(const OPLruntimeError& err){ cout << "OPL runtime error near line " << err.getLine() << " : " << err.getMessage() << endl; } void notifyInternalError(const OPLinternalError& err){ cout << "OPL internal error : " << err.getMessage() << endl; } }; int main(){ int status = 0; OPLsolver solver; MyReporter reporter; solver.setErrorReporter(&reporter); try{ solver.loadInterpretedModelFileAndDataFile ("d:\ILOG\OPLSl37\opl\scheduler\bridge.mod", "d:\ILOG\OPLSl37\opl\scheduler\bridge.dat", 1); if(solver.solve()){ int obj = solver.getObjectiveValueInt(); double time = solver.getTime(); cout << "\nObjective: " << obj << endl; cout << "Time: " << time << endl << endl; OPLenum task = solver.getEnum("Task"); int nbTasks = task.getCard(); OPLarray activities = solver.getArray("a"); OPLenumIterator ite = task.getIterator(); for(; ite.ok() == 1; ite.next()) { OPLenumValue c = ite.get(); OPLactivity act = activities.getActivity(c); cout << "Activity '" << c.getName() << "'"; cout << " starts at " << act.getStart(); cout << " with duration " << act.getDuration() << endl; } }else { cout << "No solution found" << endl; } } catch(...){ cout << "An error occurred" << endl; status = -1; } solver.close(); return status; }
La question que je me pose est comment je dois traduire ce code afin que je puisse l'utiliser sous C++ Builder ??? Comment résoudre le problème des include (car j'ai des erreurs au tout début, alors que j'ai rajouté la bibliothèque demandée) ???
J'ai besoin du résultat que me donne Cplex pour continuer ma programmation !!!
J'espère que j'étais assez claire pour que vous puissiez m'aider.
Merci.
Partager