XiaoJian39 2022-11-20 12:56 采纳率: 100%
浏览 12
已结题

粒子群算法局部最优更新问题

粒子群算法局部最优位置总是更新,明明适应度并没有优于上一次的局部最优,但是他就是把局部最优位置更新了
# 适应度更新
for i in range(m):
        if (fit0[i][0] > pbest[i][0] and fit0[i][1] < pbest[i][1]) or (fit0[i][0] > pbest[i][0] and fit0[i][1] == pbest[i][1]) or (fit0[i][0] == pbest[i][0] and fit0[i][1] < pbest[i][1]):  # 效益更好
            pbest[i] = fit0[i]  # 更新最佳效益
            px[i][:] = p[i][:]  # 更新最佳位置
        else:
            if fit0[i][2] > pbest[i][2] :
                pbest[i] = fit0[i]  # 更新最佳效益
                px[i] = p[i]  # 更新最佳位置
            else:
                if fit0[i][2] == pbest[i][2]:
                    if fit0[i][1] < pbest[i][1]:
                        pbest[i] = fit0[i]  # 更新最佳效益
                        px[i] = p[i] # 更新最佳位置
    return pbest, px
# 运行
 Weight, Value, K0 = readexcel('shuju1.xls')
    # N = 100  # 群体粒子个数
    nitem = len(Weight[0])  # 每组物品数量
    D = len(Weight)  # 组数
    # T = 300  # 最大迭代次数
    c1 = 1.5  # 学习因子1
    c2 = 1.5  # 学习因子2
    W_max = 0.8  # 惯性权重最大值
    W_min = 0.4  # 惯性权重最小值
    V_max = 10  # 速度最大值
    V_min = -10  # 速度最小值
    Weight_max = 300  # 背包容量
    afa = 10  # 惩罚系数

    x = init_x(N, D, nitem)  # 初始化x
    v = init_v(N, D, V_max, V_min)  # 初始化v
    pb, px = fitness(x, N, D, Weight, Weight_max, Value, afa, K0)
    gb = pb[0]
    gx = px[0]
    cha_0 = [[],[]]
    cha_1 = []
    # gb = 0.0
    # gx = [0, 0, 0, 0, 0, 0]
    gb, gx = update_gbest(px, pb, gb, gx, N)
    # print(pb, px)
    for i in range(T):
        v = update_v(v, x, N, D, px, gx, c1, c2, V_max, V_min)  # 速度更新
        x = update_x(x, v, N, D, nitem)  # 位置更新
        fit0, x0 = fitness(x, N, D, Weight, Weight_max, Value, afa, K0)  # 适应度fitvalue和fitweight
        print("适应度", i, fit0, x0)
        pb, px = update_pbest(x0, fit0, pb, px, N)  # 本次循环局部最佳适应度和最佳位置
        print("局部最优", i, pb, px)
        gb, gx = update_gbest(px, pb, gb, gx, N)  # 本次循环全局最佳适应度和最佳位置
运行结果及报错内容

局部最优 3 [[852.0418999999999, 86.53999999999999, 1.0686], [799.5312, 94.55, 0.954]] [[1 1], [0 1]]
适应度 4 [[804.1499999999999, 92.22, 0.9474], [751.6393, 100.22999999999999, 0.8328]] [[1 0],[0 0]]
局部最优 4 [[852.0418999999999, 86.53999999999999, 1.0686], [799.5312, 94.55, 0.954]] [[1 0],[0 0]]

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 11月28日
    • 创建了问题 11月20日

    悬赏问题

    • ¥15 短剧的sdk在哪里接入
    • ¥15 求:可不可以提供一些 在国内可以用,低代码不要太难 在电脑上可以下载的 制作app的软件
    • ¥60 找人回答kibana8.14.3二次集成开发,自定义插件ui导航栏如何设置
    • ¥15 fluke高精度万用表8845A型号测交流电压一直跳动,且去掉输入后显示不归零
    • ¥15 不同模型怎么用同一个shader
    • ¥15 安卓启动没有ais proxy与v4l2的log打印
    • ¥15 go怎么读取mdb文件里面的数据
    • ¥60 Matlab联合CRUISE仿真编译dll文件报错
    • ¥15 脱敏项目合作,ner需求合作
    • ¥15 脱敏项目合作,ner需求合作