5

Sto risolvendo grandi problemi di ottimizzazione con l'API Java CPLEX. Attualmente sono soloUso ottimale di CPLEX Java per high-throughput

IloCplex cplex = new IloCplex(); 
... add lots of variables and constraints ... 
cplex.solve(); 
cplex.end(); 

Questo funziona benissimo, ma ripeto spesso il processo in cui sto solo cambiando i coefficienti. Ogni volta che ripeto creo un nuovo oggetto cplex e ricrea tutte le variabili.

Esiste un modo più efficiente per farlo? La documentazione IBM ha un linguaggio come 'aggiungere il modello all'istanza del modello', il che sembra strano, ma ho pensato che fosse un suggerimento per poter riutilizzare le cose.

Qualsiasi suggerimento da parte di utenti più esperti sarebbe fantastico. Grazie.

+2

Probabilmente otterrete risposte migliori dai forum di discussione IBM o da OR-Exchange, un sito affiliato a Stack Overflow. –

risposta

6

Se si desidera solo modificare i coefficienti dei vincoli (o quelli della funzione obiettivo), è possibile modificare i coefficienti sull'oggetto IloCplex esistente. Non si dovrebbe creare un modello da zero.

retval = cplex.solve(); 
// verify that the solve was successful 

// change coeficients on constraints (or in the objective) 
cplex.setLinearCoef(constraint, newCoef, variable); 
cplex.setLinearCoef(objective, newObjCoef, variable); 

// change right bounds on constraints 
constraint.setBounds(newLB, newUB); 

// change variable bounds 
var.setBounds(newLB, newUB); 

retval = cplex.solve(); 
// verify the solve 
+0

Grazie. Ciò ha chiarito la mia confusione sull'API. –