网络优化3|染色问题|旅行商问题

图的着色问题 问题1: 图着色问题是一个著名的NP完全问题。给定无向图G=(V,E),问可否用K种颜色为V中的每一个顶点分配一种颜色,使得不会有两个相邻顶点具有同一种颜色? 但本题并不是要你解决这个着色问题,而是对给定的一种颜色分配,请你判断这是否是图着色问题的一个解。 输入格式: 输入在第一行给出3个整数V(0<V≤500)、E(≥0)和K(0<K≤V),分别是无向图的顶点数、边数、以及颜色数。顶点和颜色都从1到V编号。随后E行,每行给出一条边的两个端点的编号。在图的信息给出之后,给出了一个正整数N(≤20 阅读详情

顶点染色问题

染色问题起源

染色问题起源于四色猜想。1852年,毕业于伦敦大学的格斯里(FrancisGuthrie)来到一家科研单位搞地图着色工作时,发现每幅地图都可以只用四种颜色染色。
1976年6月,在美国伊利诺斯大学的两台不同的电子计算机上,用了1200个小时,作了100亿个判断,结果没有一张地图是需要五色的,最终证明了四色定理。第一个计算机解是由美国数学家Appel和Haken与运用计算机的专家Kock三人合作的成果。
![[Pasted image 20240826213948.png]]

取面上任意一点作为图的顶点,若两个面有一条公共边,则它们对应的顶点有一条边。经过这样的转化地图染色问题中对面的染色就变成了对新图中的顶点染色,且要求任意两个相邻的顶点不能染同一色。

顶点染色

定理1:对任意的图G均有X(G)≤Δ+1X(G)\le \Delta+1X(G)≤Δ+1,其中X(G)X(G)X(G)为图G的色数,即能够给图G染色的最小颜色数;△为图G的最大度。
![[Pasted image 20240826214127.png]]

Δ(G)=3, X(G)=4 \Delta(G)=3,\ X(G)=4 Δ(G)=3, X(G)=4
定理2:设G是连通图。
假定G既不是完全图又不是奇圈,则X(G)≤ΔX(G)\le \DeltaX(G)≤Δ
![[Pasted image 20240826214533.png]]

Δ(G)=2, X(G)=2 \Delta(G)=2,\ X(G)=2 Δ(G)=2, X(G)=2
![[Pasted image 20240826214505.png]]

Δ(G)=2, X(G)=3 \Delta(G)=2,\ X(G)=3 Δ(G)=2, X(G)=3
定理3:对任意的图G,若存在k-团为子图,则X(G)≥kX(G)\ge kX(G)≥k。 k-团就是k个顶点组成的完全图
![[Pasted image 20240826214659.png]]

v1,v4,v5v_{1},v_{4},v_{5}v1​,v4​,v5​构成一个3-团
X(G)≥3X(G)\ge 3X(G)≥3

Welsh-Powell算法
  1. 将图G的顶点按度数递减排列;
  2. 对第一个顶点及其不邻接的顶点染第一个颜色;
  3. 对尚未染色的第一个及其不邻接的顶点染第二个颜色;续行此法,直到全部顶点染色完为止
    ![[Pasted image 20240826215032.png]]

首先计算各个顶点的度
d(v1)=4, d(v2)=4, d(v3)=3, d(v4)=3 d(v_{1})=4,\ d(v_{2})=4,\ d(v_{3})=3,\ d(v_{4})=3 d(v1​)=4, d(v2​)=4, d(v3​)=3, d(v4​)=3
d(v5)=2, d(v6)=2 d(v_{5})=2,\ d(v_{6})=2 d(v5​)=2, d(v6​)=2
然后,根据顶点度从大到小排序
V1 -V2 - V3- V4 - V5- V6
![[Pasted image 20240826215305.png]]

给顶点v1染上红色,然后再给所有不与v1相邻且彼此不相邻的顶点染上红色,这样的顶点只有v5,因此v5染上红色;
![[Pasted image 20240826215349.png]]

在剩下的顶点中,选度最大的顶点v2,给顶点v2染上绿色,然后再给所有不与v2相邻且彼此不相邻的顶点染上绿色,这样的顶点只有v6,因此v6染上绿色;
![[Pasted image 20240826215430.png]]

在剩下的顶点中,选度最大的顶点v3,给顶点v3染上黄色,然后再给所有不与v3相邻且彼此不相邻的顶点染上黄色,这样的顶点只有v4,因此v4染上黄色。

Welsh-Powell算法的Matlab实现
function [col ve] = ColorGraphf(g)
%输入:g图的邻接矩阵
%输出:col 着色数 ve 顶点着色情况 
n = size(g, 2); %顶点数
ve = zeros([1 n]); %顶点着色情况集合
ve(1) = 1; %第一个顶点着1色 
col = 0; %颜色初值
cnd = 1; %着色过的顶点数目
while cnd < n %是否所有顶点都着色
	col = col + 1;%下一种颜色,从第1种颜色开始,因此co1初值为0 
	for i = 2:n %搜索所有没着色的顶点
		if ve(i) == 0 %顶点i没有着色
			flag = 1; %假设它可以着第col种颜色
			%判断和i相邻的顶点中是否有着第col种颜色 
			for j = 1:n
				if g(i, j) == 1
					if ve(j) == col; %和i相邻的顶点j着第col种颜色
						flag = 0;%i不能着第col种颜色 
					end
				end
			end
			%i可以着第col种颜色
			if flag == 1
				ve(i) = col;
				cnd = cnd + 1; %着色的顶点数加1个
			end
		end
	end
end
s = [1 1 1 1 2 2 2 3 4]; 
t = [2 3 4 6 3 4 5 5 6]; 
g = graph(s, t);
ag = full(g.adjacency());
[col ve] = ColorGraphf(ag)

col = 3
ve = 1 2 3 3 1 2

染色问题的数学规划模型

顶点个数n,顶点的最大度Δ\DeltaΔ
引入0-1变量
xik={1, 当vi着第k种颜色时0, 否则, i=1,2,…,n; k=1,2,…,Δ+1 x_{ik}=\left\{\begin{matrix} 1,\ 当v_{i}着第k种颜色时 \\ 0,\ 否则, \end{matrix}\right.\ i=1,2,\dots,n;\ k=1,2,\dots,\Delta+1 xik​={1, 当vi​着第k种颜色时0, 否则,​ i=1,2,…,n; k=1,2,…,Δ+1
设颜色总数为y,建立如下整数线性规划模型
min y, min\ y, min y,
s.t.{∑k=1Δ+1xik=1, i=1,2,…,nxik+xjk≤1, (vi,vj)∈E, k=1,2,…,Δ+1y≥∑k=1Δ+1kxik, i=1,2,…,nxik=0或1, i=1,2,…,n, k=1,2,…,Δ+1 s.t.\left\{\begin{matrix} \sum_{k=1}^{\Delta+1}x_{ik}=1,\ i=1,2,\dots,n \\ x_{ik}+x_{jk}\le 1,\ (v_{i},v_{j})\in E,\ k=1,2,\dots,\Delta+1 \\ y\ge \sum_{k=1}^{\Delta+1}kx_{ik},\ i=1,2,\dots,n \\ x_{ik}=0或1,\ i=1,2,\dots,n,\ k=1,2,\dots ,\Delta+1 \end{matrix}\right. s.t.⎩⎨⎧​∑k=1Δ+1​xik​=1, i=1,2,…,nxik​+xjk​≤1, (vi​,vj​)∈E, k=1,2,…,Δ+1y≥∑k=1Δ+1​kxik​, i=1,2,…,nxik​=0或1, i=1,2,…,n, k=1,2,…,Δ+1​

染色理论应用

排课问题

![[Pasted image 20240826221607.png]]
![[Pasted image 20240826221620.png]]

两门课之间有一条边说明,至少有一个学生同时选了这两门课程例如:
张三同时选了S和N这两门课,因此在这两个点之间连一条边;
张三同时选了S和G这两门课,因此在这两个点之间连一条边
王五同时选了G和N这两门课,因此在这两个点之间连一条边;
![[Pasted image 20240826221753.png]]

根据问题要求,我们把问题转化为如何给顶点分组,使得在同一组内的任意两个顶点之间没有边相连。
如果给同一组的顶点染上相同的颜色,排课问题就转化为用最少的颜色给图的顶点染色的问题

首先计算各个顶点的度

d(S)=3, d(N)=5, d(G)=3, d(M)=2 d(S)=3,\ d(N)=5,\ d(G)=3,\ d(M)=2 d(S)=3, d(N)=5, d(G)=3, d(M)=2
d(R)=2, d(P)=1 d(R)=2,\ d(P)=1 d(R)=2, d(P)=1
然后根据顶点度从大到小排序
N-S-G-M-R-P
![[Pasted image 20240826222440.png]]
![[Pasted image 20240826222501.png]]
![[Pasted image 20240826222516.png]]

%N-1 S-2 G-3 M-4 R-5 P-6
s = [1 1 1 1 1 2 2 3]; 
t = [2 3 4 5 6 3 4 5]; 
g = graph(s, t);
ag = full(g.adjacency());
[col ve] = ColorGraphf(ag)

col = 3
ve = 1 2 3 3 2 2

旅行商问题(TSP问题)

旅行商问题

给定一系列城市和每对城市之间的距离,求解访问每一座城市一次并回到起始城市的最短回路。
它是组合优化中的一个NP难问题,在运筹学和理论计算机科学中非常重要。
旅行商问题建立在图论中哈密顿问题基础上
![[Pasted image 20240826223012.png]]

哈密顿问题

1859年,数学家哈密顿(Hamilton)提出了一个叫做“周游世界”的游戏:
在一个正十二面体的20个顶点上,依次标注了伦敦、巴黎、莫斯科等世界上著名的大城市。要求游戏者从某个城市出发,把所有的城市都走过一次,且仅走过一次,然后回到出发点。这类问题就是图论中著名的哈密顿问题

图的哈密顿圈是指包含图的所有顶点的圈(Hamilton cycle)。
类似地,包含图的所有顶点的路称为图的哈密顿路(Hamiltonpath)。
一个图若包含哈密顿圈,则称这个图为哈密顿图(Hamiltonian graph).
哈密顿问题是图论中尚未解决的主要问题之一,目前还未找到判断一个图是否是哈密顿图的非平凡的充要条件。

定理1:
设无向图G是哈密顿图,S是V的任意的非空子集,则 p(G−S)≤∣S∣p(G-S)\le | S|p(G−S)≤∣S∣。其中,p(G-S)为从G中删除S(删除S中各顶点及关联的边)后所得到的图的连通分支。
定理2:
设G是n(n≥3)n(n\ge 3)n(n≥3)阶无向简单图,如果G中任何一对不相邻的顶点度数之和都大于等于n,则G是哈密顿图。
推论:
n(n≥3)n(n\ge 3)n(n≥3)阶完全图为哈密顿图。

寻找一个图的哈密顿圈问题是NP困难的
哈密顿问题扩展到网络(赋权图),如果一个网络有哈密顿圈,则圈上所有边的权重和就是这个哈密顿圈的权重。旅行商问题就是找到权重最小的哈密顿圈。因此旅行商问题的求解也是NP困难的
根据两点之间连边权重是否相同,旅行商问题可以分为对称旅行商问题和非对称旅行商问题

TSP简单实例

从长三角的四个主要城市中的某一个城市出发,每个城市走一遍,最后再回到出发城市,那么最少里程数的走法是什么?假设我们用自驾的方式
![[Pasted image 20240826223012.png]]

长三角主要城市自驾里程
![[Pasted image 20240826223939.png]]

在这个问题中,旅行商需要前往4个不同的城市。他需要找出前往这4个城市的最短路径,为此,必须计算每条可能的路径。
有时候,不确定要从哪个城市出发。你需要通过计算为旅行商找出起点和最佳路线。

假设有4个城市,你选择一个出发城市,合肥,还余下3个城市。涉及3个城市时,可能的路线有6条。
从合肥出发时,有6条可能的路线,但还可以从其他任何一个城市出发。
可能的出发城市有4个,从每个城市出发时都有6条可能的路线,因此可能的路线有4×6=24条。
每增加一个城市,需要计算的路线数都将增加。

5个城市为120,6个城市为720条,7个城市为5040条 8个城市为40320条
这就是阶乘(factorialfunction)。
假设有10个城市,可能的路线有10!=3628800。
换句话说,涉及10个城市时,需要计算的可能路线超过300万条。
因此,如果涉及的城市很多,用穷举法很难找出旅行商问题的正确解,

旅行商问题的一个平凡解法是找出图G的所有哈密尔顿回路计算它们的权重,然后比较它们的权重,权重最小的就是商人的最优路线
然而,理论上可以证明,旅行商问题是NPC问题,用枚举法求具有n个顶点的完全图K,的旅行商问题的最优解的算法复杂程度大约是O(n!)O(n!)O(n!)。

因此,针对实际的旅行商问题,通常采用近似求解的策略:
最近邻居法
最短距离法
基于最小生成树的算法
奇点的最小代价完美匹配
Christofides算法
启发式算法
智能优化算法

旅行商问题的数学规划模型

min∑i≠jdijxij min\sum_{i\ne j}d_{ij}x_{ij} mini=j∑​dij​xij​
s.t.∑j=1nxij=1, i=1,2,…,n s.t.\quad \sum_{j=1}^{n}x_{ij}=1,\ i=1,2,\dots,n s.t.j=1∑n​xij​=1, i=1,2,…,n
每个点只有一条边出去
∑i=1nxij=1, j=1,2,…,n \sum_{i=1}^{n}x_{ij}=1,\ j=1,2,\dots,n i=1∑n​xij​=1, j=1,2,…,n
每个点只有一条边进去
∑i,j∈Sxij≤∣S∣−1, 2≤∣S∣≤n−1, S⊂{1,2,…,n} \sum_{i,j\in S}x_{ij}\le | S|-1,\ 2\le | S|\le n-1,\ S \subset \left\{ 1,2,\dots,n \right\} i,j∈S∑​xij​≤∣S∣−1, 2≤∣S∣≤n−1, S⊂{1,2,…,n}
除起点和终点外,各边不构成圈
xij∈{0,1},i,j=1,2,…,ni≠j x_{ij}\in \left\{ 0,1 \right\},\quad i,j=1,2,\dots,n\quad i\ne j xij​∈{0,1},i,j=1,2,…,ni=j
其中∣S∣| S|∣S∣表示集合S种元素的个数

实际编程中上面的条件很难实现,因此实际上一般用下面的条件来确保除起点和终点外,各边不构成圈。
为每个城市规定一个访问顺序的编号u[i]u[i]u[i]变量。u[i]=ku[i]=ku[i]=k表示该城市是第kkk个被访问的城市。规定u[1]=0u[1]=0u[1]=0,任意u[i]<=n一1u[i]<=n一1u[i]<=n一1。显然如果x[i][j]=1x[i][j]=1x[i][j]=1,即道路i,j被选定在循环路径中,则u[j]>=u[i]+1u[j]>=u[i]+1u[j]>=u[i]+1。用以下约束表达这个逻辑:
u[j]>=u[i]+1−n(1−x[i][j]),i=1,…,n;j=2,.,n;i不等于j u[j]>=u[i]+1-n(1-x[i][j]),i=1,\dots,n;j=2,.,n;i不等于j u[j]>=u[i]+1−n(1−x[i][j]),i=1,…,n;j=2,.,n;i不等于j
上式中,如果x[i][j]=1x[i][j]=1x[i][j]=1,则等价于u[j]>=u[i]+1u[j]>=u[i]+1u[j]>=u[i]+1。如果x[i][j]=0x[i][j]=0x[i][j]=0,则右端小于等于0,恒小于等于左端,相当于该约束不存在。

TSP问题的求解

近似求解(最近邻居法):
从杭州出发,选离它最近的城市作为下一个目标城市-上海;
从上海出发,选离它最近的城市作为下一个目标城市-南京;
从南京出发,选离它最近的城市作为下一个目标城市-合肥

%1-上海2-杭州3-南京4-合肥 
clear
cityName = ["上海","杭州","南京","合肥"];
D = [inf 173 299 466; 174 inf 290 420; 306 280 inf 170; 467 430 171 inf]; %距离矩阵 
nCity = size(D, 1);

cityNo = 2; %从杭州出发,当前城市为杭州 
total = 0;
path = zeros(nCity, 1);

[total path] = nearestNeighborTSP(cityNo,D);

fprintf('最近邻居法求解TSP问题:n路径为:'); 
for i = 1 : nCity - 1
	fprintf(cityName(path(i)));
	fprintf('->'); 
end

fprintf(cityName(nCity));
formatSpec = '\n 总里程为:%4.0f公里\n'; fprintf(formatSpec, total);

最近邻居法求解TSP问题:
路径为:杭州->上海->南京->合肥
总里程为:643公里

旅行商问题应用

碎纸片的拼接复原

问题1:
对于给定的来自同一页印刷文字文件的碎纸机破碎纸片(仅纵切),建立碎纸片拼接复原模型和算法,并针对附件1、附件2给出的中英文各一页文件的碎片数据进行拼接复原。
如果复原过程需要人工干预,请写出干预方式及干预的时间节点。复原结果以图片形式及表格形式表达(见【结果表达格式说明】)。

若将每个碎纸看成一个点,我们可以根据碎纸之间的吻合度定义两张碎纸之间的距离,可以看出,两张碎纸如果吻合度低,那对应的距离也大,所以寻找吻合率最高的组合方式,实质就是寻找总距离最小的路径,也就是寻找一条最佳TSP路径
![[Pasted image 20240826231711.png]]

基于识别序列的定义,定义碎纸A到碎纸B的距离模型为
{dA→B=∑i=1n(Li+Ri−CXi)2Xi=0或1 \left\{\begin{matrix} d_{A\to B}=\sum_{i=1}^{n}(L_{i}+R_{i}-CX_{i})^{2} \\ X_{i}=0或1 \end{matrix}\right. {dA→B​=∑i=1n​(Li​+Ri​−CXi​)2Xi​=0或1​
式中,dA→Bd_{A\to B}dA→B​为碎纸A到碎纸B的距离
LiL_{i}Li​:为碎纸B的左识别序列
RiR_{i}Ri​为碎纸A的右识别序列
C为字符的宽度
XiX_{i}Xi​为表示序列L或R的第i位是否都有字符,是则为1
n为序列长度

由距离的定义公式可以看出,两个识别序列的吻合程度越大,识别序列的距离越小,理想状况下,当两个识别序列完全吻合时,距离为 0(实际情况中,由于二值化,损失了部分精度,所以不会为0)

将碎纸复原抽象成复原TSP问题:用距离定义为权值,构造一个完全图K19K_{19}K19​ 然后求这个完全图里面的TSP路径
min D=∑i=118dpi→pi+1 min\ D=\sum_{i=1}^{18}d_{p_{i}\to p_{i+1}} min D=i=1∑18​dpi​→pi+1​​
s.t.{dA→B=∑i=1n(Li+Ri−CXi)2{p1.p2,…,p19}是{1,2,…,19}的一个排列, Xi=0或1 s.t.\left\{\begin{matrix} d_{A\to B}=\sum_{i=1}^{n}(L_{i}+R_{i}-CX_{i})^{2} \\ \left\{ p_{1}.p_{2},\dots,p_{19} \right\}是\left\{ 1,2,\dots,19 \right\}的一个排列,\ X_{i}=0或1 \end{matrix}\right. s.t.{dA→B​=∑i=1n​(Li​+Ri​−CXi​)2{p1​.p2​,…,p19​}是{1,2,…,19}的一个排列, Xi​=0或1​
D为TSP路径的总距离,dpi→pi+1d_{p_{i}\to p_{i+1}}dpi​→pi+1​​为碎纸pip_{i}pi​到碎纸pi+1p_{i+1}pi+1​的距离:
dA→Bd_{A\to B}dA→B​为碎纸A到碎纸B的距离,其中A,B∈{1,2,…,19}

通过求解复原TSP问题,可以得到每个点的访问顺序,即碎纸片的拼接序
列,最后利用MATLAB图像拼接,得到复原了的纸片
一维碎纸复原算法步骤:

  1. 提取出碎纸图像的像素矩阵,并进行二值化处理;
  2. 提取出二值化处理后碎纸图像的文字特征
  3. 利用步骤二的文字特征构造识别序列,并转化为TSP问题
  4. 步骤四:利用模拟退火法求解TSP问题
    注:19!=121645100408832000,这是一个18位数,假设每毫秒验证一种方案,穷举法大概需要385万年。
用Welch Powell算法解决图着色问题(含C++代码) Welch Powell 算法其实就是在进行贪心算法之前对节点排了下序,具体过程如下: (1) 将图 G 中的节点按度数的递减顺序进行排列(这种排列可能不是唯一的,因为有些节点的度数相同) (2) 用第一种颜色对第一节点着色,并按排列顺序对与前面着色节点不邻接的每一节点着上同样的颜色 (3) 用第二种颜色对尚未着色的节点重复 (2),用第三种颜色继续这种做法,直到所有的节点全部着上色为止 ... 阅读详情

相关推荐

算法课设-地图着色问题

算法课设-地图着色问题

m0_73852491的博客 2043

图着色算法的Welsh-Powell算法

图着色问题是将图的顶点着色,使得任何两个相邻的顶点都不共享同一颜色,同时尽量减少所使用的颜色数量。更新顶点列表:通过std::remove_if算法移除所有已被禁止的顶点(即这一轮已经处理过或与当前颜色相邻的顶点),从而为下一次颜色分配准备新的顶点列表。缓存优化:在处理网格或元素级别的并行计算时,图着色可以帮助优化数据的缓存使用,通过减少不同计算任务之间的缓存冲突,提高缓存命中率。禁止相邻顶点:遍历当前顶点的所有相邻顶点,并将它们在forbidden向量中标记为真,以防止它们被赋予当前的颜色。

LYC_is_的博客 893

常见的运筹优化类问题及常用的优化算法

之前的研究的是有关多目标优化的方向,期间涉及到二次规划问题最优求解,以及kkt条件相关的知识。在研究启发式方法的同时也涉及到与传统优化方法的比较。因此在这里总结一些运筹向常见的问题, TSP、VRP、设施选址问题、网络优化、物流调度、路径规划问题等的建模,了解各模型的使用场景与运算效率 ...

qq_38384924的博客 2万+

地图着色问题

数据结构课程设计——地图着色问题

明确目标,不畏艰难,持之以恒 1032

计算智能--基于遗传算法的旅行商问题

一、旅行商问题概述 旅行商问题又称TSP问题,即给定一系列城市和每对城市之间的距离,求解访问每一座城市一次并回到起始城市的最短回路。旅行商问题是一个经典的组合优化问题。早期的研究者使用精确算法求解该问题,常用的方法包括:分枝定界法、线性规划法、动态规划法等。但是,随着问题规模的增大,精确算法将变得无能为力,因此,在后来的研究中,国内外学者重点使用近似算法或启发式算法,主要有遗传算法、模拟退火法、蚁...

weixin_42659381的博客 869

【GA TSP】基于matlab遗传算法求解旅行商问题【含Matlab源码 1909期】

遗传算法求解旅行商问题 完整代码,直接运行,适合小白!可提供运行操作视频!

订阅付费专栏Matlab(奶茶价版),可赠送奶茶价版付费专栏指定代码1份; 1411

解决旅行商问题的方法

旅行商问题旅行商问题定义:简介:智能优化算法解决旅行商问题遗传算法TSP问题基本概念遗传算法的基本原理1、设计算法的编码方式2、设计遗传算法的适应度函数3、设计遗传算法的选择操作4、设计遗传算法的交叉操作5、设计遗传算法的变异操作6、编写基于遗传算法的TSP问题求解程序其它算法求解中国旅行商问题的几种智能算法参考文献: 旅行商问题 定义: 旅行推销员问题(英语:Travelling salesma...

Jamesaonier的博客 1万+

遗传算法求解旅行商问题(TSP)的完整程序与实战

遗传算法(Genetic Algorithm, GA)是一种模拟生物进化过程的搜索启发式算法,它通过自然选择、遗传、变异等操作对解空间进行迭代搜索,从而找到问题的近似最优解。GA的关键在于种群的基因编码、适应度评估、选择、交叉和变异五大核心操作。这一算法特别适用于解决复杂系统优化问题,如旅行商问题(TSP)、调度问题、设计优化等,因其不依赖问题梯度信息且易并行化而被广泛应用。下面,我们将详细介绍遗传算法求解TSP问题的基本步骤,并探讨优化技巧的应用以及与其他技术的结合方式。

weixin_30591519的博客 713

旅行商问题是什么以及汇总

旅行商问题(Traveling-Salesman Problem,TSP) 1. 问题描述 旅行商问题(TravelingSalesmanProblem,TSP)是一个经典的组合优化问题。经典的TSP可以描述为:一个商品推销员要去若干个城市推销商品,该推销员从一个城市出发,需要经过所有城市后,回到出发地。应如何选择行进路线,以使总的行程最短。从图论的角度来看,该问题实质是在一个带权完全无向图中,找一个权值最小的Hamilton回路。由于该问题的可行解是所有顶点的全排列,随着顶点数的增加,会产生组合爆炸,它是

XiaoCai 5098

通达信缠论中枢自动识别与画线实战指南

本文详细介绍了通达信缠论中枢自动识别与画线公式的实战应用。该工具通过严谨的算法逻辑,自动在K线图上标记出符合缠论定义的中枢区间,帮助投资者摆脱繁琐的手工画图,聚焦于价格与中枢的互动关系,从而高效识别趋势延续、背驰及第三类买卖点,提升缠论分析与交易决策的效率。

weixin_29267307的博客 662

Ansys Zemax导入CAD文件避坑指南:STL/STEP/IGES格式选择与性能优化

本文深度解析了在Ansys Zemax中导入CAD文件的核心要点与性能优化策略。针对STL、STEP、IGES等主流格式,详细对比了其几何表示、精度与适用场景差异,并提供了基于模型特征的格式选择决策树。文章重点分享了体元、弦公差等高级参数的调优技巧,以及处理复杂装配体和避免精度陷阱的实战指南,旨在帮助光学工程师提升仿真效率与结果可靠性。

weixin_29202687的博客 436

TSP旅行商问题各种算法实现

 C++版本 遗传算法、模拟退火、蚁群算法、Hopfield神经网络、禁忌搜索,部分思路参考网络或者Paper。 //遗传算法解决TSP问题,35s # include &lt;bits/stdc++.h&gt; using namespace std; typedef long long LL; const int times = 3000;//遗传代数 const int chrom =...

junior19的博客 2万+

VConsole动态加载

// 移动端真机调试工具 vconsole import VConsole from "vconsole"; import Vue from "vue"; // 动态使用VConsole if(process.env.NODE_ENV==='production'){ if(process.env.VUE_APP_BASEURL.includes('test')||process.env.VUE_APP_BASEURL.includes('pre')){ Vue.prototype

aliven1的博客 1041

遗传算法求解多旅行商问题的新方法

A Novel Approach to Solve Multiple Traveling Salesmen Problem by Genetic Algorithm。多旅行商问题(mTSP)是一个复杂的组合优化问题,它是著名的旅行商问题的推广,其中可以使用一个或多个销售人员进行求解。优化任务可以描述如下:给定一个车队、一个公共仓库和客户的多个请求,找到满足所有需求的总路线成本最低的路线集。由于TSP已经是一个复杂的问题,即NP完全问题,因此需要考虑启发式优化算法,如遗传算法(GA)。mTSP的经典GA工具的

qq_45874683的博客 4241

45个经典Linux面试题(非常详细)零基础入门到精通,收藏这一篇就够了

(文件系统分配其中的一些磁盘块用来记录它自身的一些数据,如 i 节点,磁盘分布图,间接块,超级块等。$ chmod 751 file 给 file 的属主分配读、写、执行(7)的权限,给 file 的所在组分配读、执行(5)的权限,给其他用户分配执行(1)的权限。linux命令’hash’管理着一个内置的哈希表,记录了已执行过的命令的完整路径, 用该命令可以打印出你所使用过的命令以及执行的次数。创建文件:典型的如 touch,vi 也可以创建文件,其实只要向一个不存在的文件输出,都会创建文件。

小陈的博客 2070

k230+CanMV+micropython环境下byte、int、hex、string之间的转换常用函数实测

【代码】k230+CanMV+micropython环境下byte、int、hex、string之间的转换常用函数实测。

weixin_47446386的博客 119

颜色旅行商问题

英文:Colored Traveling Salesman Problem摘要:多旅行商问题是一个重要的组合优化问题。它已被广泛且成功地应用于多旅行商(销售人员)共享公共工作空间(城市集)的实际案例中。然而,它不能代表一些应用程序问题,即多个旅行商不仅有自己的专属任务,而且彼此共享一组任务。这项工作提出了一种新的MTSP,用于处理此类情况,被称为有色人种旅行推销员问题colored traveling salesman problem(CTSP)。定义了两种类型的城市组,即每组唯一颜色的专属城市供销售人员访

qq_45874683的博客 2223

matlab SAR图像的多视滤波

单视复数数据(Single Look Comple)是原始的最高分辨率数据,但是从单个像元散射的雷达回波信号的相干叠加,导致强度信息有很多噪声。SAR的多视处理是对SLC数据方位向和/或距离向做平均,得到的结果是多视后的强度数据。多视处理可以提高SAR图像的信噪比,有效抑制斑点噪声,但是会降低方位分辨率。

点云侠的博客 534

基于遗传算法解决TSP问题(旅行商问题)

目录1.遗传算法介绍1.1发展概况1.2算法基本思想2.TSP(旅行商)问题简介3.利用遗传算法解决TSP问题3.1代码截图3.2实验结果分析 1.遗传算法介绍 遗传算法(Genetic Algorithm)是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法。遗传算法是从代表问题可能潜在的解集的一个种群(population)开始的,而...

WLSTLA 4376

第4篇:使用 NModbus 库快速搭建 Modbus TCP 通信(从零开始用 C# 开发 Modbus 上位机)

本文介绍了如何使用 NModbus 库快速搭建 Modbus TCP 上位机通信程序。通过安装 NModbus4 NuGet 包,开发者可以轻松实现 Modbus TCP 连接,无需手动处理底层协议细节。文章详细演示了核心功能实现: 创建 TCP 客户端连接设备 读取保持寄存器(功能码0x03) 写入单个寄存器(功能码0x06) 关闭连接释放资源 提供完整C#示例代码,包含初始化连接、数据读写等关键操作,帮助开发者快速构建Modbus TCP通信应用。相比手动实现,NModbus库大幅简化了开发流程,特别适

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1045

【Godot】【工程】中文字体与多语言(缺字/体积/打包:一次性配置到位)

本文介绍了Godot游戏开发中的中文字体配置与多语言支持方案。主要内容包括:1)中文字体的全局与局部设置;2)使用子集化技术减小字体体积;3)多语言资源管理及翻译系统实现;4)语言切换机制与控件刷新方法;5)字体回退策略优化显示效果;6)打包优化建议。文章提供了从字体导入到多语言实现的完整解决方案,帮助开发者系统性解决中文显示和多语言支持问题,同时优化资源体积和性能表现。配套案例可供学习参考。

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 598

【TSP问题】基于遗传算法GA实现最短距离 多起点多终点多旅行商问题求解附Matlab代码

多起点多终点多旅行商问题 (MDTSP) 是指在多个起点和多个终点之间,安排多个旅行商进行路线规划,使得所有旅行商都能完成从起点到终点的旅行,且总路程最短。该问题在现实生活中有着广泛的应用,例如物流运输、快递配送、城市公交线路规划等。遗传算法 (GA) 是一种模拟自然界生物进化过程的优化算法。它通过模拟生物的遗传和变异过程,不断优化问题的解,最终找到最优解。GA 的基本步骤如下:初始化种群:随机生成一定数量的染色体,每个染色体代表一个可行解。适应度评估:根据每个染色体的适应度函数计算其适应度值。

m0_57702748的博客 1330

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

遗传算法 (解决TSP旅行商问题) 附Python代码

遗传算法的个人理解以及Python实现

qq_55482949的博客 5210

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

上一篇: 网络优化2|最小生成树|Kruskal|Prim|Matlab
下一篇: 网络优化4|网络流问题|路径规划问题|车辆路径问题
ChoSeitaku
博客等级 码龄5年 3452粉丝 557原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值