数学建模:智能优化算法及其python实现

这篇具有很好参考价值的文章主要介绍了数学建模:智能优化算法及其python实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

智能优化算法简介

优化问题是指在满足一定条件下,在众多方案或参数值中寻找最优方案或参数值,以使得某个或多个功能指标达到最优,或使系统的某些性能指标达到最大值或最小值。优化问题广泛地存在于信号处理、图像处理、生产调度、任务分配、模式识别、自动控制和机械设计等众多领域。优化方法是一种以数学为基础,用于求解各种优化问题的应用技术。各种优化方法在上述领域得到了广泛应用,并且已经产生了巨大的经济效益和社会效益。实践证明,通过优化方法,能够提高系统效率,降低能耗,合理地利用资源,并且随着处理对象规模的增加,这种效果也会更加明显。
在电子、通信、计算机、自动化、机器人、经济学和管理学等众多学科中,不断地出现了许多复杂的组合优化问题。面对这些大型的优化问题,传统的优化方法(如牛顿法、单纯形法等)需要遍历整个搜索空间,无法在短时间内完成搜索,且容易产生搜索的“组合爆炸”。例如,许多工程优化问题,往往需要在复杂而庞大的搜索空间中寻找最优解或者准最优解。鉴于实际工程问题的复杂性、非线性、约束性以及建模困难等诸多特点,寻求高效的优化算法已成为相关学科的主要研究内容之一。
受到人类智能、生物群体社会性或自然现象规律的启发,人们发明了很多智能优化算法来解决上述复杂优化问题,主要包括:模仿自然界生物进化机制的遗传算法;通过群体内个体间的合作与竞争来优化搜索的差分进化算法;模拟生物免疫系统学习和认知功能的免疫算法;模拟蚂蚁集体寻径行为的蚁群算法;模拟鸟群和鱼群群体行为的粒子群算法;源于固体物质退火过程的模拟退火算法;模拟人类智力记忆过程的禁忌搜索算法;模拟动物神经网络行为特征的神经网络算法;等等。这些算法有个共同点,即都是通过模拟或揭示某些自然界的现象和过程或生物群体的智能行为而得到发展;在优化领域称它们为智能优化算法,它们具有简单、通用、便于并行处理等特点。
基于scikit-opt库的python实现:

# 安装
pip install scikit-opt

差分进化算法(Differential Evolution,DE)

差分进化算法(Differential Evolution,DE)是一种新兴的进化计算技术。它由Storn等人于1995年提出,其最初的设想是用于解决切比雪夫多项式问题,后来发现差分进化算法也是解决复杂优化问题的有效技术。
差分进化算法是基于群体智能理论的优化算法,是通过群体内个体间的合作与竞争产生的智能优化搜索。但相比于进化计算,差分进化算法保留了基于种群的全局搜索策略,采用实数编码、基于差分的简单变异操作和“一对一”的竞争生存策略,降低了进化计算的复杂性。同时,差分进化算法特有的记忆能力使它可以动态跟踪当前的搜索情况,以调整其搜索策略,它具有较强的全局收敛能力和稳健性,且不需要借助问题的特征信息,适用于求解一些利用常规的数学规划方法很难求解甚至无法求解的复杂优化问题。

线性/非线性规划问题:

'''
min f(x1, x2, x3) = x1^2 + x2^2 + x3^2
s.t.
    x1*x2 >= 1
    x1*x2 <= 5
    x2 + x3 = 1
    0 <= x1, x2, x3 <= 5
'''

def obj_func(p):
    x1, x2, x3 = p
    return x1 ** 2 + x2 ** 2 + x3 ** 2

constraint_eq = [
    lambda x: 1 - x[1] - x[2]
]
constraint_ueq = [
    lambda x: 1 - x[0] * x[1],
    lambda x: x[0] * x[1] - 5
]

from sko.DE import DE

de = DE(func=obj_func, n_dim=3, size_pop=50, max_iter=800, lb=[0, 0, 0], ub=[5, 5, 5],
        constraint_eq=constraint_eq, constraint_ueq=constraint_ueq)

best_x, best_y = de.run()
print('best_x:', best_x, '\n', 'best_y:', best_y)

遗传算法(Genetic Algorithm,GA)

