智能优化算法程序代码集锦
鲸鱼优化算法python代码

鲸鱼优化算法python代码鲸鱼优化算法是一种基于鲸鱼行为的进化优化算法,原理类似于粒子群算法和遗传算法。
该算法模拟了鲸鱼群体在海洋中捕食和游动的行为,通过模拟鲸鱼的迁移、交配和突变等过程,不断优化问题的解。
以下是鲸鱼优化算法的Python实现代码,供大家参考:```import numpy as npclass WOA:def __init__(self, obj_func, dim=30, search_range=(-100, 100), population=30, iterations=100):''':param obj_func: 优化目标函数:param dim: 变量维度:param search_range: 变量搜索范围:param population: 种群大小:param iterations: 迭代次数'''self.obj_func = obj_funcself.dim = dimself.search_range = search_rangeself.population = populationself.iterations = iterationsself.best_solution = Noneself.best_fitness = np.infdef optimize(self):# 初始化种群positions = np.random.uniform(low=self.search_range[0], high=self.search_range[1], size=(self.population, self.dim)) A, A_fitness = positions.copy(),np.apply_along_axis(self.obj_func, 1, positions)best_A = A[A_fitness.argmin()]self.best_solution, self.best_fitness = best_A,A_fitness.min()for t in range(self.iterations):# 更新A和A_fitnessa = 2 - 2 * t / self.iterationsr1 = np.random.rand(self.population, self.dim)r2 = np.random.rand(self.population, self.dim)A1 = 2 * a * r1 - aC1 = 2 * r2D = np.abs(C1 * A - positions)X1 = A1 * D + AX1 = np.clip(X1, self.search_range[0],self.search_range[1])X1_fitness = np.apply_along_axis(self.obj_func, 1, X1) mask = X1_fitness < A_fitnessA[mask], A_fitness[mask] = X1[mask], X1_fitness[mask] best_A = A[A_fitness.argmin()]self.best_solution, self.best_fitness = best_A,A_fitness.min()# 更新A2和A2_fitnessr = np.random.rand()A2 = A.copy()A2_fitness = A_fitness.copy()idx = np.argsort(A_fitness)if r < 0.5:# 螺旋式更新A2[idx[-1]] = best_A + np.random.normal(scale=0.001, size=self.dim)A2_fitness[-1] = self.obj_func(A2[idx[-1]])else:# 弥散式更新for i in range(self.population):distance = np.sqrt(np.sum((A[idx[-1]] - A[i]) ** 2)) A2[i] = (A[i] + best_A) / 2 + np.exp(-distance) * np.random.normal(scale=0.001, size=self.dim)A2_fitness[i] = self.obj_func(A2[i])best_A2 = A2[A2_fitness.argmin()]self.best_solution, self.best_fitness = best_A2,A2_fitness.min()# 更新A3和A3_fitnessr1 = np.random.rand()r2 = np.random.rand()A3 = A.copy()A3_fitness = A_fitness.copy()for i in range(self.population):A3[i] = best_A - r1 * np.abs(r2 * best_A - A[i])A3_fitness[i] = self.obj_func(A3[i])best_A3 = A3[A3_fitness.argmin()]self.best_solution, self.best_fitness = best_A3,A3_fitness.min()return self.best_solution, self.best_fitness```在使用该算法时,我们需要自己定义一个目标函数,例如:```def sphere(x):return np.sum(x ** 2)```然后调用该算法进行优化:```woa = WOA(sphere)best_solution, best_fitness = woa.optimize()```该算法还可以用于解决其他优化问题,只需要将自己的目标函数传入即可。
matlab优化算法100例

matlab优化算法100例1. 线性规划问题的优化算法:线性规划问题是一类目标函数和约束条件都是线性的优化问题。
Matlab中有很多优化算法可以解决线性规划问题,如单纯形法、内点法等。
下面以单纯形法为例介绍线性规划问题的优化算法。
单纯形法是一种迭代算法,通过不断改变基础解来寻找问题的最优解。
它的基本思想是从一个可行解出发,通过改变基本变量和非基本变量的取值来逐步逼近最优解。
2. 非线性规划问题的优化算法:非线性规划问题是一类目标函数和约束条件至少有一个是非线性的优化问题。
Matlab中有很多优化算法可以解决非线性规划问题,如拟牛顿法、共轭梯度法等。
下面以拟牛顿法为例介绍非线性规划问题的优化算法。
拟牛顿法是一种逐步逼近最优解的算法,通过近似目标函数的二阶导数信息来构造一个二次模型,然后通过求解该二次模型的最优解来更新当前解。
3. 全局优化问题的优化算法:全局优化问题是一类目标函数存在多个局部最优解的优化问题。
Matlab中有很多优化算法可以解决全局优化问题,如遗传算法、模拟退火算法等。
下面以遗传算法为例介绍全局优化问题的优化算法。
遗传算法是一种模拟生物进化过程的优化算法,通过基因编码、选择、交叉和变异等操作来不断迭代演化一组个体,最终找到全局最优解。
4. 多目标优化问题的优化算法:多目标优化问题是一类存在多个目标函数并且目标函数之间存在冲突的优化问题。
Matlab中有很多优化算法可以解决多目标优化问题,如多目标粒子群优化算法、多目标遗传算法等。
下面以多目标粒子群优化算法为例介绍多目标优化问题的优化算法。
多目标粒子群优化算法是一种基于粒子群优化算法的多目标优化算法,通过在粒子的速度更新过程中考虑多个目标函数来实现多目标优化。
5. 其他优化算法:除了上述提到的优化算法,Matlab还提供了很多其他的优化算法,如模拟退火算法、蚁群算法等。
这些算法可以根据具体的问题选择合适的算法进行求解。
综上所述,Matlab提供了丰富的优化算法,可以解决不同类型的优化问题。
鲸鱼优化算法python代码

