朱明放1,2,叶飞跃1,2,丁小未2

(1.江苏理工学院云计算与智能信息处理常州市重点实验室,江苏常州,213001;

2.江苏理工学院计算机学院,江苏常州,213001)

摘要:任务指派问题是典型的组合优化问题,得到了广泛的研究。基于基因表达式编程的思想,设计了任务指派问题求解的算法,并用C#实现了该算法。结合人力资源任务分配的实例进行了实验分析和研究,获得了人员与岗位配置的最优解。实验表明算法设计是正确性和有效性,因而为企业人员安排提供参考依据。

关键词:TAP问题;基因表达式编程;逆串算子

中图分类号: TP301.6                          文献标识码: A

The Design and Implementation of Task Assigned ProblemBased on Gene Expression Programming

ZHU Ming-fang1,2, Ye Fei-yue1,2,PAN Yu1,2 , DING Xiao-wei2,

(1.     KeyLaboratory of Cloud Computing & Intelligent Information Processing ofChangzhou City, Jiangsu Teachers University of Technology, Changzhou, 213001,China;

(2.     2. School of Computer Engineering, Jiangsu Teachers Universityof Technology, Changzhou,213001,China)

Abstract:Task assignmentproblem (TAP) is one kind of classic combinatorial optimization problem whichhas been gained extensive research. Designed an algorithm of TAP based on geneexpression programming (GEP) and implemented it with C# will be presented this paper.At last the analysis and study of experiment is presented, which by a livingexample of people resource assignment. The results indicate this algorithm is correctnessand effectiveness, so provides a reference frame of TAP for some enterpriseunits.

Keyword:task assignment problem; geneexpression programming; inversion

1 引言

任务指派问题(Task Assignment Problem, TAP)是指这样一类问题:有若干资源和若干任务,如何科学合理的进行资源优化和配置,从而产生最大化的经济效益和社会效益或者说完成这些任务的成本量最小,即使得指派方案总体效果最佳。这类的问题有广泛的研究和应用背景,如一个单位有若干项工作需要分配给若干人(或部门)来完成;学校有若干班级需要安排在若干教室里上课等[1]

任务指派问题是典型的组合优化问题,是典型的NP问题之一,从而得到了广泛的关注和研究,有众多的研究方法解决这类问题,其中有匈牙利法[1]、蚁群算法[2]、模拟退火方法[3]、基于整数规划的方法[4]等。

基因表达式编程(Gene Expression Programming,GEP)是由葡萄牙科学家FerreiraC. 2001年提出来的一种新型遗传算法[5],其特点是将基因型和表现型分离,比传统的遗传编程(GeneticProgramming, GP)快2~4个数量级[5],因而得到了广泛的关注和研究,已经被广泛应用到数据挖掘的各个领域[6]

本文设计了基于GEP思想的TAP问题求解算法,并利用C#编程实现了该算法,同时,通过实例表明算法正确性和有效性。论文余下部分的组织结构如下:第二节阐述了GEP解决TAP问题时染色体结构和遗传操作;第三节说明了算法设计的整体思路;第四节结合实例,说明算法的运行效率;最后第五节是的结论和下一步工作。

2 基因表达式编程概要

2.1基因表达式编程算法流程

基因表达式编程(GEP)是将基因型和表现型分开的一种遗传算法,也就是在该算法中有2个实体:表达树和染色体,GEP进化中,遗传操作在固定长度的线性编码的染色体上进行,而个体评价是在染色体解码得到的表达树上进行,即操作和评价相分离。

GEP使用Karva语言对表达树和染色体进行互相编、解码。染色体由若干个基因组成,每个基因由头部和尾部组成,头部可以包含是函数符号和终结符号,尾部仅有终结符号。在GEP中,所有的遗传操作只要保证基因的合法结构,它就能解码为合法的程序[10]

GEP基本算法流程见图1所示。

正是GEP基因结构性和简单线性编码,使得GEP的遗传算子比较丰富,主要有:变异、逆串、插串、根插串、基因插串、单点重组、2点重组、基因重组等八大算子。其算法的具体技术细节详解文献[5]。

2.2 GEP多基因家族结构

对于任务指派问题求解,问题中有两类信息:资源和任务,每一类信息在GEP的基因表达式中用一个多基因(Multi-gene)结构表示,因此对该问题,使用二基因家族(Multi-geneFamilies)的染色体结构表示。例1是一个简单例子说明多基因家族问题。

例2有6个人员和6项任务,每个人完成不同的任务时工作成本不同,我们的问题是,每人安排一项任务,怎样安排使得完成整个任务的成本最小?

显然,该问题共有6!种按排方案,是典型的NP问题。我们对人员用数字1-6表示,任务用字母A-F表示。图2(a)中是GEP解决该问题时一个二基因家族染色体表示,即图2(b)表示的工作指派方案的信息表示。图2(b)表示该染色体解码对应的表达树,即图2(a)染色体的解码信息,表达了一种任务指派方案。

需要指出,染色体的编码是随机生成,只要保证染色体的合法结构,即串的前6位表示人员信息,后6位表示任务信息,且每种信息是一种排列即可,则每个染色体都能正确的表示一个合法程序,即正确的任务指派方案。

3 主要算法设计

第2节介绍的GEP基本的流程和多基因家族的编码。本节介绍本算法设计中选择操作、逆串操作、插串操作和适应度函数的设计问题。

3.1选择算子设计

GEP像其它遗传算法一样引入随机选择方法模拟自然选择过程,其中×××赌方法是一个简单的实现模拟自然选择的方式,为了保证进化过程不至于破坏已经获得的最好解,在×××赌的基础上加了保持最优解的策略。

实现方法是对种群的各个个体进行适应性评价,计算出适应度函数值,然后定义各个个体的选择概率为个体的适应度函数值与所有适应度函数值的累加和。算法描述如图3所示。

带有精英选择的选择算法

1

For i=1 to size //size为种群规模

2

计算Fi//Fi是i个体适应度函数值

3

F=sum(Fi) //F适应度函数值之和

4

Fi值最大的个体到下一代第1位置

5

P1=F1/F

6

For i=2 to size //计算累积概率

7

Pi=Pi-1+Fi/F

8

For i=2 to size

9

产生0~1之间随机数r

10

//根据r值范围,确定被选中的个体

11

If r<p1 then选中第一个个体复制

12

Else if r>=pj-1 and r<pjthen

13

选择第j个个体复制到第i位置

图3选择算子算法描述

3.2遗传算子设计

本算法主要使用了两个遗传操作:逆串(inversion)操作和插串(insertion)操作。逆串操作是指染色体中选择两点,把这两点间的串的顺序倒置的操作;插串算子是选择一个待插入的基因位和一个基因串片断,将该片断插入到待插入的基因位,原来位置的基因串依次后退的遗传操作。例2对这两种操作做简单说明。

例2设父辈染色体如例1所示。即P=632451EDFCBA。

逆串操作:随机选择一个基因家族,如第一个基因家族;再随机生成0~5之间的两个随机数,如2,4,将第2~4位之间基因逆置,得到S=635421 EDFCBA ;

插串操作:随机选择一个基因家族,如第一个基因家族;再随机生成0~5之间随机数,如2,4,第三步随机生成0~2(两个随机数的最小值)之间随机数,如1,将第2~4位之间基因插入到1开始的基因位置,其他基因依次后移,得到S=624531EDFCBA。

逆串遗传算子的算法描述见图4所示,插串操作同样的方法可以设计,这里因篇幅限制,略去。

逆串遗传操作算法

1

For i=1 to size //size为种群规模

2

{产生0~1随机数r

3

If r<pinv then //pinv为逆串率

4

{ p=random(0,1) //随机选择0或1

5

If p==0 then//在第一基因家族

6

{产生0~L/2-1之间随机数r1,r2

7

//L为染色体长度,设r1<r2

8

将r1~r2之间基因取逆放在原位置

9

}else

10

{产生L/2~L之间随机数r1,r2

11

//设r1<r2

12

将r1~r2之间基因取逆放在原位置

13

}

14

} }

图4逆串算子算法描述

3.3适应度函数设计

适应度函数确定,是进化计算的关键问题,它给定了进化计算的进化的方向和速度。TAP问题是一个组合优化问题,目标确定一个最优指派方案。常有2种方法确定这类问题适应度函数。

第一种使用公式(1)确定个体的适应度。

      fi=Tg-Ti+1        (1)

其中fi为个体i的适应度值,Tg为当前代中成本最大的个体的适应度函数值,Ti为当前代个体i的适应度函数值。这种评价方法简单实效。

第二种采用公式(2)确定个体适应度。

fi=M-Ti;          (2)

其中M为预先指定的一个大数,为固定值。fi,Ti和第一种评价函数代表的意义相同。这种方法中的M不太好确定。我们这里使用公式(1)。

4 实验分析与研究

4.1实验数据及参数

本实验程序用VS2010环境下C#编写。

设某单位有6人计划安排6项任务,每人完成且只完成一项任务,各人的完成每项任务的成本见表1。现在使用本程序求解该问题。

表1任务指派成本矩阵

A  B C  D  E F

5  6  9  7  4  6

8  3  5  4   6   7

6  2  4  7   8   9

9  7  6  8   4   5

7  4  3  6   8   9

5  7  8  9   6   4

表2给出实验参数,进化中选择函数是具有精英保持策略的×××赌算法。

表2进化中使用参数

参数项

参数值

运行最大代数

200

染色体长度

12

群体规模

10

逆串率

0.25

插串率

0.1

适应度函数

公式(1)

4.2实验结果及分析

按表2的进化参数,独立运行程序100次,平均得到的最小代价约是22。图4是一次运行的成本变化曲线。

任务指派方案为:426315EDFBAC,即4-E,2-D,6-F,3-B,1-A,5-C。

图4 TAP进化过程

该次运行的平均适应度函数值的变化曲线如图5所示。分析图4,在前20代系统快速收敛,在100代左右收敛到满意的近似解,如103代时,最小代价值为23。在120代s时系统趋于稳定。

图5适应度的变化曲线

图5是运行过程中适应度变化情况,为了清晰,图中每隔10代取样一次绘制的图形。图5看出,系统进化过程仍保持较高的基因多样性,所以系统是健康强壮的。

5 结论及下一步工作

GEP是遗传算法发展的新阶段,它继承了GAs线性定长编码的优点,又继承GP对复杂问题的表达能力,从而在基因编码问题上使用了简单编码可以应对复杂的问题[7]

本文介绍了GEP模型的工作原理,针对TAP问题进行了基于GEP的算法设计,用C#加以实现,进行实验研究,说明GEP能高效解决TAP问题,下一步工作我们将进一步完善系统,扩大应用,将该工作推广到实际应用中去。

参考文献

[1]     郑烨,王明杰,樊娟.基于匈牙利法的企业员工任务分配问题研究[J].统计与决,2011,(5):182-185.

[2]     张群,薛雨石.蚁群算法在机队指派问题中的应用[J].中国管理信息化,2011,14(13):79-80.

[3]     赵越.模拟退火算法求解指派问题新探[J].吉林建筑工程学院学报,2011, 28(4) :61-63

[4]     任先海,杨乐平,朱彦伟.基于整数规划的在轨服务任务指派问题研究[J].装备指挥技术学院学报,2008,19(2):52-56.

[5]     Ferreira C. Gene Expression Programming: a new adaptivealgorithm for solving problems [J]. Complex Systems, 2001, 13 (2) :87-129.

[6]     朱明放,唐常杰,代术成,等.基于中性突变的朴素基因表达式编程[J].计算机研究与发展,2010,47(2):292-299.

[7]     唐常杰,张天庆,左劼,等.基于基因表达式编程的知识发现-沿革、成果和发展方向[J].计算机应用, 2004,24(10):7-10.

[8]     朱明放,王宏涛,任艳玲.基于基因表达式编程的私人汽车拥有量建模和预测[J].计算机应用研究,2010,27(3):958-960.

[9]     朱明放.基于基因表达式编程的TSP问题求解[J].计算机工程与应用,2008,44 (23) :53-55.

[10] Zuo Jie, Tang Changjie, Zhang Tianqing. Mining predicate associationrule by Gene Expression Programming [C] //Proc. of the 3rd International Conf.for Web Information Age 2002(WAIM02), LNCS 2419.Berlin: Springer- Verlag, 2002: 92- 103


基金项目:常州市云计算与智能信息处理重点实验室(No.CM20123004);江苏省“青蓝工程”项目(KYQ10007);江苏技术师范学院博士启动基金(KYY09001)

作者简介:朱明放(1970-),男,陕西咸阳人,博士,副教授,主要研究方向为数据挖掘,进化计算;叶飞跃(1960-),男,教授,主要研究方向数据挖掘;丁小未(1991-),男,本科生。

源自:http://www.cnki.net/KCMS/detail/detail.aspx?QueryID=16&CurRec=1&dbcode=CJFQ&dbname=CAPJLAST&filename=JSGG20130319006&urlid=&yx=&uid=WEEvREcwSlJHSldSdnQ0UDg1eHVxOWhLNUNMeS9ZZ1IxSGl3bjljMGREUXpKTkhIODJ0VTBaaFNNZ1RxU0RNPQ==

转载于:https://blog.51cto.com/dingxiaowei/1366629

基因表达式编程的任务指派问题求解算法设计与实现相关推荐

  1. 基因表达式编程gep_基因表达式编程GEP— 前言

    第一次接触GEP(Gene Expression Programming,基因表达式编程)算法是五年前公司做过的一个供热优化控制项目,一接触就被它简洁精妙的设计思想所吸引.GEP由传统遗传算法进化而来 ...

  2. 基因表达式编程(GEP)自学 第【3】天 Python 实现

    基本基因表达式算法 1. 个体种群[★★★] 1.1. 初始种群的产生 2. 适应度函数与选择[★★★★] 2.1. 适应度函数和选择环境 2.2. 选择 3. 有修饰的复制[★★★★★] 3.1. ...

  3. GEP基因表达式编程

    GEP基因表达式编程 基因表达式编程GEP(Gene Expression Programming)其实是遗传算法的一种改进,如果对遗传算法有了解的话,对于GEP的理解也就自然而然了. 遗传算法的染色 ...

  4. 【编程珠玑】第八章 算法设计技术

    一,概述 问题:求一维数组中连续子向量的最大和. 例如:a[6]={3,4,-2,-9,10,8}; 则最大连续子向量的和 为 10+8 = 18 1)解法一:简单算法 #include <st ...

  5. 【算法设计与分析】经典常考三十三道例题AC代码

    ❥小虾目前大三,我校在大一下开设<数据结构>这门课,大二上开了<算法设计与分析>这门课,很庆幸这两门课的上机考试总成绩一门100,一门99,最后总分也都90+.下文会给出机试的 ...

  6. Interview之AI:人工智能领域岗位求职面试—人工智能算法工程师知识框架及课程大纲(AI基础之数学基础/数据结构与算法/编程学习基础、ML算法简介、DL算法简介)来理解技术交互流程

    Interview之AI:人工智能领域岗位求职面试-人工智能算法工程师知识框架及课程大纲(AI基础之数学基础/数据结构与算法/编程学习基础.ML算法简介.DL算法简介)来理解技术交互流程 目录 一.A ...

  7. python算法设计 - 后缀表达式

    python算法设计源码:https://github.com/MakerChen66/Python3Algorithm 版权声明:原创不易,本文禁止抄袭.转载,侵权必究! 目录 一.后缀表达式 二. ...

  8. 编程面试的10大算法概念汇总

    编程面试的10大算法概念汇总 嘿,第一次翻译文章,在ProgramCreek看到的,原文章名为Top 10 Algorithms for Coding Interview, 对于我这个明年即将直奔BA ...

  9. 太原理工大学linux与python编程r实验报告_太原理工大学算法设计与分析实验报告...

    <太原理工大学算法设计与分析实验报告>由会员分享,可在线阅读,更多相关<太原理工大学算法设计与分析实验报告(12页珍藏版)>请在人人文库网上搜索. 1.本科实验报告课程名称: ...

  10. JavaScript实现跳跃游戏的动态编程自下而上的方法的算法(附完整源码)

    JavaScript实现跳跃游戏的动态编程自下而上的方法的算法(附完整源码) dpBottomUpJumpGame.js完整源代码 dpBottomUpJumpGame.test.js完整源代码 dp ...