遗传算法(Genetic Algorithm,GA)是模拟生物在自然环境中的遗传和进化过程而形成的自适应全局优化搜索算法。它最早由美国的J. H. Holland教授提出,起源于20世纪60年代对自然和人工自适应系统的研究;70年代,K. A. De Jong基于遗传算法的思想,在计算机上进行了大量的纯数值函数优化计算试验;80年代,遗传算法由D. J. Goldberg在一系列研究工作的基础上归纳总结而成。
遗传算法是 通过模仿自然界生物进化机制而发展起来的随机全局搜索和优化方法。它借鉴了达尔文的进化论和孟德尔的遗传学说,本质上是一种并行、高效、全局搜索的方法,它能在搜索过程中自动获取和积累有关搜索空间的知识,并自适应地控制搜索过程以求得最优解。遗传算法操作:使用“适者生存”的原则,在潜在的解决方案种群中逐次产生一个近似最优的方案。在每一代中,根据个体在问题域中的适应度值和从自然遗传学中借鉴来的再造方法进行个体选择,产生一个新的近似解。这个过程导致种群中个体的进化,得到的新个体比原个体更能适应环境。

线性/非线性规划问题:

import numpy as np
def schaffer(p):
    '''
    This function has plenty of local minimum, with strong shocks
    global minimum at (0,0) with value 0
    https://en.wikipedia.org/wiki/Test_functions_for_optimization
    '''
    x1, x2 = p
    part1 = np.square(x1) - np.square(x2)
    part2 = np.square(x1) + np.square(x2)
    return 0.5 + (np.square(np.sin(part1)) - 0.5) / np.square(1 + 0.001 * part2)

from sko.GA import GA

ga = GA(func=schaffer, n_dim=2, size_pop=50, max_iter=800, prob_mut=0.001, lb=[-1, -1], ub=[1, 1], precision=1e-7)
best_x, best_y = ga.run()
print('best_x:', best_x, '\n', 'best_y:', best_y)

旅行商问题:

import numpy as np
from scipy import spatial
import matplotlib.pyplot as plt

num_points = 50

points_coordinate = np.random.rand(num_points, 2)  # generate coordinate of points
distance_matrix = spatial.distance.cdist(points_coordinate, points_coordinate, metric='euclidean')


def cal_total_distance(routine):
    '''The objective function. input routine, return total distance.
    cal_total_distance(np.arange(num_points))
    '''
    num_points, = routine.shape
    return sum([distance_matrix[routine[i % num_points], routine[(i + 1) % num_points]] for i in range(num_points)])

from sko.GA import GA_TSP

ga_tsp = GA_TSP(func=cal_total_distance, n_dim=num_points, size_pop=50, max_iter=500, prob_mut=1)
best_points, best_distance = ga_tsp.run()
 fig, ax = plt.subplots(1, 2)
best_points_ = np.concatenate([best_points, [best_points[0]]])
best_points_coordinate = points_coordinate[best_points_, :]
ax[0].plot(best_points_coordinate[:, 0], best_points_coordinate[:, 1], 'o-r')
ax[1].plot(ga_tsp.generation_best_Y)
plt.show()

粒子群优化算法(Particle Swarm Optimization,PSO)

粒子群算法(Particle Swarm Optimization,PSO)是Kennedy和Eberhart受人工生命研究结果的启发,通过模拟鸟群觅食过程中的迁徙和群聚行为而提出的一种基于群体智能的全局随机搜索算法;1995年IEEE国际神经网络学术会议上发表了题为“Particle Swarm Optimization”的论文,标志着粒子群算法的诞生。粒子群算法一经提出,由于它算法简单,容易实现,立刻引起了进化计算领域学者们的广泛关注,成为一个研究热点。
粒子群算法与其他进化算法一样,也是基于“种群”和“进化”的概念,通过个体间的协作与竞争,实现复杂空间最优解的搜索。同时,它又不像其他进化算法那样对个体进行交叉、变异、选择等进化算子操作,而是将群体中的个体看成是在D维搜索空间中没有质量和体积的粒子,每个粒子以一定的速度在解空间运动,并向自身历史最佳位置pbestpbest和邻域历史最佳位置gbestgbest聚集,实现对候选解的进化。粒子群算法因具有很好的生物社会背景而易于理解,由于参数少而容易实现,对非线性、多峰问题均具有较强的全局搜索能力,在科学研究与工程实践中得到了广泛关注。