鲸鱼优化算法python代码鲸鱼优化算法是一种新型的群体智能优化算法,其基于鲸鱼的生物行为特点,具有收敛速度快、全局搜索能力强等优点。
下面是鲸鱼优化算法的python代码实现。
1. 导入相关库import numpy as np2. 定义优化问题的目标函数def obj_func(x):return np.sum(x ** 2)3. 初始化鲸鱼种群和迭代次数pop_size = 20 # 种群大小max_iter = 100 # 迭代次数pop = np.random.uniform(-10, 10, (pop_size, 2)) # 初始化种群4. 定义鲸鱼的运动方式def whale_movement(pop, best, a, A):D = np.abs(best - pop) # 距离向量c = np.random.uniform(0, 2, pop.shape[0]) # 随机生成步长因子cl = np.random.uniform(-1, 1, pop.shape[0]) # 随机生成尾部跟随因子lp = np.random.uniform(0, 1, pop.shape[0]) # 随机生成随机激励因子p# 运动方程move1 = np.abs(A * np.exp(a * l) * np.cos(2 * np.pi * c) * D)move2 = np.abs(A * np.exp(a * l) * np.sin(2 * np.pi * c) * D)move3 = np.abs(A * np.exp(a * l) * p * best - pop)return pop + move1, pop + move2, move35. 实现鲸鱼优化算法best_fit = np.inffor i in range(max_iter):# 计算适应度值fit = obj_func(pop)for j in range(pop_size):# 更新最优解if fit[j] < best_fit:best = pop[j]best_fit = fit[j]# 鲸鱼运动pop1, pop2, pop3 = whale_movement(pop, best, 1, 1)# 更新种群pop = np.vstack((pop1, pop2, pop3))6. 输出最优解print('最优解为:', best)print('最优解的适应度值为:', best_fit)以上就是鲸鱼优化算法的python代码实现,使用该算法可以更快速地找到全局最优解。
30个智能算法matlab代码

