我是靠谱客的博主 温婉豌豆,这篇文章主要介绍基于杂草优化算法的线性规划问题求解matlab程序,现在分享给大家,希望可以做个参考。

基于杂草优化算法的线性规划问题求解matlab程序

1 杂草算法简介
1.1 IWO定义
IWO是2006年由A. R. Mehrabian等提出的一种从自然界杂草进化原理演化而来的随机搜索算法,模仿杂草入侵的种子空间扩散、生长、繁殖和竞争性消亡的基本过程,具有很强的鲁棒性和自适应性。

IWO算法是一种高效的随机智能优化算法,以群体中优秀个体来指导种群的进化,以正态分布动态改变标准差的方式将由优秀个体产生的子代个体叠加在父代个体周围,再经过个体之间的竞争,得到最优个体。算法兼顾了群体的多样性和选择力度。
在这里插入图片描述
1.2 IWO搜索与性能
IWO相比其他的进化算法拥有更大的搜索空间和更好的性能。与GA相比,IWO算法简单,易于实现,不需要遗传操作算子,能简单有效地收敛问题的最优解,是一种强有力的智能优化工具。
1.3 IWO算法实现步骤
1.3.1 初始化种群
一定数据的杂草初始分布在搜索空间中,位置随机,个数根据实际情况调整;
1.3.2 子代繁殖
分布在整个搜索空间的父代,根据父代的适应值产生下一代种子,种子的个数由适应度值决定,适应值高的产生的种子多,低的个体产生种子数少。
1.3.3 空间扩散
子代个体按照一定规律分布在父代个体周围,分布位置规律满足正态分布(父代为轴线(均值),标准差随着代数不断变化)。
1.3.4 竞争淘汰
当一次繁殖的个体数超过种群数量的上限时,将子代和父代一起排序,适应值低的个体将被清除。
在这里插入图片描述

2 线性规划算例
2.1算例

在这里插入图片描述
2.2算例答案
在这里插入图片描述
3 杂草优化算法求解结果

1)迭代曲线
在这里插入图片描述
2)求解答案
在这里插入图片描述

4 matlab程序
1)主函数

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
%% 基于杂草算法的线性规划求解 clc; clear; close all; %% Problem Definition CostFunction = @(x) Sphere(x); % 目标函数 nVar = 3; % 决策变量数 VarSize = [1 nVar]; % 决策变量矩阵大小 VarMin = 0; % 决策变量下限 VarMax = 15; % 决策变量上限 %% IWO Parameters MaxIt = 500; % 最大迭代次数 nPop0 = 10; % 初始种群规模 nPop = 25; % 最大种群规模 Smin = 0; % 繁殖种子数下限 Smax = 5; % 繁殖种子数上限 Exponent = 3; % 方差缩减指数(非线性调和因子) sigma_initial = 0.5; % 标准差初值 sigma_final = 0.001; % 标准差终值 %% Initialization % 置空植物矩阵(包含位置和适应度值) empty_plant.Position = []; empty_plant.Cost = []; pop = repmat(empty_plant, nPop0, 1); % 初始种群矩阵 for i = 1:numel(pop) % 初始化位置 pop(i).Position = unifrnd(VarMin, VarMax, VarSize); % 初始化适应度值 pop(i).Cost = CostFunction(pop(i).Position); end % 初始化最优函数值历史记录 BestCosts = zeros(MaxIt, 1); %% IWO Main Loop for it = 1:MaxIt % 更新标准偏差 sigma = ((MaxIt - it)/(MaxIt - 1))^Exponent * (sigma_initial - sigma_final) + sigma_final; % 获得最佳和最差的目标值 Costs = [pop.Cost]; BestCost = min(Costs); WorstCost = max(Costs); % 初始化子代种群 newpop = []; % 繁殖 for i = 1:numel(pop) % 比例系数 ratio = (pop(i).Cost - WorstCost)/(BestCost - WorstCost); % 每个杂草产生的种子数 S = floor(Smin + (Smax - Smin)*ratio); for j = 1:S % 初始化子代 newsol = empty_plant; % 生成随机位置 % randn是一种产生标准正态分布的随机数或矩阵的函数 newsol.Position = pop(i).Position + sigma * randn(VarSize); % 边界(下限/上限)处理 newsol.Position = max(newsol.Position, VarMin); newsol.Position = min(newsol.Position, VarMax); % 子代的目标函数值 newsol.Cost = CostFunction(newsol.Position); % 添加子代 newpop = [newpop; newsol]; % #ok end end % 合并种群 pop = [pop; newpop]; % 种群排序 [~, SortOrder] = sort([pop.Cost]); pop = pop(SortOrder); % 竞争排除(删除额外成员) if numel(pop)>nPop pop = pop(1:nPop); end % 保存最佳种群 BestSol = pop(1); % 保存最优函数值历史记录 BestCosts(it) = BestSol.Cost; % 显示迭代信息 % disp(['Iteration ' num2str(it) ': Best Cost = ' num2str(BestCosts(it))]); end %% Results figure; % plot(BestCosts, 'LineWidth', 2); semilogy(BestCosts, 'r', 'LineWidth', 2); xlabel('Iteration'); ylabel('Best Cost'); grid on; %% 输出结果 disp(['最优变量 ' num2str(BestSol.Position) ': 最优目标值 = ' num2str(BestCosts(it))]); 。。。。。。。略

最后

以上就是温婉豌豆最近收集整理的关于基于杂草优化算法的线性规划问题求解matlab程序的全部内容,更多相关基于杂草优化算法内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(62)

评论列表共有 0 条评论

立即
投稿
返回
顶部