指派问题基于matlab遗传算法求解指派优化问题含Matlab源码 2292期

Posted 海神之光

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了指派问题基于matlab遗传算法求解指派优化问题含Matlab源码 2292期相关的知识,希望对你有一定的参考价值。

⛄一、遗传算法求解指派优化问题简介

1 遗传算法
1.1 遗传算法简介

遗传算法是模拟生物在自然环境中的遗传和进化过程而形成的一种自适应全局优化概率搜索算法,它是一种多学科融合交叉的产物。遗传算法通过合理的编码机制和进化机制,广泛应用于近似最优化、生产调度、图形分割及自动控制等领域。

1.2 遗传算法基本步骤
(1)初始化。设置初始种群、最大迭代次数及迭代计数器。
(2)适应度评价。对当前种群计算其个体适应度。
(3)进化操作。主要是通过选择、交叉、变异、倒位等算子作用产生下一代群体。
(4)终止条件判断。如果已经求得最优解,则终止;否则重复以上两个步骤。

2 指派问题的遗传算法实现
2.1 指派问题模型描述

人们日常生活和工作中,经常会遇到这类问题:有n个任务需要n个人去完成,每个人完成每个任务的效率不尽相同,要求一个人只能完成其中一个任务,一个任务只能由一个人完成。要求合理分配之后,所达到的总体效率最好,这就是指派问题。

那么,根据优化模型理论,当目标为极大值时,指派问题的数学模型[3]如下:

其中,当指派第i个人去完成第j个任务时,xij=1;否则xij=0。cij表示第i个人去完成第j个任务的效率;约束条件(2)表示:第i个人只能完成一项任务;约束条件(3)表示:第j个任务只能由一个人完成。

2.2 指派问题的遗传算法设计
遗传算法设计是完成遗传运算的具体方法,涵盖了决策变量的基因型与表现型之间的编码和解码,个体适应度函数构造,遗传算子构建,控制参数设置等过程。

2.2.1 指派问题适应度函数
针对指派问题在求解目标函数为极大值时的情况和考虑指派问题可行解的非负性前提下,其个体适应度与目标函数值是成正比。因此,指派问题的适应度函数构建为如下所示:

其中,xij表示第i个人是否去做第j个任务。cij表示第i个人完成第j个任务的效率。

F越大,表示个体适应度越好,其可行解越好,能够以较大概率遗传到下一代。当F取值最大时,则表示已经达到最优解。

2.2.2 指派问题染色体编码
染色体[编码质量是影响遗传算法计算效率和准确度的重要因素。考虑到指派问题的特殊约束性质:即每人只能完成其中一个任务且每个任务只能由一人完成。针对决策变量xij的取值,其基因型编码不采取通常的0-1二进制编码,而采用常用的十进制编码。并且,每个基因块只有两个基因位,分别表示决策变量的行下标取值和列下标取值。当问题规模为n时,则指派问题决策变量染色体编码表示为:

在这种染色体编码十进制表示方式下,对于每个个体,其染色体的n个基因块在处理时按照如下规则进行:

(1)各代群体每个染色体中各基因块第一位分别赋予固定值:范围为0到n-1,即R11=0,R21=1,…Rn1=n-1。其目的是保证决策变量选取位于不同行。

(2)各代群体每个染色体中各基因块第二位分别赋予无重复随机值:范围为0到n-1,即R12、R22…Rn2每次取0到n-1的随机全排列值。目的是保证决策变量选取位于不同列。

通过这种方式进行指派问题染色体编码,可以只对基因块中第二位编码进行随机产生,提高了搜索效率。同时,由于是十进制编码,各个基因块的值组合可以直接定位于效率矩阵中的对应元素位置,加快运算效率。

2.2.3 指派问题遗传算子改进策略
一般情况下,遗传算法遗传过程和进化过程主要是通过选择、交叉、变异及倒位等遗传算子组合运算完成群体迭代。考虑指派问题组合优化的特殊性:即可行解必须位于不同行不同列,已在决策变量染色体编码中进行了约束限制,那么,在遗传进化过程中,无需再对种群群体进行变异操作和倒位操作。

因此,通过优化染色体编码,在遗传进化过程中仅通过选择和交叉策略实现种群迭代,有效地提高了运算效率,加快了最优解的获得。

⛄二、部分源代码

clc
clear all
n=input(‘请输入任务数’);
m=input(‘请输入工人数’);%可用人员数
maxgen=input(‘请输入最大代数’);
pop=10;%初始种群规模
pc=0.8;%发生交叉的概率
pm=0.8;%变异的概率
gen=0;
A=xiaolv(n,m);
C=chushi(pop,m);
pop1=jiaohuan(C,pop,m,pc);
popnew=bianyi2(pop1,pop,m,pm);
J1=zeros(2,maxgen);
J2=zeros(maxgen,m);
while gen<maxgen
gen=gen+1;
D=fitness(A,m,popnew);
[FY,JY]=xunyou(D,popnew);%找出最优解
J1(1,gen)=gen;
J1(2,gen)=JY;
J2(gen,:)=FY;
C=sel(pop,D,popnew);
pop1=jiaohuan(C,pop,m,pc);
popnew=bianyi2(pop1,pop,m,pm);
end
F=find(J1(2,:)==min(J1(2,:)));
fprintf(‘最小费用%d\\n’,min(J1(2,:)))
disp(‘指派方案’)
Z=J2(F(1)😅;
for i=1:m
if i<=n
fprintf(‘第%d个人完成第%d个任务\\n’,Z(1,i),i)
else
fprintf(‘第%d个人无任务\\n’,Z(1,i))
end
end
X=J1(1,:);
Y=J1(2,:);
scatter(X,Y,‘.b’)
xlabel(‘代数’)
ylabel(‘最小费用之和’)
title(‘指派问题收敛图’)

⛄三、运行结果


⛄四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1]齐安智.一种遗传算法求解指派问题的改进策略[J].价值工程. 2013,32(04)

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

以上是关于指派问题基于matlab遗传算法求解指派优化问题含Matlab源码 2292期的主要内容,如果未能解决你的问题,请参考以下文章

优化指派基于matlab粒子群算法求解指派优化问题(工作质量)含Matlab源码 2390期

基于匈牙利算法的指派问题优化分析matlab优化算法十二

优化求解基于matlab遗传算法求解道路流量优化问题含Matlab源码 1480期

优化求解基于matlab遗传算法求解道路流量优化问题含Matlab源码 1480期

优化求解基于matlab遗传算法求解列车交路方案优化问题含Matlab源码 1361期

优化求解基于matlab遗传算法求解列车交路方案优化问题含Matlab源码 1361期