30个智能算法matlab代码以下是30个使用MATLAB编写的智能算法的示例代码: 1. 线性回归算法:matlab.x = [1, 2, 3, 4, 5];y = [2, 4, 6, 8, 10];coefficients = polyfit(x, y, 1);predicted_y = polyval(coefficients, x);2. 逻辑回归算法:matlab.x = [1, 2, 3, 4, 5];y = [0, 0, 1, 1, 1];model = fitglm(x, y, 'Distribution', 'binomial'); predicted_y = predict(model, x);3. 支持向量机算法:matlab.x = [1, 2, 3, 4, 5; 1, 2, 2, 3, 3];y = [1, 1, -1, -1, -1];model = fitcsvm(x', y');predicted_y = predict(model, x');4. 决策树算法:matlab.x = [1, 2, 3, 4, 5; 1, 2, 2, 3, 3]; y = [0, 0, 1, 1, 1];model = fitctree(x', y');predicted_y = predict(model, x');5. 随机森林算法:matlab.x = [1, 2, 3, 4, 5; 1, 2, 2, 3, 3]; y = [0, 0, 1, 1, 1];model = TreeBagger(50, x', y');predicted_y = predict(model, x');6. K均值聚类算法:matlab.x = [1, 2, 3, 10, 11, 12]; y = [1, 2, 3, 10, 11, 12]; data = [x', y'];idx = kmeans(data, 2);7. DBSCAN聚类算法:matlab.x = [1, 2, 3, 10, 11, 12]; y = [1, 2, 3, 10, 11, 12]; data = [x', y'];epsilon = 2;minPts = 2;[idx, corePoints] = dbscan(data, epsilon, minPts);8. 神经网络算法:matlab.x = [1, 2, 3, 4, 5];y = [0, 0, 1, 1, 1];net = feedforwardnet(10);net = train(net, x', y');predicted_y = net(x');9. 遗传算法:matlab.fitnessFunction = @(x) x^2 4x + 4;nvars = 1;lb = 0;ub = 5;options = gaoptimset('PlotFcns', @gaplotbestf);[x, fval] = ga(fitnessFunction, nvars, [], [], [], [], lb, ub, [], options);10. 粒子群优化算法:matlab.fitnessFunction = @(x) x^2 4x + 4;nvars = 1;lb = 0;ub = 5;options = optimoptions('particleswarm', 'PlotFcn',@pswplotbestf);[x, fval] = particleswarm(fitnessFunction, nvars, lb, ub, options);11. 蚁群算法:matlab.distanceMatrix = [0, 2, 3; 2, 0, 4; 3, 4, 0];pheromoneMatrix = ones(3, 3);alpha = 1;beta = 1;iterations = 10;bestPath = antColonyOptimization(distanceMatrix, pheromoneMatrix, alpha, beta, iterations);12. 粒子群-蚁群混合算法:matlab.distanceMatrix = [0, 2, 3; 2, 0, 4; 3, 4, 0];pheromoneMatrix = ones(3, 3);alpha = 1;beta = 1;iterations = 10;bestPath = particleAntHybrid(distanceMatrix, pheromoneMatrix, alpha, beta, iterations);13. 遗传算法-粒子群混合算法:matlab.fitnessFunction = @(x) x^2 4x + 4;nvars = 1;lb = 0;ub = 5;gaOptions = gaoptimset('PlotFcns', @gaplotbestf);psOptions = optimoptions('particleswarm', 'PlotFcn',@pswplotbestf);[x, fval] = gaParticleHybrid(fitnessFunction, nvars, lb, ub, gaOptions, psOptions);14. K近邻算法:matlab.x = [1, 2, 3, 4, 5; 1, 2, 2, 3, 3]; y = [0, 0, 1, 1, 1];model = fitcknn(x', y');predicted_y = predict(model, x');15. 朴素贝叶斯算法:matlab.x = [1, 2, 3, 4, 5; 1, 2, 2, 3, 3]; y = [0, 0, 1, 1, 1];model = fitcnb(x', y');predicted_y = predict(model, x');16. AdaBoost算法:matlab.x = [1, 2, 3, 4, 5; 1, 2, 2, 3, 3];y = [0, 0, 1, 1, 1];model = fitensemble(x', y', 'AdaBoostM1', 100, 'Tree'); predicted_y = predict(model, x');17. 高斯混合模型算法:matlab.x = [1, 2, 3, 4, 5]';y = [0, 0, 1, 1, 1]';data = [x, y];model = fitgmdist(data, 2);idx = cluster(model, data);18. 主成分分析算法:matlab.x = [1, 2, 3, 4, 5; 1, 2, 2, 3, 3]; coefficients = pca(x');transformed_x = x' coefficients;19. 独立成分分析算法:matlab.x = [1, 2, 3, 4, 5; 1, 2, 2, 3, 3]; coefficients = fastica(x');transformed_x = x' coefficients;20. 模糊C均值聚类算法:matlab.x = [1, 2, 3, 4, 5; 1, 2, 2, 3, 3]; options = [2, 100, 1e-5, 0];[centers, U] = fcm(x', 2, options);21. 遗传规划算法:matlab.fitnessFunction = @(x) x^2 4x + 4; nvars = 1;lb = 0;ub = 5;options = optimoptions('ga', 'PlotFcn', @gaplotbestf);[x, fval] = ga(fitnessFunction, nvars, [], [], [], [], lb, ub, [], options);22. 线性规划算法:matlab.f = [-5; -4];A = [1, 2; 3, 1];b = [8; 6];lb = [0; 0];ub = [];[x, fval] = linprog(f, A, b, [], [], lb, ub);23. 整数规划算法:matlab.f = [-5; -4];A = [1, 2; 3, 1];b = [8; 6];intcon = [1, 2];[x, fval] = intlinprog(f, intcon, A, b);24. 图像分割算法:matlab.image = imread('image.jpg');grayImage = rgb2gray(image);binaryImage = imbinarize(grayImage);segmented = medfilt2(binaryImage);25. 文本分类算法:matlab.documents = ["This is a document.", "Another document.", "Yet another document."];labels = categorical(["Class 1", "Class 2", "Class 1"]);model = trainTextClassifier(documents, labels);newDocuments = ["A new document.", "Another new document."];predictedLabels = classifyText(model, newDocuments);26. 图像识别算法:matlab.image = imread('image.jpg');features = extractFeatures(image);model = trainImageClassifier(features, labels);newImage = imread('new_image.jpg');newFeatures = extractFeatures(newImage);predictedLabel = classifyImage(model, newFeatures);27. 时间序列预测算法:matlab.data = [1, 2, 3, 4, 5];model = arima(2, 1, 1);model = estimate(model, data);forecastedData = forecast(model, 5);28. 关联规则挖掘算法:matlab.data = readtable('data.csv');rules = associationRules(data, 'Support', 0.1);29. 增强学习算法:matlab.environment = rlPredefinedEnv('Pendulum');agent = rlDDPGAgent(environment);train(agent);30. 马尔可夫决策过程算法:matlab.states = [1, 2, 3];actions = [1, 2];transitionMatrix = [0.8, 0.1, 0.1; 0.2, 0.6, 0.2; 0.3, 0.3, 0.4];rewardMatrix = [1, 0, -1; -1, 1, 0; 0, -1, 1];policy = mdpPolicyIteration(transitionMatrix, rewardMatrix);以上是30个使用MATLAB编写的智能算法的示例代码,每个算法都可以根据具体的问题和数据进行相应的调整和优化。
智能优化算法

