python差分进化算法_差分进化算法(differential evolution)的Python实现

本文介绍了差分进化算法,一种演化算法,用于全局优化问题。文章详细阐述了算法原理,并提供了Python实现代码,包括Point、Population和DifferentialEvolution类,以及测试函数。通过模拟多个迭代,优化球体和Rastrigin等测试函数,展示了算法的效率。
摘要由CSDN通过智能技术生成

演化算法被归类为一组用于生物进化全局优化的算法,并且基于元启发式搜索方法。可能的解决方案通常跨越问题域上的n维向量空间,并且我们模拟几个总体粒子以达到全局最优。

基本形式中的优化问题包括通过根据为算法提供的程序指令从可能的解元素(矢量)池中选择值来解决最大化或最小化实际函数的任务。进化方法通常遵循具有不同变化的特定策略,以从种群集合中选择候选元素,并应用交叉和/或突变来修改元素,同时尝试提高修饰元素的质量。

这些算法也可以应用于一些有趣的应用,并且在优化NP难题方面也表现出色,包括旅行推销员问题,作业车间调度,图着色,同时也在诸如信号和系统,机械工程和解决数学优化问题。

一种属于演化算法家族的算法是差分进化(DE)算法。在这篇文章中,我们将讨论差分进化算法的一些特性,同时在Python中实现它以优化几个测试函数。

差分进化算法

DE接近一个优化问题,迭代地尝试改进一组给定质量指标(成本函数)的候选解决方案。这些算法集属于元启发式算法,因为它们对被优化的问题做出很少或根本不做任何假设,并且可以搜索可能的解决方案元素的非常大的空间。该算法涉及维持候选解决方案的群体经受重组,评估和选择的迭代。创建新的候选解决方案需要使用称为群体差分权重的参数F对选定元素应用线性运算以生成向量元素,然后基于参数交叉概率CR随机应用交叉。

该算法遵循以下列出的步骤:

实现算法

为了实现上述方法,代码结构如下:

其中,differential_evolution.py我们将执行该算法的主文件。helpers目录由helper类和用于几个操作的函数组成,例如处理与候选元素(point.py)有关的点对象和向量操作,处理所有这些点的集合以及构建population(collection.py),测试要使用的函数的方法/成本函数来测试算法的效率(test_functions.py)。

构建点类的Python实现

# helpers/point.py

import numpy as np

import scipy as sp

class Point:

def __init__(self, dim=2, upper_limit=10, lower_limit=-10, objective=None):

self.dim = dim

self.coords = np.zeros((self.dim,))

self.z = None

self.range_upper_limit = upper_limit

self.range_lower_limit = lower_limit

self.objective = objective

self.evaluate_point()

def generate_random_point(self):

self.coords = np.random.uniform(self.range_lower_limit, self.range_upper_limit, (self.dim,))

self.evaluate_point()

def evaluate_point(self):

# self.z = evaluate(self.coords)

self.z = self.objective.evaluate(self.coords)

在这里,我们初始化Point类,dim它是矢量的尺寸大小,lower_limit并upper_limit指定矢量的每个坐标的域。self.z是该点的目标函数值,与每个实例相关联,以便根据其

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值