mod:取余、取模
fix:向 0 取整
floor:向下取整
% 求起点和终点对应的x和y坐标
% 起点所在列(从左到右编号1.2.3...)
xs = mod(p_start, x) + 1; % x = 20, 对应上面公式的Gsize
% 起点所在行(从上到下编号行1.2.3...)
ys = fix(p_start / x) + 1; % x = 20 ,fix 向0取整
% 终点所在列、行
xe = mod(p_end, x) + 1;
ye = fix(p_end / x) + 1;
while i ~= single_path_num % ~= 不等于
% 点i所在列(从左到右编号1.2.3...)
x_now = mod(single_new_pop(1, i), x) + 1;
% 点i所在行(从上到下编号行1.2.3...)
y_now = fix(single_new_pop(1, i) / x) + 1;
% 点i+1所在列、行
x_next = mod(single_new_pop(1, i + 1), x) + 1;
y_next = fix(single_new_pop(1, i + 1) / x) + 1;
% 初始化最大迭代次数
max_iteration = 0;
% 判断点i和i+1是否连续,若不连续插入值
while max(abs(x_next - x_now), abs(y_next - y_now)) > 1
x_insert = floor((x_next + x_now) / 2);
y_insert = floor((y_next + y_now) / 2);
通过种群初始化的方式,在 1和 13 之间产生新的路径,1-7-13,产生更好的路径。
路径会越优越短
% 栅格序号
num_insert = (x_insert - 1) + (y_insert - 1) * x; % x = 20