智能优化算法一、引言1·1 背景在现代科学和工程领域中,需要通过优化问题来实现最佳解决方案。
传统的优化方法可能在复杂问题上受到限制,因此智能优化算法应运而生。
智能优化算法是通过模仿自然界的演化、群体行为等机制来解决优化问题的一类算法。
1·2 目的本文档的目的是介绍智能优化算法的基本原理、常见算法及其应用领域,并提供相关资源和附件,以便读者更好地理解和应用智能优化算法。
二、智能优化算法概述2·1 定义智能优化算法是一类通过模仿自然界中的智能行为来优化问题的方法。
这些算法通常采用种群的方式,并借鉴生物进化、群体智能等自然现象的启发式搜索策略。
2·2 常见算法●遗传算法(Genetic Algorithm,GA)●粒子群优化算法(Particle Swarm Optimization,PSO)●蚁群优化算法(Ant Colony Optimization,ACO)●人工鱼群算法(Artificial Fish Swarm Algorithm,AFSA)●差分进化算法(Differential Evolution,DE)●其他智能算法(如模拟退火算法、小生境算法等)三、智能优化算法原理3·1 种群表示与初始化智能优化算法的核心是维护一个种群,在种群中对问题进行搜索。
种群的表示方法根据具体问题而定,可以是二进制编码、浮点数编码等。
初始化种群时需要考虑种群的大小和个体的初始状态。
3·2 适应度函数适应度函数用于评估种群中个体的好坏程度。
根据具体问题,适应度函数可以是目标函数的值、误差值的大小等。
适应度函数告诉算法哪些个体是更好的选择。
3·3 选择操作选择操作用于根据适应度函数的值,选择出适应度较高的个体。
常见的选择操作有轮盘赌选择、竞争选择等。
3·4 变异操作变异操作是为了增加种群中的多样性,防止陷入局部最优解。
变异操作会对种群中的个体进行随机的改变,从而产生新的个体。
dbo优化算法 python代码

dbo优化算法 python代码优化算法是指对现有算法进行改进,以提高其效率、优化其性能或减小资源消耗的过程。
在优化算法的过程中,我们可以尝试以下几个方面的优化方法。
1.数据结构优化数据结构是算法的基础,合适的数据结构能够大大提高算法的效率。
我们可以通过选择合适的数据结构或改进现有的数据结构来优化算法。
例如,如果我们需要频繁地对一个列表进行插入和删除操作,使用链表数据结构可能比使用数组数据结构更高效。
链表的插入和删除操作只需要O(1)的时间复杂度,而数组的插入和删除操作需要O(n)的时间复杂度。
另外,当需要快速查找、插入和删除元素时,可以使用哈希表来优化。
哈希表的查找、插入和删除操作都只需要O(1)的时间复杂度。
2.迭代次数优化在某些情况下,我们可以通过减少迭代次数来优化算法。
例如,一些排序算法的时间复杂度可以通过减少比较次数来优化。
在排序算法中,交换操作的时间复杂度远高于比较操作的时间复杂度。
因此,我们可以通过减少交换操作的次数来优化排序算法。
另外,有些算法可以通过早停来减少迭代次数。
例如,在搜索算法中,如果找到了目标结果,就可以提前结束搜索,而不需要继续迭代。
3.空间复杂度优化除了时间复杂度,我们还需要考虑算法的空间复杂度。
有时候,我们可以通过减少空间复杂度来优化算法。
例如,在动态规划算法中,可以使用滚动数组来减少空间复杂度。
滚动数组是一种优化方法,可以将二维数组优化为一维数组,从而减少空间占用。
此外,对于一些问题,可以使用位运算来优化空间复杂度。
位运算可以将多个值存储在一个整数中,从而减少空间占用。
4.并行计算优化在现代计算机系统中,多核处理器已经很常见。
为了充分利用多核处理器的优势,我们可以将算法分解为多个独立的任务,并行地执行。
例如,对于大规模的数据集进行排序时,可以将数据集分成多个子集,然后分别对子集进行排序,并最后合并子集的排序结果。
另外,对于某些计算密集型的算法,可以利用多线程或并发编程来提高性能。
智能优化算法

