浮点编码

命名风格:

Int  n or  i.

Float: f  or  flt.

Char:  c orch ,

Double:d or dbl.

Short int:sn or  si.

Bool : is     PS:  is Error -> 错误为真(1.

补码:有分支(负数时,有求补运算)

求补运算:取反加‘1PS:两次求补其值不变

浮点编码转换采用的是“IEEE”规定的编码标准

编码: 逻辑恒等式:

A and 0 =0 ; A and notA =0

A and 1 =A ; A or notA =1 A or 0 = 0 ; A or 1 =1

A xor 0 = A ; A xor 1 = notA

A xor A = 0 ; A xor notA = 1 neg A = -A (A不等0)

neg neg A = A

求补 与 补码的区别 求补是 取反后再加一的运算,补码是一种编码规则

数值在内存中的存储形式: 以一个字节为例: S DDDDDDD

符号 数值 正数的存放: S原值存放 负数的存放 :S求补后存放

 

LSB最低有效位和MSB最高有效位:

最低有效位(Least Significant Bit)代表二进制数中的最小的单位,可以用来指示数字很小的变化。也就是说,LSB是一个二进制数字中的 第0位(即最低位),具有权值为2^0,可以用它来检测数的奇偶性。在大端序中,lsb指最右边的位。

最高有效位(the Most Significant Bitmsb),是指一个n位二进制数字中的n-1位,具有最高的权值2^n − 1。与之相反的称之为最 低有效位。在大端序中,msb即指最左端的位。对于有符号二进制数,负数采用反码或补码形式,此时msb用来表示符号,msb1表示 负数,0表示正数。

注意:

(1)MSB(全大写)有时也指the Most Significant Byte,指多字节序列中具有最大权重的字节。 (2)LSB(全大写)有时也指Least Significant Byte,指多字节序列中最小权重的字节。

实数的存储形式: 定点小数存储方式,存储无弹性浪费空间优点是速

浮点存储形式:优点存储有弹性,缺点是效率较低


### 浮点编码自适应遗传算法简介 浮点编码自适应遗传算法是一种进化计算技术,用于解决优化问题。该方法通过模拟自然选择过程来迭代改进候选解的质量。相比于二进制编码浮点数编码能够更精确地表示参数空间中的位置。 ### 实现要点 #### 初始化种群 创建初始种群时,个体由一组随机生成的浮点数组成。这些数值代表待优化函数的输入变量[^2]。 ```python import numpy as np def initialize_population(pop_size, num_params): """初始化具有指定大小和维度的种群""" return np.random.uniform(-5.0, 5.0, size=(pop_size, num_params)) ``` #### 自适应变异操作 为了提高搜索效率并防止过早收敛,在每一代中调整突变率是一个有效策略。可以基于当前代的最佳适应度值动态改变突变强度: ```python def mutate(individual, best_fitness, gen_num, max_gen=100): """应用随时间变化而减小的概率分布来进行变异""" mutation_rate = (max_gen - gen_num) / max_gen * 0.1 mutated_individual = individual.copy() for i in range(len(mutated_individual)): if np.random.rand() < mutation_rate: mutated_individual[i] += np.random.normal(0, abs(best_fitness)**-0.5) return mutated_individual ``` #### 轮盘赌选择机制 采用轮盘赌方式挑选父母节点参与交叉繁殖。这种方法允许较优个体有更高几率被选中,同时也保留了一定比例较差的选择以维持群体多样性。 ```python def select_parents(fitnesses, pop_size): """根据适应度按概率选取两个父辈""" fitness_sum = sum(abs(f)) for f in fitnesses) probabilities = [abs(f)/fitness_sum for f in fitnesses] parent_indices = np.random.choice( range(pop_size), p=probabilities, replace=False, size=2 ) return parent_indices.tolist() ``` #### 十字交叉算子 对于实数向量形式的表现型,通常使用均匀或单点交叉法交换部分基因片段形成后代。 ```python def crossover(parents, cross_prob=0.7): """执行两点交叉组合产生新个体""" offspring = parents[:] if np.random.rand() < cross_prob: idx = sorted(np.random.randint(0, len(offspring[0]), 2)) temp = offspring[0][idx[0]:idx[1]].copy() offspring[0][idx[0]:idx[1]] = offspring[1][idx[0]:idx[1]] offspring[1][idx[0]:idx[1]] = temp return offspring ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值