You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 2 Next »

The root page 15DOTs60ia13:Tutorial could not be found in space 15.S60 SSIM: Software Tools for Operations Research.

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 should be useful for making the constraints:

  • From Util, public static <T> IloLinearIntExpr integerSum(IloCplex cplex, BiMap<T,IloIntVar> variables, Iterable<T> set)
    • For each element
      Unknown macro: {mathinline}

      e

      of set, finds the corresponding variable
      Unknown macro: {mathinline}

      x_e

      and returns
      Unknown macro: {mathinline}

      \sum_{e \in \text{set}} x_e

  • From IloCplex, public IloRange addEq(IloNumExpr e, double v)
    • Adds the equality constraint e = v
  • From UndirectedGraph<V,E>, public Collection<E> getIncidentEdges(V vertex)
    • returns the edges of the graph that are incident to 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, public static <T> IloLinearNumExpr sum(IloCplex cplex, BiMap<T,IloIntVar> variables, Iterable<T> set, Function<? super T,? extends Number> coefficients)
    • For every element
      Unknown macro: {mathinline}

      e

      of set, gets the corresponding variable
      Unknown macro: {mathinline}

      x_e

      from variables and the number
      Unknown macro: {mathinline}

      d_e

      from coefficients and returns an expression for
      Unknown macro: {mathinline}

      \sum_{e \in \text{set}} d_e x_e

      .

Solution

  • No labels