智能优化算法目录
1. 引言
1.1 背景介绍
1.2 目的
1.3 范围
1.4 参考资料
2. 智能优化算法概述
2.1 定义
2.2 优化问题的分类
2.3 优化算法的发展历史
2.4 相关概念解释
3. 传统优化算法
3.1 穷举法
3.2 贪婪算法
3.3 遗传算法
3.4 粒子群算法
3.5 其他常用算法
4. 智能优化算法的基本原理 4.1 可行性与目标函数
4.2 算法流程
4.3 算法参数调优
4.4 性能评估
5. 智能优化算法应用案例 5.1 生产调度优化
5.2 机器学习模型优化
5.3 资源分配问题
5.4 网络优化问题
5.5 其他领域应用
6. 智能优化算法的挑战与展望 6.1 计算复杂性问题
6.2 高纬度优化问题
6.3 多目标优化
6.4 算法融合与混合优化
6.5 未来发展趋势
7. 附件
7.1 算法示例代码
7.2 数据集样本
法律名词及注释:
1. 版权:指作者对其原创作品享有的独立经济权利和精神权利。
2.专利:指国家依法给予的发明者或者设计人对其发明或者设
计在指定年限内专有的权利。
3. 商标:指供认为他人商品或者服务的标志和名称。
4.著作权:指对作品作为一种实体负有的权利,即作者对其作
品所享有的权益。
5.知识产权:指创造者在智力领域所创造的财产或权益。
本文档涉及附件:
1. 算法示例代码:附件中提供了实现智能优化算法的示例代码,供参考使用。
2. 数据集样本:附件中包含了一些用于测试智能优化算法的数
据集样本。
多目标优化python代码

