模拟退火算法解决TSP(旅行商)问题

本文详细介绍了如何运用模拟退火算法解决著名的旅行商问题(TSP)。首先阐述了TSP问题的基本概念,接着深入探讨了模拟退火算法的原理,最后通过JAVA实现展示了如何将该算法应用到TSP问题的求解过程中。
摘要由CSDN通过智能技术生成

一、TSP问题描述

旅行商问题是由英国数学家Thomas Penyngton Kirkman 和爱尔兰数学家 Sir William Rowan Hamilton 在 19 世纪提出的数学问题,是图论中的一个经典问题,也是一个典型的组合优化问题。问题是这样描述的:一名旅行商人要到若干个城市去销售商品,已知城市的个数 n 和任意两个城市间的距离,需要找到一条从任意城市 A 出发,途经所有城市一次并且仅一次,最后返回到城市 A 的路线,使得总的距离最小。、

二、模拟退火算法基本原理

模拟退火(SA)算法的基本原理如下: 
(1)给定初始温度T0和初始点x0,计算该点的函数值f(x0);
(2)随机产生扰动△x,得到新点x′=x+△x,计算新点的函数值f(x′)和差△f=f(x′)-f(x);
(3)若△f≤0,则接受新点,作为下一次模拟退火的初始点;
(4)若△f>0,则计算新点的接受概率:p(△f)=xp(-△f/(K T)),产生[0,1]区间上均匀分布的伪随机数r,r∈ [0,1]。若p≤r,则接受新点作为下一次模拟的初始点;否则仍取原来的点作为下一次模拟退火的初始点。以上步骤称为Metropolis过程。逐渐降低控制温度,重复Metropolis过程,直至达到结束准则,就构成了SA算法。

三、利用模拟退火算法实现TSP问题

1,定义城市实体类,实现计算城市间的距离
public class City {
    // 地球赤道半径
    private static final double ERATH_EQUATORIAL_RADIUS = 6378.1370D;
    private static final double CONCVERT_DEGREES_TO_RADIANS = Math.PI / 180;
    // 经度
    private double longitude;
    // 纬度
    private double latitude;
    // 城市名
    private String name;

    public City(double longitude,double latitude,String name){
        super();
        this.longitude=longitude;
        this.latitude=latitude;
        this.name=name;
    }

    public double getLongitude() {
        return longitude;
    }

    public void setLongitude(double longitude) {
        this.longitude = longitude;
    }

    public double getLatitude() {
        return latitude;
    }

    public void setLatitude(double latitude) {
        this.latitude = latitude;
    }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值