The root page 15DOTs60ia13:Tutorial could not be found in space 15.S60 SSIM: Software Tools for Operations Research.
Using CPLEX in TspIpSolver
First, we need to set up the objective and the degree constraints. First, add the following fields to the class
private IloCplex cplex; private TspInstance<V,E> tspInstance; private final ImmutableBiMap<E,IloIntVar> edgeVariables;
and initialize them, as below.
public TspIpSolver(TspInstance<V,E> tspInstance, EnumSet<Option> options) throws IloException{ this.options = options; this.tspInstance = tspInstance; this.cplex = new IloCplex(); UndirectedGraph<V,E> graph = tspInstance.getGraph(); //for convenience, we will be using this a lot this.edgeVariables = Util.makeBinaryVariables(cplex, graph.getEdges()); //the degree constraints //the objective }
The constraints and objective still need to be added to the cplex
object. Try adding them yourself! The following methods (as defined in the previous 3 pages) should be useful for making the constraints:
- From
Util
, the static methodintegerSum(IloCplex cplex, BiMap<T,IloIntVar> variables, Iterable<T> set)
- From
IloCplex
, the methodaddEq(IloNumExpr e, double v)
- From
UndirectedGraph<V,E>
, the methodgetIncidentEdges(V vertex)
If you are unfamiliar with Java, consider viewing the solution for the constraint, then trying the objective yourself.
Solution
For the objective, we need the functions:
- From
Util
, the static methodsum(IloCplex cplex, BiMap<T,IloIntVar> variables, Iterable<T> set, Function<? super T,? extends Number> coefficients)
- From
UndirectedGraph<V,E>
, the methodgetEdges()
- From
TspInstance
, the methodgetEdgeWeights
Solution