智能优化算法——遗传算法(Python&Matlab实现)[2]

初始化种群

initPopulation(POP, N)

进化过程==

for it in range(iter_N): # 遍历每一代

a, b = selection(N) # 随机选择两个个体

if np.random.random() < 0.65: # 以0.65的概率进行交叉结合

child1, child2 = crossover(POP[a], POP[b])

new = sorted([POP[a], POP[b], child1, child2], key=lambda ind: ind.fitness,

reverse=True) # 将父母亲和子代进行比较,保留最好的两个

POP[a], POP[b] = new[0], new[1]

if np.random.random() < 0.1: # 以0.1的概率进行变异

mutation(POP)

POP.sort(key=lambda ind: ind.fitness, reverse=True)

return POP

if name == ‘main’:

POP = implement()

=绘图代码======

def func(x):

return xnp.cos(5np.pi*x)+3.5

#return -(x * np.cos(5 * np.pi * x) + 3.5)

x = np.linspace(-1, 2.5, 100)

y = func(x)

scatter_x = np.array([ind.x for ind in POP])

scatter_y = np.array([ind.fitness for ind in POP])

best = sorted(POP, key=lambda POP: POP.fitness, reverse=True)[0] # 最佳点

print(‘best_x:’, best.x)

print(‘best_y:’, best.fitness)

plt.plot(x, y)

plt.scatter(scatter_x, scatter_y, c=‘r’)

plt.scatter(best.x, best.fitness, c=‘g’, label=‘best point’)

plt.legend()

plt.show()

#结果==

#=(1)最大值==

best_x: 2.40537584441956

best_y: 5.896804913355371

#=(1)最小值==

best_x: 2.196313082366646

best_y: -1.3073691355607653

智能优化算法——遗传算法(Python&Matlab实现)[2]_第1张图片智能优化算法——遗传算法(Python&Matlab实现)[2]_第2张图片

2.3 Matlab实现

%opt_minmax=-1; %目标优化类型:1最大化、-1最小化

opt_minmax=1;

num_ppu=50; %种群规模:个体个数

num_gen=60; %最大遗传代数

len_ch=20; %基因长度

gap=0.9; %代沟

sub=-1; %变量取值下限

up=2.5; %变量取值上限

cd_gray=1; %是否选择格雷编码方式:1是0否

sc_log=0; %是否选择对数标度:1是0否

trace=zeros(num_gen,2); %遗传迭代性能跟踪器,生成60行2列0矩阵

fieldd=[len_ch;sub;up;1-cd_gray;sc_log;1;1]; %区域描述器

chrom=crtbp(num_ppu,len_ch); %初始化生成种群,生成一个50*20的矩阵,矩阵元素是0-1随机数

k_gen=0;%初始化遗传次数

x=bs2rv(chrom,fieldd); %翻译初始化种群为10进制

fun_v=fun_sigv(x); %计算目标函数值

tx=sub:.01:up;

plot(tx,fun_sigv(tx))

xlabel(‘x’)

ylabel(‘y’)

title(‘一元函数优化结果’)

hold on

while k_gen

fit_v=ranking(-opt_minmax*fun_v); %计算目标函数的适应度

%ranking 函数为查询结果数据集分区中的每一行,并返回一个序列值

你可能感兴趣的:(程序员,python,算法,matlab)