数学建模第三日资料汇总(第二题非理想条件下的解)

2024-02-13 18:48

本文主要是介绍数学建模第三日资料汇总(第二题非理想条件下的解),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

第二问在不考虑曲线不闭合以及权重为3,9的情况下我们得到一下结果:

from random import*
import numpy as np
from math import*
from matplotlib import pyplot as pltcitys = np.loadtxt("data.csv",dtype=int,delimiter=",")
hospitals = np.loadtxt("hospital.csv",dtype=int,delimiter=",")number_of_citys = 25
distance = np.zeros((number_of_citys,number_of_citys))
for i in range(number_of_citys):for j in range(number_of_citys):distance[i][j] = sqrt((citys[i][0]-citys[j][0])**2+(citys[i][1]-citys[j][1])**2)
#由城市坐标计算距离矩阵#初始化参数
iteration1 = 4000                #外循环迭代次数
T0 = 10000000                      #初始温度,取大些
Tf = 1e-8                           #截止温度,可以不用
alpha = 0.98                     #温度更新因子
iteration2 = 2000                 #内循环迭代次数
fbest = 0                        #最佳距离#初始化初解
x = []
for i in range(25):x.append(i)
np.random.shuffle(x)
x = np.array(x)
for j in range(len(x) - 1):fbest = fbest +3 * distance[x[j]][x[j + 1]] - 9 * (hospitals[x[j]])
fbest = fbest + 3 * distance[x[-1]][x[0]] - 9 * (hospitals[x[-1]])
xbest = x.copy()
f_now = fbest
x_now = xbest.copy()for i in range(iteration1):for k in range(iteration2):#生成新解x1 = [0 for q in range(number_of_citys)]n1,n2 = randint(0,number_of_citys-1),randint(0,number_of_citys-1)n = [n1,n2]n.sort()n1,n2 = n#n1为0单独写if n1 > 0:x1[0:n1] = x_now[0:n1]x1[n1:n2+1] = x_now[n2:n1-1:-1]x1[n2+1:number_of_citys] = x_now[n2+1:number_of_citys]else:x1[0:n1] = x_now[0:n1]x1[n1:n2+1] = x_now[n2::-1]x1[n2+1:number_of_citys] = x_now[n2+1:number_of_citys]s = 0;for j in range(len(x1) - 1):s = s + 3*distance[x1[j]][x1[j + 1]] - 9 *(hospitals[x[j]])s = s + 3*distance[x1[-1]][x1[0]] - 9 *(hospitals[x[-1]])#判断是否更新解if s <= f_now:f_now = sx_now = x1.copy()if s > f_now:deltaf = s - f_nowif random() < exp(-deltaf/T0):f_now = sx_now = x1.copy()if s < fbest:fbest = sxbest = x1.copy()T0 = alpha * T0                #更新温度# if T0 < Tf:                  #停止准则为最低温度时可以取消注释#     break#打印最佳路线和最佳距离
print(xbest)
print(fbest)#绘制结果
plt.title('SA_TSP')
plt.xlabel('x')
plt.ylabel('y')
plt.plot(citys[...,0],citys[...,1],'ob',ms = 3)
plt.plot(citys[xbest,0],citys[xbest,1])
plt.plot([citys[xbest[-1],0],citys[xbest[0],0]],[citys[xbest[-1],1],citys[xbest[0],1]],ms = 2)
plt.show()

结果如下:

[6, 9, 20, 7, 16, 2, 4, 22, 14, 11, 5, 1, 19, 13, 3, 12, 24, 15, 21, 10, 8, 23, 0, 17, 18]
-112324.8118531057[20, 7, 16, 2, 4, 22, 14, 11, 5, 1, 19, 13, 3, 12, 24, 15, 21, 8, 10, 23, 0, 17, 18, 6, 9]
-112324.8118531057[9, 6, 18, 17, 0, 23, 10, 8, 21, 15, 24, 12, 3, 13, 19, 1, 5, 11, 14, 22, 4, 2, 16, 7, 20]
-112324.8118531057[15, 24, 12, 3, 13, 19, 1, 5, 11, 14, 22, 4, 2, 16, 7, 20, 9, 6, 18, 17, 0, 23, 10, 8, 21]
-112324.8118531057[18, 6, 9, 20, 7, 16, 2, 4, 22, 14, 11, 5, 1, 19, 13, 3, 12, 24, 15, 21, 8, 10, 23, 0, 17]
-112324.81185310568[23, 0, 17, 18, 6, 9, 20, 7, 16, 2, 4, 22, 14, 11, 5, 1, 19, 13, 3, 12, 24, 15, 21, 8, 10]
-112324.8118531057