线性/非线性规划问题:

def demo_func(x):
    x1, x2, x3 = x
    return x1 ** 2 + (x2 - 0.05) ** 2 + x3 ** 2

from sko.PSO import PSO

pso = PSO(func=demo_func, n_dim=3, pop=40, max_iter=150, lb=[0, -1, 0.5], ub=[1, 1, 1], w=0.8, c1=0.5, c2=0.5)
pso.run()
print('best_x is ', pso.gbest_x, 'best_y is', pso.gbest_y)

模拟退火算法(Simulated Annealing,SA)

模拟退火算法(Simulated Annealing,SA)的思想最早由Metropolis等人于1953年提出。Kirkpatrick于1983年第一次使用模拟退火算法求解组合最优化问题。模拟退火算法是一种基于Monte Carlo迭代求解策略的随机寻优算法,其出发点是基于物理中固体物质的退火过程与一般组合优化问题之间的相似性。其目的在于:为具有NP(Non-deterministic Polynomial)复杂性的问题提供有效的近似求解算法,它克服了传统算法优化过程容易陷入局部极值的缺陷和对初值的依赖性。
模拟退火算法是一种通用的优化算法,是局部搜索算法的扩展。它与局部搜索算法的不同之处,是以一定的概率选择邻域中目标值大的状态。从理论上来说,它是一种全局最优算法。模拟退火算法具有十分强大的全局搜索性能,这是因为它采用了许多独特的方法和技术:基本不用搜索空间的知识或者其他的辅助信息,而只是定义邻域结构,在邻域结构内选取相邻解,再利用目标函数进行评估;采用概率的变迁来指导它的搜索方向,它所采用的概率仅仅是作为一种工具来引导其搜索过程朝着更优化解的区域移动。因此,虽然看起来它是一种盲目的搜索方法,但实际上有着明确的搜索方向。

线性/非线性规划问题:

demo_func = lambda x: x[0] ** 2 + (x[1] - 0.05) ** 2 + x[2] ** 2

from sko.SA import SA

sa = SA(func=demo_func, x0=[1, 1, 1], T_max=1, T_min=1e-9, L=300, max_stay_counter=150)
best_x, best_y = sa.run()
print('best_x:', best_x, 'best_y', best_y)

旅行商问题:

import numpy as np
from scipy import spatial
import matplotlib.pyplot as plt

num_points = 50

points_coordinate = np.random.rand(num_points, 2)  # generate coordinate of points
distance_matrix = spatial.distance.cdist(points_coordinate, points_coordinate, metric='euclidean')


def cal_total_distance(routine):
    '''The objective function. input routine, return total distance.
    cal_total_distance(np.arange(num_points))
    '''
    num_points, = routine.shape
    return sum([distance_matrix[routine[i % num_points], routine[(i + 1) % num_points]] for i in range(num_points)])

from sko.SA import SA_TSP

sa_tsp = SA_TSP(func=cal_total_distance, x0=range(num_points), T_max=100, T_min=1, L=10 * num_points)

best_points, best_distance = sa_tsp.run()
print(best_points, best_distance, cal_total_distance(best_points))

蚁群算法(Ant Colony Optimization,ACO)

蚁群算法(Ant Colony Optimization,ACO)是由意大利学者M. Dorigo、 V. Maniezzo和A. Colorni等人于20世纪90年代初期通过模拟自然界中蚂蚁集体寻径行为而提出的一种基于种群的启发式随机搜索算法,是群智能理论研究领域的一种主要算法。
蚂蚁有能力在没有任何提示的情形下找到从巢穴到食物源的最短路径,并且能随环境的变化,自适应地搜索新的路径。其根本原因是蚂蚁在寻找食物时,能在其走过的路径上释放一种特殊的分泌物——信息素。随着时间的推移,该物质会逐渐挥发,后来的蚂蚁选择该路径的概率与当时这条路径上信息素的强度成正比。当一条路径上通过的蚂蚁越来越多时,其留下的信息素也越来越多,后来的蚂蚁选择该路径的概率也就越高,从而更增加了该路径上的信息素强度。而强度大的信息素会吸引更多的蚂蚁,从而形成一种正反馈机制。通过这种正反馈机制,蚂蚁最终可以发现最短路径。蚁群算法具有分布式计算、无中心控制和分布式个体之间间接通信等特征,易于与其他优化算法相结合。它通过简单个体之间的协作,表现出了求解复杂问题的能力,已经广泛应用于优化问题的求解。

