首页 > 编程知识 正文

层次分析法指标权重计算公式,权重任务分配计算公式

时间:2023-05-06 02:02:07 阅读:174701 作者:578

现有的需求是以多个任务执行者执行一定数量的任务,且任务的分配按一定的权重比进行为前提的。 任务的分配是随机的,分配完成后,必须为每个任务标记执行者。 )分配算法并不难,但用java写相当巧妙。 我觉得很有趣,我记得。

算法设计:

1 )如果能将总任务数除以权重的话,每个人分配的数量就是总任务数/权重和*权重

2 )总任务数无法整除权重时,首先用整除后的数如1 )所示进行划分,将剩下的数优先分配给权重较小的执行者。

//总任务

List dataList=pm1.getDataList (;

int total=dataList.size (;

//待分配人员

list autolist=pm auto.get datalist (;

//总权重

int totalWight=0;

for(intI=0; I

executordtodto=autolist.get(I;

int weight=dto.getWeight (;

totalWight =weight;

}

//得到能被整除的最大数量

integer maxint=get maxint (total wight,total );

int rest=total - maxInt;

//要保存的结果集

List resultList=new ArrayList (;

for(intI=0; I

intassignnum=maxint/total wight * (autolist.get (I ).getWeight ) );

int count=0;

wile(countassignnum ) {

if(datalist.size) ) ) ) ) ) ) )。

Random random=new Random (;

//根据对话日志的总数产生随机数

intindex=random.nextint((int ) dataList.size ) );

taskDTODTO=datalist.get(index );

if (空!=dto () dto.setassignoperator (autolist.get (I ).getId ) );

resultlist.add(DTO;

出局;

datalist.remove (索引; //被分配的任务从被分配的任务数中排除

}

}else{

黑;

}

}

autoList.get(i(I ).getTask ) autoList.get(i(I ).getTask ) ) count; //更新每个任务执行者的任务数

}

system.out.println(datalist大小) dataList.size ),剩余为) rest );

if(datalist.size) ) ) ) ) ) ) )。

//权重从小到大剩余~

collections.sort(autolist,new Comparator ) )。

@Override

公共公司(executordtoo 1,

ExecutorDTO o2 ) {

return o1.getWeight ()- o2.getWeight );

}

);

listrestresultlist=this.assign rest (autolist,dataList );

result list.addall (rest result list;

}

其中,分配盈馀assignRest的方法如下:

权限列表任务列表(list autolist,List dataList ) {

List resultList=new ArrayList (;

映射图=new hashmap (;

出局:

for(intI=0; I

executordtodto=autolist.get(I;

int weight=dto.getWeight (;

Random random=new Random (;

for(intj=0; j

intindex=random.nextint((int ) dataList.size ) );

taskdtochatdto=datalist.get (index );

if (空!=chatDTO ) {

chatdto.setassignoperator (dto.getoperpk ) ); //被分配人的id

dto.settask(dto.gettask ) ) 1; //更新任务执行者包含的任务数

resultlist.add(chatdto;

datalist.remove (索引;

if(datalist.size ()==0) ) ) )。

自信的害羞

}

}

}

返回结果列表;

}

至此,完成了按权重分配的java算法之一。 感觉算法并不难,但写起来还是有点难啊。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。