图像:
数据结果

这篇关于数学建模第三日资料汇总(第二题非理想条件下的解)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/706335

相关文章

Python按照24个实用大方向精选的上千种工具库汇总整理

《Python按照24个实用大方向精选的上千种工具库汇总整理》本文整理了Python生态中近千个库,涵盖数据处理、图像处理、网络开发、Web框架、人工智能、科学计算、GUI工具、测试框架、环境管理等多... 目录1、数据处理文本处理特殊文本处理html/XML 解析文件处理配置文件处理文档相关日志管理日期和

Python38个游戏开发库整理汇总

《Python38个游戏开发库整理汇总》文章介绍了多种Python游戏开发库,涵盖2D/3D游戏开发、多人游戏框架及视觉小说引擎,适合不同需求的开发者入门,强调跨平台支持与易用性,并鼓励读者交流反馈以... 目录PyGameCocos2dPySoyPyOgrepygletPanda3DBlenderFife

linux重启命令有哪些? 7个实用的Linux系统重启命令汇总

《linux重启命令有哪些?7个实用的Linux系统重启命令汇总》Linux系统提供了多种重启命令,常用的包括shutdown-r、reboot、init6等,不同命令适用于不同场景,本文将详细... 在管理和维护 linux 服务器时,完成系统更新、故障排查或日常维护后,重启系统往往是必不可少的步骤。本文

SQL中JOIN操作的条件使用总结与实践

《SQL中JOIN操作的条件使用总结与实践》在SQL查询中,JOIN操作是多表关联的核心工具,本文将从原理,场景和最佳实践三个方面总结JOIN条件的使用规则,希望可以帮助开发者精准控制查询逻辑... 目录一、ON与WHERE的本质区别二、场景化条件使用规则三、最佳实践建议1.优先使用ON条件2.WHERE用

Linux实现线程同步的多种方式汇总

《Linux实现线程同步的多种方式汇总》本文详细介绍了Linux下线程同步的多种方法,包括互斥锁、自旋锁、信号量以及它们的使用示例,通过这些同步机制,可以解决线程安全问题,防止资源竞争导致的错误,示例... 目录什么是线程同步?一、互斥锁(单人洗手间规则)适用场景:特点:二、条件变量(咖啡厅取餐系统)工作流

8种快速易用的Python Matplotlib数据可视化方法汇总(附源码)

《8种快速易用的PythonMatplotlib数据可视化方法汇总(附源码)》你是否曾经面对一堆复杂的数据,却不知道如何让它们变得直观易懂?别慌,Python的Matplotlib库是你数据可视化的... 目录引言1. 折线图(Line Plot)——趋势分析2. 柱状图(Bar Chart)——对比分析3

JAVA数组中五种常见排序方法整理汇总

《JAVA数组中五种常见排序方法整理汇总》本文给大家分享五种常用的Java数组排序方法整理,每种方法结合示例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录前言:法一:Arrays.sort()法二:冒泡排序法三:选择排序法四:反转排序法五:直接插入排序前言:几种常用的Java数组排序

防止SpringBoot程序崩溃的几种方式汇总

《防止SpringBoot程序崩溃的几种方式汇总》本文总结了8种防止SpringBoot程序崩溃的方法,包括全局异常处理、try-catch、断路器、资源限制、监控、优雅停机、健康检查和数据库连接池配... 目录1. 全局异常处理2. 使用 try-catch 捕获异常3. 使用断路器4. 设置最大内存和线

Android实现定时任务的几种方式汇总(附源码)

《Android实现定时任务的几种方式汇总(附源码)》在Android应用中,定时任务(ScheduledTask)的需求几乎无处不在:从定时刷新数据、定时备份、定时推送通知,到夜间静默下载、循环执行... 目录一、项目介绍1. 背景与意义二、相关基础知识与系统约束三、方案一:Handler.postDel

Pandas中统计汇总可视化函数plot()的使用

《Pandas中统计汇总可视化函数plot()的使用》Pandas提供了许多强大的数据处理和分析功能,其中plot()函数就是其可视化功能的一个重要组成部分,本文主要介绍了Pandas中统计汇总可视化... 目录一、plot()函数简介二、plot()函数的基本用法三、plot()函数的参数详解四、使用pl