旅行商问题:

import numpy as np
from scipy import spatial
import matplotlib.pyplot as plt

num_points = 50

points_coordinate = np.random.rand(num_points, 2)  # generate coordinate of points
distance_matrix = spatial.distance.cdist(points_coordinate, points_coordinate, metric='euclidean')


def cal_total_distance(routine):
    '''The objective function. input routine, return total distance.
    cal_total_distance(np.arange(num_points))
    '''
    num_points, = routine.shape
    return sum([distance_matrix[routine[i % num_points], routine[(i + 1) % num_points]] for i in range(num_points)])

from sko.ACA import ACA_TSP

aca = ACA_TSP(func=cal_total_distance, n_dim=num_points,
              size_pop=50, max_iter=200,
              distance_matrix=distance_matrix)

best_x, best_y = aca.run()

免疫算法(Immune Algorithm,IA)

最早的免疫系统模型是由Jerne于1973年提出的,他基于Burnet的克隆选择学说,开创了独特型网络理论,给出了免疫系统的数学框架,并采用微分方程建模来仿真淋巴细胞的动态变化。Farmal等人于1986年基于免疫网络学说理论构造出免疫系统的动态模型,展示了免疫系统与其他人工智能方法相结合的可能性,开创了免疫系统研究的先河。
免疫算法(Immune Algorithm,IA)是模仿生物免疫机制,结合基因的进化机理,人工构造出的一种新型智能搜索算法。免疫算法具有一般免疫系统的特征,采用群体搜索策略,通过迭代计算,最终以较大的概率得到问题的最优解。相比较于其他算法,免疫算法利用自身产生多样性和维持机制,保证了种群的多样性,克服了一般寻优过程中(特别是多峰值的寻优过程中)不可避免的“早熟”问题,可求得全局最优解。免疫算法具有自适应性、随机性、并行性、全局收敛性、种群多样性等优点。

旅行商问题:

import numpy as np
from scipy import spatial
import matplotlib.pyplot as plt

num_points = 50

points_coordinate = np.random.rand(num_points, 2)  # generate coordinate of points
distance_matrix = spatial.distance.cdist(points_coordinate, points_coordinate, metric='euclidean')


def cal_total_distance(routine):
    '''The objective function. input routine, return total distance.
    cal_total_distance(np.arange(num_points))
    '''
    num_points, = routine.shape
    return sum([distance_matrix[routine[i % num_points], routine[(i + 1) % num_points]] for i in range(num_points)])

from sko.IA import IA_TSP

ia_tsp = IA_TSP(func=cal_total_distance, n_dim=num_points, size_pop=500, max_iter=800, prob_mut=0.2,
                T=0.7, alpha=0.95)
best_points, best_distance = ia_tsp.run()
print('best routine:', best_points, 'best_distance:', best_distance)

人工鱼群算法(Artificial Fish Swarm Algorithm,AFSA)

人工鱼群算法(Artificial Fish Swarm Algorithm,AFSA)是指在一片水域中,鱼往往能自行或尾随其他鱼找到营养物质多的地方,因而鱼生存数目最多的地方一般就是本水域中营养物质最多的地方,人工鱼群算法就是根据这一特点,通过构造人工鱼来模仿鱼群的觅食、聚群及追尾行为,从而实现寻优。

线性/非线性规划问题:

def func(x):
    x1, x2 = x
    return 1 / x1 ** 2 + x1 ** 2 + 1 / x2 ** 2 + x2 ** 2


from sko.AFSA import AFSA

afsa = AFSA(func, n_dim=2, size_pop=50, max_iter=300,
            max_try_num=100, step=0.5, visual=0.3,
            q=0.98, delta=0.5)
