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

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

相关文章

Nginx中location实现多条件匹配的方法详解

《Nginx中location实现多条件匹配的方法详解》在Nginx中,location指令用于匹配请求的URI,虽然location本身是基于单一匹配规则的,但可以通过多种方式实现多个条件的匹配逻辑... 目录1. 概述2. 实现多条件匹配的方式2.1 使用多个 location 块2.2 使用正则表达式

详解如何在React中执行条件渲染

《详解如何在React中执行条件渲染》在现代Web开发中,React作为一种流行的JavaScript库,为开发者提供了一种高效构建用户界面的方式,条件渲染是React中的一个关键概念,本文将深入探讨... 目录引言什么是条件渲染?基础示例使用逻辑与运算符(&&)使用条件语句列表中的条件渲染总结引言在现代

Oracle数据库使用 listagg去重删除重复数据的方法汇总

《Oracle数据库使用listagg去重删除重复数据的方法汇总》文章介绍了在Oracle数据库中使用LISTAGG和XMLAGG函数进行字符串聚合并去重的方法,包括去重聚合、使用XML解析和CLO... 目录案例表第一种:使用wm_concat() + distinct去重聚合第二种:使用listagg,

使用C#代码计算数学表达式实例

《使用C#代码计算数学表达式实例》这段文字主要讲述了如何使用C#语言来计算数学表达式,该程序通过使用Dictionary保存变量,定义了运算符优先级,并实现了EvaluateExpression方法来... 目录C#代码计算数学表达式该方法很长,因此我将分段描述下面的代码片段显示了下一步以下代码显示该方法如

Oracle Expdp按条件导出指定表数据的方法实例

《OracleExpdp按条件导出指定表数据的方法实例》:本文主要介绍Oracle的expdp数据泵方式导出特定机构和时间范围的数据,并通过parfile文件进行条件限制和配置,文中通过代码介绍... 目录1.场景描述 2.方案分析3.实验验证 3.1 parfile文件3.2 expdp命令导出4.总结

Java 枚举的常用技巧汇总

《Java枚举的常用技巧汇总》在Java中,枚举类型是一种特殊的数据类型,允许定义一组固定的常量,默认情况下,toString方法返回枚举常量的名称,本文提供了一个完整的代码示例,展示了如何在Jav... 目录一、枚举的基本概念1. 什么是枚举?2. 基本枚举示例3. 枚举的优势二、枚举的高级用法1. 枚举

Python按条件批量删除TXT文件行工具

《Python按条件批量删除TXT文件行工具》这篇文章主要为大家详细介绍了Python如何实现按条件批量删除TXT文件中行的工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1.简介2.运行效果3.相关源码1.简介一个由python编写android的可根据TXT文件按条件批

闲置电脑也能活出第二春?鲁大师AiNAS让你动动手指就能轻松部署

对于大多数人而言,在这个“数据爆炸”的时代或多或少都遇到过存储告急的情况,这使得“存储焦虑”不再是个别现象,而将会是随着软件的不断臃肿而越来越普遍的情况。从不少手机厂商都开始将存储上限提升至1TB可以见得,我们似乎正处在互联网信息飞速增长的阶段,对于存储的需求也将会不断扩大。对于苹果用户而言,这一问题愈发严峻,毕竟512GB和1TB版本的iPhone可不是人人都消费得起的,因此成熟的外置存储方案开

uva 10014 Simple calculations(数学推导)

直接按照题意来推导最后的结果就行了。 开始的时候只做到了第一个推导,第二次没有继续下去。 代码: #include<stdio.h>int main(){int T, n, i;double a, aa, sum, temp, ans;scanf("%d", &T);while(T--){scanf("%d", &n);scanf("%lf", &first);scanf

uva 10025 The ? 1 ? 2 ? ... ? n = k problem(数学)

题意是    ?  1  ?  2  ?  ...  ?  n = k 式子中给k,? 处可以填 + 也可以填 - ,问最小满足条件的n。 e.g k = 12  - 1 + 2 + 3 + 4 + 5 + 6 - 7 = 12 with n = 7。 先给证明,令 S(n) = 1 + 2 + 3 + 4 + 5 + .... + n 暴搜n,搜出当 S(n) >=