Java调用CPLEX解决TSP问题(基于constraint generation模型)

本文介绍如何使用Java调用CPLEX的约束生成方法解决旅行商问题(TSP)。由于传统的DFJ模型在处理大规模TSP时效率低下,约束生成法成为了解决此类问题的有效途径,特别是对于包含120个节点的TSP问题。文中提供了相关代码,并强调在应用约束生成过程中,需要不断验证解的最优性,并避免每次仅添加单个节点约束以保持求解速度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值