best_x, best_y = afsa.run()
print(best_x, best_y)

参考文献

人工智能:智能优化算法文章来源地址https://www.toymoban.com/news/detail-774479.html

到了这里,关于数学建模:智能优化算法及其python实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 集货运输优化:数学建模步骤,Python实现蚁群算法(解决最短路径问题), 蚁群算法解决旅行商问题(最优路径问题),节约里程算法

    目录 数学建模步骤 Python实现蚁群算法(解决最短路径问题)  蚁群算法解决旅行商问题(最优路径问题)

    2024年02月09日
    浏览(36)
  • 【数学建模】智能算法

    智能算法,也称现代优化算法 材料统计力学观点:材料中粒子的不同结构对应于粒子的不同能量水平 在高温条件下,粒子的能量较高,可以自由运动和重新排列。在低温条件下,粒子能量较低。如果从高温开始,非常缓慢地降温(这个过程被称为退火),粒子就可以在每个

    2024年01月24日
    浏览(28)
  • 数学建模:线性与非线性优化算法

    🔆 文章首发于我的个人博客:欢迎大佬们来逛逛 优化算法 是指在满足一定条件下,在众多方案中或者参数中最优方案,或者参数值,以使得某个或者多个功能指标达到最优,或使得系统的某些性能指标达到最大值或者最小值 优化的两个关键点: 1.明确优化的目标函数 2.明确优化

    2024年02月07日
    浏览(32)
  • 【数学建模竞赛】优化类赛题常用算法解析

    问题理解和建模:首先,需要深入理解问题,并将问题抽象为数学模型。这包括确定问题的目标函数、约束条件和决策变量。 模型分析和求解方法选择:对建立的数学模型进行分析,可以使用数学工具和方法,例如最优化算法、梯度下降法、遗传算法、模拟退火等。根据问题

    2024年02月09日
    浏览(33)
  • 模拟退火算法与遗传算法求解多目标优化问题的算法实现(数学建模)

    模拟退火算法是一种全局优化算法,解决的问题通常是找到一个最小化(或最大化)某个函数的全局最优解。它通过模拟物理退火的过程来搜索解空间,在开始时以一定的温度随机生成初始解,然后一步步降低温度,同时在当前解的周围随机搜索新的解,并根据一定概率接受

    2024年02月02日
    浏览(36)
  • Python 数学建模算法与应用(持续更新)

    目录 第一章  python使用入门 1.1 Python核心工具库 1. Numpy 2. SciPy 3. Matplotlib 4. IPython 5. SymPy 6. Pandas 1.2  Python基本数据类型 1. Numpy (1)强大的多维数组对象 (2)复杂的函数功能 (3)集成c/c++和FORTRAN代码的工具 (4)有用的线性代数、傅里叶变换和随机数功能等。 import numpy as

    2024年02月09日
    浏览(39)
  • 数学建模--PageRank算法的Python实现

       P a g e R a n k PageRank P a g e R ank 算法是现代数据科学中用于图链接分析的经典方法,最初由 L a r r y Larry L a rry P a g e Page P a g e 和 S e r g e y Sergey S er g ey B r i n Brin B r in 在1996年提出。两位斯坦福大学研究生认为互联网上的链接结构能够反映页面的重要性,与当时基于

    2024年01月23日
    浏览(27)
  • 数学建模--粒子群算法(PSO)的Python实现

    目录  1.开篇提示 2.算法流程简介 3.算法核心代码 4.算法效果展示 本题中需要处理的问题是:(设置搜索空间维度为20,范围为[-10,10])

    2024年02月10日
    浏览(24)
  • 数学建模--退火算法求解最值的Python实现

    目录 1.算法流程简介 2.算法核心代码 3.算法效果展示

    2024年02月09日
    浏览(26)
  • 【Python数学建模常用算法代码——蒙特卡洛模型】

    蒙特卡洛方法的理论支撑其实是概率论或统计学中的大数定律。基本原理简单描述是先大量模拟,然后计算一个事件发生的次数,再通过这个发生次数除以总模拟次数,得到想要的结果。下面我们以三个经典的小实验来学习下蒙特卡洛算法思想。 实验原理 在正方形内部有一

    2024年02月02日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包