技术标签: TSP 算法 最优化 python 遗传算法 机器学习 最短路径
我们使用scikit-opt工具箱来实现遗传算法:https://github.com/guofei9987/scikit-opt
下载后,我们只需要其中的ga.py文件
首先,定义一个目标函数
def demo_func2(p):
x, y, z = p
return -(x ** 2 + y ** 2 + z ** 2)
我们想用遗传算法找出目标函数的最大值,这样做:
func是你的目标函数
lb是每个变量搜索的最小界
ub是每个变量搜索区域的最大界
general_best,func_general_best,FitV_history=ga.ga(func=demo_func2, lb=[-1, -10, -5], ub=[2, 10, 2])
print('best_x:',general_best)
print('best_y:',func_general_best)
ga.plot_FitV(FitV_history)
定义你的目标函数
先读入城市坐标和城市间距离(这里用随机方法生成,以作为demo)
import numpy as np
num_points = 8
points = range(num_points)
points_coordinate = np.random.rand(num_points, 2)
distance_matrix = np.zeros(shape=(num_points, num_points))
for i in range(num_points):
for j in range(num_points):
distance_matrix[i][j] = np.linalg.norm(points_coordinate[i] - points_coordinate[j], ord=2)
print('distance_matrix is: \n', distance_matrix)
def cal_total_distance(points):
num_points, = points.shape
total_distance = 0
for i in range(num_points - 1):
total_distance += distance_matrix[points[i], points[i + 1]]
total_distance += distance_matrix[points[i + 1], points[0]]
return total_distance
使用遗传算法
from GA import GA_TSP
ga_tsp = GA_TSP(func=cal_total_distance, points=points, pop=50, max_iter=200, Pm=0.001)
best_points, best_distance = ga_tsp.fit()
画出结果
fig, ax = plt.subplots(1, 1)
best_points_ = np.concatenate([best_points, [best_points[0]]])
best_points_coordinate = points_coordinate[best_points_, :]
ax.plot(best_points_coordinate[:, 0], best_points_coordinate[:, 1],'o-r')
plt.show()
1.CPU的发展趋势: 核心数目依旧会越来越多,根据摩尔定律,由于单个核心性能提升有着严重的瓶颈问题,普通的PC桌面在2018年可能回到24核心。2.并发和并行的区别: 所有的并发处理都有排队等候,唤醒和执行这三个步骤,所以并发是宏观的观念,在微观上他们都是序列被处理的,只不过资源不会在某一个上被阻塞(一般是通过时间片轮转),所以在宏观上多个几乎同时到达的请求同时在被处...
run()方法是Runnable接口中定义的,start()方法是Thread类定义的。 所有实现Runnable的接口的类都需要重写run()方法,run()方法是线程默认要执行的方法,有底层源码可知是绑定操作系统的,也是线程执行的入口。 start()方法是Thread类的默认执行入口,Thread又是实现Runnable接口的。要使线程Thread启动起来,需要通过start方...
项目中,我们会遇到 提交的项目代码有问题,需要执行撤回命令,但是发现撤回之后还是会运行失败。下边是一个好方法,亲测比 git reset --hard 版本号 有效。下面我们详细解说一下。当我们本地已经 执行了git commit -m “说明内容”,但还没有 进行 git push,如何回滚呢操作如下:1 执行 git status 命令 查看本地的commit 提交记录。2 在执行 git log 命令 查看commit 提交的版本号然后输入 q 就会退出。3 (3种方法)再去执行 git
一、理解Linux的单用户多任务,多用户多任务概念; Linux 是一个多用户、多任务的操作系统;我们应该了解单用户多任务和多用户多任务的概念; 1、Linux 的单用户多任务; 单用户多任务;比如我们以beinan 登录系统,进入系统后,我要打开gedit 来写文档,但在写文档的过程中,我感觉少点音乐,所以又打开xmms 来点音乐;当然听点音乐还不行,MSN 还得打开,想知道几个弟兄现
一、硬件描述 读卡器外部电气图示1 读卡器电缆接头--M12,A-coded,8 PIN公头2 通讯状态指示灯3 RFID状态指示灯4 外壳接地端二、LED指示灯表2-1指示灯状态说明 指示灯 颜色 状态 指示内容 通讯状态指示灯 红灯 常亮 ...
下面介绍一下通过jquery和css自定义video播放控件。Html5 Video是现在html5最流行的功能之一,得到了大多数最新版本的浏览器支持.包括IE9,也是如此.不同的浏览器提供了不同的原生态浏览器视频空间.我们制作自定义视频控件为了在所有的浏览器中有一个相同的Html5视频控件而不受默认视频控件的控制.实际上,自定义视频控件并不困难.本文将告诉你如何用jQuery自定义视频控件,希望...
之前遇到了这个问题,在此记录一下在i3wm的配置文件中(一般位于~/.config/i3/)用vim或其他文本编辑器打开定位到#start a terminal那一行将下面的bindsym $mod+Return exec xxxx(这里的xxxx是原有终端)中的xxxx改为想要使用的终端模拟器既可比如:原来是这样:#start a terminalbindsym $mod+Ret...
作者:北欧森林链接:https://www.jianshu.com/p/ae0f502dc146来源:简书,已获授权转载RadiomicsWorld.com “影像组学世界”论坛:影像组学世界/RadiomicsWorld 本笔记来源于B站Up主: 有Li 的影像组学系列教学视频本节(32)主要介绍: 使用SimpleITK进行N4偏置场校正N4偏置场的定义和产生原因MR scans often display intensity non-uniformities due to va.
链表的基本操作:内容包括链表的创建,增加、删除节点,链表的逆序、排序和销毁等。
【Python爬虫】利用Python的requests库进行一次比较全面的数据爬取操作)二上篇文章我们已经对抓取某个url的html代码的方法进行了封装,下面我们就要用这个函数进行抓取工作了,首先还是要继续分析下网站通过主路由进入网站后我们可以发现我们先要继续深入的一些url地址,在进入每一个找到的url直到定位到我们需要爬去的位置上在开始解析:这些导航栏分别对应着不同的url的地址我们点...
一、PIVOT实例1. 建表建立一个销售情况表,其中,year字段表示年份,quarter字段表示季度,amount字段表示销售额。quarter字段分别用Q1, Q2, Q3, Q4表示一、二、三、四季度。CREATE TABLE SalesByQuarter( year INT, -- 年份quarter CHAR(2), -- 季度amount MONEY -- 总额)2. ...
-------------------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ---------------------一、File类File类是对文件系统中文件以及文件夹进行封装的对象,可以通过对象的思想来操作文件和文件夹。 File类保存文件或目录的各种元数据信息,包括文件名、文件长度、最后修改时间、是否可读、获取当前