最新文章

  1. 计算机组成原理 — 数字集成电路(芯片)
  2. Tomcat7.0源码分析——Session管理分析(上)
  3. Opencv 图像叠加 添加水印
  4. Struts2-day2总结
  5. SQL | 数据分析面试必备SQL语句+语法
  6. 20145324 《Java程序设计》第1周学习总结
  7. 实地踩坑,新鲜出炉,阿里云GPU服务器Centos7.7深度学习环境搭建实战
  8. 什么是servlet?servlet的运行原理?如何自定义一个servlet?
  9. Tensorflow分布式机器学习平台
  10. 《左耳听风》-ARTS-打卡记录-第十一周
  11. LEADTOOLS 文档 SDK,创建以下任何对象
  12. Matlab程序——3d玫瑰
  13. 自编记单词小程序项目(自定义词库,多功能)C/C++语言实现
  14. 主题:一个中专生:我在华为面试的真实经历,转http://www.javaeye.com/topic
  15. 32种EMC标准电路分享-电路接口防护-标准参考电路
  16. Python | 打印三角形图案(educoder)
  17. finalize()用法
  18. CPU频率是什么?主频、睿频和超频哪个更重要?
  19. MATLAB 设置小的tick
  20. 数据的家——MySQL的数据目录

热门文章

  1. 如何在一个项目中兼容Wepy和Taro?
  2. git branch 分支管理
  3. BatchPreparedStatementSetter,用法
  4. 最新wp建站做淘宝客系统教程(共6课)附源码
  5. simple resource manager
  6. 阿里云ubuntu服务器安装使用mysql并配置远程连接记录
  7. rabbitmq重装之后无法加入原有cluster的bug解析
  8. 英特尔逆天原型机:在 Android 上跑 Debian
  9. Ubuntu Apache 不同端口监听不同站点
  10. 倒计时的js实现 倒计时 js Jquery