constraint generation 约束生成方法(不知道我翻译得对不对)在网上资料相对较少,中文的资料更少。
因为传统的DFJ模型解决TSP问题需要求解指数级别的子集,因此constraint generation显得十分必要(就目前而言,120个节点的TSP也是分分钟解决)。
下面是基于constraint generation的代码。值得注意的是在运行constraint generation方法时,需要不断去检查得到的解是否是最优解,而且在添加约束时,不能每次只加一个环的节点(这样会导致速度变慢很多很多)
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import ilog.concert.*;
import ilog.concert.IloCopyManager.Check;
import ilog.cplex.*;
public class Main {
public static int _cityNum;
public static double[][] _cityDis;
public static ArrayList<Integer> _set;
public static ArrayList<ArrayList<Integer>> _setPool;
public static ArrayList<Integer> _setCG;// for constraint generation
public static ArrayList<ArrayList<Integer>> _setCGPool;// for constraint
// generation
public static long _time;
public static d