多目标优化python代码多目标优化(multi-objective optimization)是一个在优化问题中存在多个目标函数的情况下,同时优化多个目标的方法。
在Python中,我们可以利用各种优化算法和工具来实现多目标优化。
多目标优化在实际问题中非常常见,例如在供应链管理中,我们可能需要同时考虑成本最小化和服务水平最大化;在工程设计中,我们可能需要同时优化性能和可靠性等。
传统的单目标优化方法往往只能找到单个最优解,无法同时考虑多个目标。
而多目标优化则能够为决策者提供一系列不同的解决方案,形成一个解集(Pareto set),其中每个解都是在某种意义上是最优的。
在Python中,有几个常用的库和工具可以用于多目标优化。
下面将介绍其中的几个。
1. PyGMO:PyGMO是一个基于Python的开源优化库,它提供了多种多目标优化算法,如NSGA-II、MOEA/D等。
PyGMO的优势在于其丰富的算法库和灵活的接口,可以方便地在多种问题上进行实验。
2. DEAP:DEAP也是一个Python的开源优化库,它提供了多种遗传算法和进化策略的实现。
DEAP的特点是简单易用,适合初学者使用。
3. Platypus:Platypus是一个Python的多目标优化库,它提供了多种多目标优化算法的实现,如NSGA-II、SPEA2等。
Platypus的特点是速度快、易用性好,适合处理中小规模问题。
4. Scipy.optimize:Scipy是一个Python的科学计算库,其中的optimize模块提供了一些基本的优化算法,如COBYLA、SLSQP等。
虽然Scipy.optimize主要用于单目标优化,但也可以通过一些技巧来实现多目标优化。
在使用这些工具进行多目标优化时,我们需要定义适应度函数(fitness function),也就是衡量解决方案好坏的指标。
对于多目标优化问题,适应度函数通常是一个向量,其中每个维度对应一个目标函数。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
人工蚂蚁算法%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%function [x,y, minvalue] = AA(func)% Example [x, y,minvalue] = AA('Foxhole')clc;tic;subplot(2,2,1); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% plot 1 draw(func);title([func, ' Function']);%初始化各参数Ant=100;%蚂蚁规模ECHO=200;%迭代次数step=0.01*rand(1);%局部搜索时的步长temp=[0,0];%各子区间长度start1=-100;end1=100;start2=-100;end2=100;Len1=(end1-start1)/Ant;Len2=(end2-start2)/Ant;%P = 0.2;%初始化蚂蚁位置for i=1:AntX(i,1)=(start1+(end1-start1)*rand(1));X(i,2)=(start2+(end2-start2)*rand(1));%func=AA_Foxhole_Func(X(i,1),X(i,2));val=feval(func,[X(i,1),X(i,2)]);T0(i)=exp(-val);%初始信息素,随函数值大,信息素浓度小,反之亦然 %%%%%***************************************** ****************************end;%至此初始化完成for Echo=1:ECHO %开始寻优%P0函数定义,P0为全局转移选择因子a1=0.9;b1=(1/ECHO)*2*log(1/2);f1=a1*exp(b1*Echo);a2=0.225;b2=(1/ECHO)*2*log(2);f2=a2*exp(b2*Echo);if Echo<=(ECHO/2)P0=f1;elseP0=f2;end;%P函数定义,P为信息素蒸发系数a3=0.1; b3=(1/ECHO).*log(9);P=a3*exp(b3*Echo);lamda=0.10+(0.14-0.1)*rand(1);%全局转移步长参数Wmax=1.0+(1.4-1.0)*rand(1);%步长更新参数上限Wmin=0.2+(0.8-0.2)*rand(1);%步长更新参数下限%寻找初始最优值T_Best=T0(1);for j=1:Antif T0(j)>=T_BestT_Best=T0(j);BestIndex=j;end;end;W=Wmax-(Wmax-Wmin)*(Echo/ECHO); %局部搜索步长更新参数for j_g=1:Ant %全局转移概率求取,当该蚂蚁随在位置不是bestindex时if j_g~=BestIndexr=T0(BestIndex)-T0(j_g);Prob(j_g)=exp(r)/exp(T0(BestIndex));else%当j_g=BestIndex的时候进行局部搜索if rand(1)<0.5temp(1,1)=X(BestIndex,1)+W*step; temp(1,2)=X(BestIndex,2)+W*step;elsetemp(1,1)=X(BestIndex,1)-W*step; temp(1,2)=X(BestIndex,2)-W*step;end;Prob(j_g)=0;%bestindex的蚂蚁不进行全局转移end;X1_T=temp(1,1);X2_T=temp(1,2);X1_B=X(BestIndex,1);X2_B=X(BestIndex,2);%func1 =AA_Foxhole_Func(X1_T,X2_T); %%%%%%%%%%%********* ******************************************%F1_T=func1;F1_T=feval(func,[X(i,1),X(i,2)]);F1_B=feval(func,[X1_B,X2_B]);%F1_T=(X1_T-1).^2+(X2_T-2.2).^2+1;%func2 =AA_Foxhole_Func(X1_B,X2_B); %%%%%%%%%%%%%******** *******************************************%F1_B=func2;%F1_B=(X1_B-1).^2+(X2_B-2.2).^2+1;if exp(-F1_T)>exp(-F1_B)X(BestIndex,1)=temp(1,1);X(BestIndex,2)=temp(1,2);end;end;for j_g_tr=1:Antif Prob(j_g_tr)<P0X(j_g_tr,1)=X(j_g_tr,1)+lamda*(X(BestIndex,1)-X(j_g_tr,1));%Xi=Xi+lamda*(Xbest-Xi)21X(j_g_tr,2)=X(j_g_tr,2)+lamda*(X(BestIndex,2)-X(j_g_tr,2));%Xi=Xi+lamda*(Xbest-Xi)X(j_g_tr,1)=bound(X(j_g_tr,1),start1,end1);X(j_g_tr,2)=bound(X(j_g_tr,2),start2,end2);elseX(j_g_tr,1)=X(j_g_tr,1)+((-1)+2*rand(1))*Len1;%Xi=Xi+rand(-1,1)*Len1X(j_g_tr,2)=X(j_g_tr,2)+((-1)+2*rand(1))*Len2;%Xi=Xi+rand(-1,1)*Len2X(j_g_tr,1)=bound(X(j_g_tr,1),start1,end1);X(j_g_tr,2)=bound(X(j_g_tr,2),start2,end2);end;end;%信息素更新subplot(2,2,2); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% Plot 1bar([X(BestIndex,1) X(BestIndex,2)],0.25);%colormap (cool);axis([0 3 -40 40 ]) ;title ({date;['Iteration ',num2str(Echo)]});xlabel(['Min_x = ',num2str(X(BestIndex,1)),' ', 'Min_y = ', num2str(X(BestIndex,2))]);for t_t=1:Ant%func=AA_Foxhole_Func(X(t_t,1),X(t_t,2)); val1=feval(func,[X(t_t,1),X(t_t,2)]);T0(t_t)=(1-P)*T0(t_t)+(exp(-val1)); %**************************************** *********************************end;[c_iter,i_iter]=max(T0); %求取每代全局最优解 minpoint_iter=[X(i_iter,1),X(i_iter,2)];%func3 =AA_Foxhole_Func(X(i_iter,1),X(i_iter,2)); %%%%%%% %%*********************************************** ****************************val2=feval(func,[X(i_iter,1),X(i_iter,2)]); minvalue_iter= val2;%minvalue_iter=(X(i_iter,1)-1).^2+(X(i_iter,2)-2.2).^2+1;min_local(Echo)=minvalue_iter;%保存每代局部最优解subplot(2,2,3);%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%% Plot 2plot(X(BestIndex,1),X(BestIndex,2),'rs','MarkerFa ceColor','r', 'MarkerSize',8), grid on;title (['Global Min Value = ',num2str(minvalue_iter)]);hold on;plot(X(:,1),X(:,2),'g.'), pause (0.02); hold off ;axis([-100 100 -100 100]);grid on;%将每代全局最优解存到min_global矩阵中if Echo >= 2if min_local(Echo)<min_global(Echo-1)min_global(Echo)=min_local(Echo);elsemin_global(Echo)=min_global(Echo-1);end;elsemin_global(Echo)=minvalue_iter;end;subplot(2,2,4);%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Plot 3min_global=min_global';index(:,1)=1:ECHO;plot(Echo, min_global(Echo),'y*')%axis([0 ECHO 0 10]);hold on;title ([func,' (X) = ',num2str(minvalue_iter)],'Color','r');xlabel('iteration');ylabel('f(x)');grid on;end;%ECHO循环结束[c_max,i_max]=max(T0);minpoint=[X(i_max,1),X(i_max,2)];%func3 =AA_Foxhole_Func(X(i_max,1),X(i_max,2)); %%%****** ************************************************* ******************%minvalue = func3;minvalue=feval(func,[X(i_max,1),X(i_max,2)]);x=X(BestIndex,1);y=X(BestIndex,2);runtime=toc21人工免疫算法function [x,y,fx,vfx,vmfit,P,vpm] =AI(func,gen,n,pm,per);% Example [x,y,fx] = AI('Foxhole')subplot(2,2,1);draw(func);title( [func, ' Function']);if nargin == 1,% gen = 200; n = round(size(P,1)/2); pm =0.0005; per = 0.0; fat = 10;%gen = 250; n = size(P,1); pm = 0.01; per = 0.0; fat = .1;P = cadeia(200,44,0,0,0);gen = 40; n = size(P,1); pm = 0.2; per = 0.0; fat = 0.1;end;while n <= 0,n = input('n has to be at least one. Type a new value for n: ');end;xmin=-100;xmax=100;ymin=-100;ymax=100;x = decode(P(:,1:22),xmin,xmax); y =decode(P(:,23:end),ymin,ymax);%fit = eval(f);%fit=AI_Foxhole_Func(x,y);%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%fit=feval(func,[x' y']);%imprime(1,vxp,vyp,vzp,x,y,fit,1,1);% Hypermutation controlling parameterspma = pm; itpm = gen; pmr = 0.8;% General defintionsvpm = []; vfx = []; vmfit = []; valfx = 1; [N,L] = size(P); it = 0; PRINT = 1;% Generationswhile it <= gen & valfx <= 100,x = decode(P(:,1:22),xmin,xmax); y =decode(P(:,23:end),ymin,ymax); T = []; cs = [];%fit = eval(f);%fit=AI_Foxhole_Func(x,y);%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%fit=feval(func,[x' y']);[a,ind] = sort(fit);valx = x(ind(end-n+1:end)); valy = y(ind(end-n+1:end));fx = a(end-n+1:end); % n best individuals (maximization)% Reproduction [T,pcs] = reprod(n,fat,N,ind,P,T);% HypermutationM = rand(size(T,1),L) <= pm;T = T - 2 .* (T.*M) + M;T(pcs,:) = P(fliplr(ind(end-n+1:end)),:);% New Re-Selection (Multi-peak solution)x = decode(T(:,1:22),xmin,xmax); y =decode(T(:,23:end),ymin,ymax);%fit=AI_Foxhole_Func(x,y);%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%fit=feval(func,[x' y']);%fit = eval(f);pcs = [0 pcs];for i=1:n,[out(i),bcs(i)] =min(fit(pcs(i)+1:pcs(i+1))); % Mimimazion problem %%%*************************bcs(i) = bcs(i) + pcs(i);end;P(fliplr(ind(end-n+1:end)),:) = T(bcs,:);% Editing (Repertoire shift)nedit = round(per*N); it = it + 1;P(ind(1:nedit),:) = cadeia(nedit,L,0,0,0);pm = pmcont(pm,pma,pmr,it,itpm); valfx =min(fx); %*************************************** **********************vpm = [vpm pm]; vfx = [vfx valfx]; vmfit = [vmfit mean(fit)];disp(sprintf('It.: %d pm: %.4f x: %2.2fy: %2.2f Av.: %2.2ff(x,y): %2.3f',it,pm,valx(1),valy(1),vmfit(1),val fx));subplot(2,2,2); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Plot 1bar([valx(1) valy(1)],0.25);axis([0 3 -40 40 ]) ;title (['Iteration ', num2str(it)]); pause (0.1);subplot(2,2,3); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Plot 2plot(valx(1),valy(1),'rs','MarkerFaceColor','r', 'MarkerSize',8)hold on;%plot(x(:,1),x(:,2),'k.');set(gca,'Color','g')hold off;grid on;axis([-100 100 -100 100 ]) ;21title(['Global Min =',num2str(valfx)]);xlabel(['Min_x= ',num2str(valx(1)),'Min_y= ',num2str(valy(1))]);subplot(2,2,4); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Plot 3 plot(it,valfx ,'k.')axis([0 gen 0 10]);hold on;title ([func ,'(X) = ', num2str(valfx)]);xlabel('iteration');ylabel('f(x)');grid on;end; % end while%imprime(PRINT,vxp,vyp,vzp,x,y,fit,it,1);x = valx(1); y = valy(1); fx =min(fx); %***********************************************************************% x = P(ind(end),1:22); y = P(ind(end),23:44); fx= max(fx);%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%% Plot 4% --------------------- %% INTERNAL SUBFUNCTIONS% --------------------- %% Printfunction [] =imprime(PRINT,vx,vy,vz,x,y,fx,it,mit);% x,fx -> actual values% vxplot, vplot -> original (base) functionif PRINT == 1,if rem(it,mit) == 0,mesh(vx,vy,vz); hold on; axis([-100 100 -100 100 0 500]);xlabel('x'); ylabel('y'); zlabel('f(x,y)');plot3(x,y,fx,'k*'); drawnow; hold off;end;end;% Reproductionfunction [T,pcs] = reprod(n,fat,N,ind,P,T);% n -> number of clones% fat -> multiplying factor% ind -> best individuals% T -> temporary population% pcs -> final position of each cloneif n == 1,cs = N;T = ones(N,1) * P(ind(1),:);else,for i=1:n,% cs(i) = round(fat*N/i);cs(i) = round(fat*N); pcs(i) = sum(cs);T = [T; ones(cs(i),1) * P(ind(end-i+1),:)];end;end;% Control of pmfunction [pm] = pmcont(pm,pma,pmr,it,itpm);% pma -> initial value% pmr -> control rate% itpm -> iterations for restoringif rem(it,itpm) == 0,pm = pm * pmr;if rem(it,10*itpm) == 0,pm = pma;end;end;% Decodify bitstringsfunction x = decode(v,min,max);% x -> real value (precision: 6)% v -> binary string (length: 22)v = fliplr(v); s = size(v);aux = 0:1:21; aux = ones(s(1),1)*aux;x1 = sum((v.*2.^aux)');x = min + (max-min)*x1 ./ 4194303;function [ab,ag] = cadeia(n1,s1,n2,s2,bip)%default parameter value seetingif nargin == 2,n2 = n1; s2 = s1; bip = 1;elseif nargin == 4,bip = 1;end;% Antibody (Ab) chainsab = 2 .* rand(n1,s1) - 1;%create n1 row s1 column array, its value range is between -1 or 1if bip == 1,ab = hardlims(ab);else,ab = hardlim(ab);end;% Antigen (Ag) chainsag = 2 .* rand(n2,s2) - 1;if bip == 1,ag = hardlims(ag);else,ag = hardlim(ag);end;% End Function CADEIA21%------免疫粒子群优化算法(Artificial Immune - Particle Swarm Optimization)function [x,y,Result]=PSO_AI(func)% Example [x, y,minvalue] = PSO_AI('Foxhole') clc;subplot(2,2,1); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% plot 1 draw(func);title([func, ' Function']);ticformat long;%------给定初始化条件----------------------------------------------c1=1.4962; %学习因子1c2=1.4962; %学习因子2w=0.7298; %惯性权重MaxDT=200; %最大迭代次数D=2; %搜索空间维数(未知数个数)N=100; %初始化群体个体数目eps=10^(-20); %设置精度(在已知最小值时候用)DS=10; %每隔DS次循环就检查最优个体是否变优replaceP=0.6; %粒子的概率大于replaceP将被免疫替换minD=1e-015; %粒子间的最小距离Psum=0; %个体最佳的和range=100;count = 0;%------初始化种群的个体------------for i=1:Nfor j=1:Dx(i,j)=-range+2*range*rand; %随机初始化位置v(i,j)=randn; %随机初始化速度endend%------先计算各个粒子的适应度,并初始化Pi和Pg----------------------for i=1:N%p(i)=Foxhole(x(i,:),D); %fitness是计算各个粒子适应度的函数,见文件fitness.m %%%%%%%%****************************** ***********************p(i)=feval(func,x(i,:));y(i,:)=x(i,:);endpg=x(1,:); %Pg为全局最优for i=2:Niffeval(func,x(i,:))<feval(func,pg) %%%%******** ************************************************* ************************************* pg=x(i,:);endend%------进入主要循环,按照公式依次迭代,直到满足精度要求------------for t=1:MaxDTfor i=1:Nv(i,:)=w*v(i,:)+c1*rand*(y(i,:)-x(i,:))+c2*rand*(pg-x(i,:));x(i,:)=x(i,:)+v(i,:);iffeval(func,x(i,:))<p(i) %%%%%%%%%%%%%%*********** ************************************************* **********************************p(i)=feval(func,x(i,:)); %%%%%%%%%%%%%%%******** ************************************************* *****************************y(i,:)=x(i,:);endifp(i)<feval(func,pg) %%%%%%%%%%%%%%%%%%%%******** ************************************************* *********************************pg=y(i,:);subplot(2,2,2); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Plot 1bar(pg,0.25);axis([0 3 -40 40 ]) ;title (['Iteration ', num2str(t)]); pause (0.1);subplot(2,2,3); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Plot 2plot(pg(1,1),pg(1,2),'rs','MarkerFaceColor','r', 'MarkerSize',8)hold on;plot(x(:,1),x(:,2),'k.');set(gca,'Color','g')hold off;grid on;axis([-100 100 -100 100 ]) ;title(['Global Min =',num2str(p(i))]);xlabel(['Min_x= ',num2str(pg(1,1)),' Min_y= ',num2str(pg(1,2))]);endendPbest(t)=feval(func,pg) ; %%%%%%%%************* ************************************************* **********************************************21% if Foxhole(pg,D)<eps %如果结果满足精度要求则跳出循环% break;% end%-----------开始进行免疫----------------if t>DSif mod(t,DS)==0 && (Pbest(t-DS+1)-Pbest(t))<1e-020 %如果连续DS代数,群体中的最优没有明显变优,则进行免疫.%在函数测试的过程中发现,经过一定代数的更新,个体最优不完全相等,但变化非常非常小,%我认为这个时候也应用免疫了,所以我没有用“Pbest(t-DS+1)=Pbest(t)”作为判断条件,%不过“(Pbest(t-DS+1)-Pbest(t))<1e-020”是否合理也值得探讨。