1 / 6
文档名称:

算法实现.doc

格式:doc   大小:29KB   页数:6页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

算法实现.doc

上传人:mh900965 2018/2/14 文件大小:29 KB

下载得到文件列表

算法实现.doc

文档介绍

文档介绍:% task=xlsread('',1,'A1:H453690');
% worker=xlsread('',1,'A1:F14531');
task=load('');
worker=load('');
ltask=length(task);
lworker=length(worker);
% ltask=5;
% lworker=6;
w=1;%记录worker
t=1;%记录task
d=1;%记录工人工作的天数
day=1; %第一天
profit=0;
postpone=0;%延迟开工总日期
delay =0;%完成开工时,误工天数
%遍历任务
while 1
ess=1;
fprintf('第%d 天安排的任务\n',day);
worker(:,6)=worker(:,6)-1;%工人的工作天数自动减1
for i=1:1:ltask %安排工作
if task(i,8)==1 %该项任务已经分配完
continue; %跳出本层循环
end
%找人
for j=1:1:lworker
if ((task(i,3)==worker(j,2)&&worker(j,6)<=0)&&task(i,8)==0)
%找到人,工作没有安排,该人可以干活
%开始干活
worker(j,6)=floor(task(i,4)/worker(j,3))+1;%工人工作的天数
worker_task(w)=worker(j,1);
w=w+1;
worker_task(w)=task(i,2);
w=w+1;
worker_task(w)=worker(j,6);
w=w+1;
if worker(j,6)*worker(j,3)>task(i,4)
worker_task(w)=task(i,4);
w=w+1;
else
worker_task(w)=worker(j,6)*worker(j,3);
w=w+1;
end
profit=profit+task(i,5)-worker(j,6)*worker(j,4);%计算利润
if (task(i,6)-day+1<0)
postpone=postpone+abs(task(i,6)-day+1);%延迟开工的天数计算
%delay=delay+abs(task(i,6)-day+1);
end

for k=1:1:lworker %将worker相同的项标记为工作状态,这样该工人不会再从事其他工作
if worker(k,1)==worker(j,1)
worker(k,6)=worker(j,6);
end
end
if worker(j,6)>task(i,6) && task(i,6)>0
profit=profit-(task(i,5)-worker(j,6)*worker(j,4));%更新利润
%第i个人在规定时间内玩不成任务,继续安排人来完成
worker(j,6)=task(i,6);
profit=