1 简介
问题描述:
一个软件项目P,共分为m个任务。每一个任务需要多种技能,项目P总共需要的技能总数为s种。项目组合中共有n个可供调用的多技能研发人员。i,j,d分别表示员工、技能和任务(1⩽i⩽n, ,1⩽j<⩽s,1⩽d⩽m)。每一个任务需要多种技能,每一种技能由多个员工掌握,每一个员工具有多种效率异质的技能。假设人员的数量以及人员所掌握的技能水平不随时间变化而变化。模型中不考虑时滞及任务抢占的情况,确定人员安排方案使软件项目的研发周期和研发成本实现最优化。模型假设如下:
1)不考虑员工离职的情况,也就是保证在整个项目周期内人员的数量保持不变。
2)研发成本为参加所有项目员工的工资。
3)在工期的计算中,不考虑任务抢占,不考虑时滞。假设一个工序紧前工序的完成时间即为该工序的开始时间,之间没有时间间隔,不考虑工作转换时间和准备时间。
4)每个任务中途不能中断,即分配给一个任务的员工只能等该任务结束才能被分配到下一个任务。



2 部分代码
%% 解码global m Rjd salary Tjd_min%从文件读取数据[a,b,c]=xlsread('data.xlsx');Eij=zeros(40,8);for i=1:1:8str1=b{i,1};str2=b{i,2};tmp1=regexp(str1, ',', 'split');tmp2=regexp(str2, ',', 'split');for j=1:1:size(tmp1,2)x=str2num(tmp1{j});y=str2num(tmp2{j});Eij(x,i) = y;endend%计算TijdTijd = zeros(40,s,m);for i=1:1:40for j=1:1:sfor d=1:1:mTijd(i,j,d) = Tjd_min(j,d)/Eij(i,j);endendendx = [F1.Position];x=x(1:43);% 按照任务顺序分配任务,直到完成FTd = zeros(1,m); %任务完成时间STd = zeros(1,m); %任务的开始时间FTpd = zeros(1,m); %前序工作的完成时间Td = zeros(1,m); %任务d的工期total_salary = 0;next_time_work = zeros(1,40); %辅助变量%基本想法,每次分配完任务,更新Tijd表。index = 1;record = [];for i=1:1:m%看一下前序工作的完成时间if i==3STd(i) = FTd(2);endif i==5STd(i) = max(FTd(1),FTd(2));endif i==6STd(i) = max(FTd(1),FTd(4));endif i==7STd(i) = max(FTd(3),FTd(5));endif i==8STd(i) = FTd(3);endif i==9STd(i) = max(FTd(6),max(FTd(7),FTd(8)));endif i==10STd(i) = FTd(9);end%找到需要的技能skill = find(Rjd(:,i)==1);needtime = zeros(1,numel(skill));for j=1:1:numel(skill)%找到相关人员worker = x(index);total_salary = total_salary + salary(worker);needtime(j) = Tijd(worker,skill(j),i);%检查工人什么时候可以开工if STd(i) > next_time_work(worker) %任务开始时,工人处于空闲%buganshenmeelse %任务开始时,工人处于忙碌状态needtime(j) = needtime(j) + next_time_work(worker) - STd(i);endnext_time_work(worker) = STd(i) + needtime(j);record(index,:) = [worker i skill(j) STd(i) next_time_work(worker)];index = index+1;endTd(i) = max(needtime); %工期是最大的工人工作时间FTd(i) = STd(i) + Td(i);endfinal_date = max(FTd);z=[final_date;total_salary];
3 仿真结果

4 参考文献
[1]张欢欢, 李继庚, 洪蒙纳,等. 基于NSGA-Ⅱ算法的柔性流水车间优化调度模型的构建与应用[J]. 中国造纸学报, 2020, 35(4):6.
博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。
部分理论引用网络文献,若有侵权联系博主删除。









