遗传算法解决背包问题

遗传算法解决背包问题

遗传算法可以认为是一种启发式算法,根据达尔文的进化学说中“优胜劣汰”、“适者生存”的观点来解决一些实际生活中难以解决的问题。其实简单来说,遗传算法所做的事情就是“随机”生成一些可行解(不是最优解),然后随机一段时间之后找到局部最优解。但是这个“随机”的过程模拟了自然界中的进化规律,也是“更优解”更容易生存,“更优解”与“更优解”的结合能够生成“更更优解”。不断重复这个结合的过程,最终可以得到局部最优解,甚至可能是全局最优解。

算法具体描述可见:
一文读懂遗传算法工作原理
如何理解遗传算法

在此我给出有遗传算法求解背包问题的思路。

问题描述

背包问题

为了简单起见,我此处只介绍01背包问题。当然其实01背包问题用动态规划很容易就能实现。但遗传算法的意义却绝不是动态规划可以代替的。动态规划只能解决一些一定有明确解的问题,但事实上现在主流问题很少是有明确解的,大多数都是优化问题,也就是只能寻找局部最优解,并认为局部最优解已经足够好了。

import random
import copy
import codecs


class Genetic_alg:
    def __init__(self, weights, support_points, threshold):
        self.weights = weights
        self.support_points = support_points
        self.threshold = threshold
        self.size = len(weights)
        self.populations = []

    def construct_populations(self, times):
        local_populations = []
        local_populations.append([0 for i in range(self.size)])
        for k in range(times):
            chromos
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值