基于WCF的实验室自动排课服务设计与实现
2014-07-28洪文圳
摘要:该文根据目前高校的实验课的二级排课管理模式,以实验室资源使用优化为目标,利用贪心策略设计了实验室排课算法。采用WCF技术将实验室排课算法封装成Web服务,实现排课业务与实验室管理系统平台的集成。
关键词:实验室,Web服务,面向服务
中图分类号:TP39;G647 文献标识码:A 文章编号:1009-3044(2014)17-4024-04
Laboratory Automatic Course Arranging Based on WCF Service Design and Realization
HONG Wen-zhen
(Guangdong AIB Polytechnic College, Guangzhou 510507, China)
Abstract:Articles based on current University course scheduling two-level management model of experimental course, lab resources use optimization as the goal, greedy strategy design lab course scheduling algorithm. Course scheduling algorithm using WCF technology laboratory are packaged as Web service, realize the integration of course scheduling operations and laboratory management system platform.
Key words:laboratory; web service; service oriented architecture
目前高校的实验室排课管理存在两种模式,一种是统一编排模式,另一种是二级编排模式。统一编排是由教务处统一安排实验课程的理论课和实验(实训)课。二级编排模式是由教务处编排完部分课程及相关的理论课,剩下的实验课程由实验(实训)中心进行二次编排。由于各高校的实验室建设存在时间差,越早建设的实验室其实验资源越是落后,普遍存在各种实验资源参差不齐的情况。为此,在开展实验室课程编排时,需要以资源使用优化为目的,务必将实验室资源最大化的利用。因此,该文针对二级编排模式的高校实验室排课情况,利用贪心策略,以实验室硬件资源充分利用为基础,并结合课程实验教学要求的优先级思想,设计实验室自动排课方法。采用面向服务的开发模式,利用WCF技术将实验室排课功能实现为Web服务,对原有的系统架构模式进行改造。
1 实验室排课设计
实验室排课思路以实验课程为主线,找出所有满足约束条件的时间片并利用优化函数计算出各个时间片上的优化值,然后将优先级最高的课程编排到时间片段最优上,通过迭代进行,直到全部实验课编排完毕。
1.1算法参数设置
根据贪心策略的思想定义算法需要的几个参数,分别是:排课单元K元素,时间效果系数和时间字符串数组,具体设置如下:
K元素是实验课集合为进行排课而拆分的待排课队列的单元[1]。K是根据授课计划信息来构造,并根据周学时来进行拆分。当周学时数为2时,则该门实验课作为一个课程元素K;当周学时数为4时,则该门实验课拆分为两个课程元素K,以此类推。
时间效果系数的设定如表1所示,是通过观察学生周一至周五每天1到12节的上课的心里状态及人的精神状况,为了达到较好的上课效果,并且让实验课编排更加集中,对待排时间片进行设置效果数值。
时间字符串数组定义了待排课的K元素所选某个实验室的课表,长度为30个元素,相当于周一至周五的实验室课表,如图1所示。作为查找课程元素K可用时间片集合的临时存储区,同时也是用来存储每个可用时间片的优化值。其目的是为目标评价函数选取最大优化值的时间片服务。数组中每个元素的取值范围是{0、优化值},含义是:“0”表示该点已经按排了课程,“优化值”表示所对应的时间片是空闲可用。
1.2算法函数定义
根据贪心算法的思想需要定义3个帮助算法实现的函数,分别是:课程优先级计算函数、时间片优化计算函数和选取可用最优时间片的目标评价函数[2]。
优先级函数[fpriority(x)=TEH]。T是表示实验课类型条件的优先级权值,取值范围是{专业课:60、基础课:20};E是表示课程实验硬件要求条件的优先级权值,根据硬件要求其取值范围是{高:80,中:40,低:20};H是表示课程可用时间条件的优先级权值,取值范围是{可用时间≤10个时间片:60,可用时间≤20个时间片:40,可用时间≤30个时间片:20}。确保权值大的K元素比权值小的K元素优先排课,降低排课冲突量及算法的复杂性。
时间片优化函数[Fcount_T(CT,K,T)=CMD],表示在[CT]条件下,待排课程元素K在可用时间片T下的优化值。[CT]是当前已经被编排部分课程的课表;K是将要排课的元素;T是当前被可用的时间片;C是表示一个常数,值为10000;M是表示时间模式中每个时间片的效果系数;D是表示课程安排间隔效果系数,当待编排课程的周学时为2时,D的值为“1”,如果周学时大于2时,具体设定系数值如表2所示。
表2 实验课安排间隔效果系数表
[间隔时间\&同一天\&第二天\&第三、四天\&第五天\&效果值\&0.1\&0.6\&0.9\&0.3\&]
目标评价函数[Fcount_T(CTj,Ki,T)],用于选取在所有可用时间片[Fcount_T(CTj,Ki,T)]中最大的一个,并将它对应的时间片作为满足排课需要的时间,这是整个贪心策略在选择排课时间点的一个评价函数。endprint
1.3算法流程设计
在定义了相关函数和参数的基础上,根据贪心策略的思想设计实验室排课算法,具体算法实现流程如下:
步骤1:根据教学计划表得到实验课的待排课集合;
步骤2:根据实验课的优先级函数[fpriority(x)=TEH]得到待排课队列;
步骤3:判断待排课队列是否为空,如果为空生成课表并退出排课,否则进入下一步骤;
步骤4:从待排课队列中取出一个待排课元素K;
步骤5:选取课程实验要求的相应实验室(即教务处已编排的实验室课表);
步骤6:计算当前课表可用的所有时间片;
步骤7:判断可用时间表是否为空,如果为空进入下一步骤,否则追加到待排课队列;
步骤8:利用时间片优化函数[Fcount_T(x)]计算每个可用时间片的优化值;
步骤9:利用目标评价函数[FEvaluate(x)]选择可用时间片安排K;
步骤10:返回步骤3,循环执行步骤3至步骤9,直到生成课表,并退出排课。
2基于WCF的服务实现
2.1 WCF概述
WCF(Windows Communication Foundation)是微软开发的基于面向服务体系结构的分布式应用程序编程架构,是.NET Framework 3.5的重要组成部分。WCF整合了ASMX、Net Remoting、Enterprise Service、WSE以及MSMQ等现有技术的优点。WCF通过一种面向服务的新型编程模型简化了关联应用程序的开发,根据用户及企业的IT需求,提供一个跨平台的安全、可靠和支持事务处理的企业级分布式应用解决方案[3]。
一个基于WCF的应用系统必须包括:服务类(Service class),端点(Endpoint)以及宿主( host)和客户端(client)等几个要素[4]。
1) 服务类是 WCF的核心,一个 WCF 服务类提供了若干个用于远程调用的服务方法,在实际应用中必须实现服务接口,便于部署。定义一个 WCF 服务类时,需要定义服务契约[ServiceContract]和操作契约[OperationContract]。
2) 端点(endpoint)由地址(Address)、绑定(Binding)和契约(Contract)三个元素组成[]。Address代表了服务位置,Binding 封装了传输协议、通信模式、安全性等通信特征的集合,客户端调用时必须采用与服务端完全相同的绑定。Contract用于公开服务并描述服务功能。
3) 宿主用于托管WCF服务,可以采用IIS托管、自托管和WAS托管三种方式,客户端通过端点访问并调用WCF。
2.2开发实现
在Visual Studio中选择WCF服务应用程序,创建实现排课算法的WCF服务类。Visual Studio自动生成3个文件,分别是WCF配置文件(Web.Config),ICourseSchedulingService.cs(WCF服务接口类文件)和CourseSchedulingService.svc(WCF服务实现类文件)。
在文件CourseSchedulingService.cs文件中定义了WCF的服务契约,操作契约、数据契约,从而设定实验室排课服务对外提供的服务以及操作,其接口设计代码如下:
namespace CourseScheduling//命名空间
{[ServiceContract]//定义服务契约
public interface ICourseSchedulingService//服务名称
{[OperationContract] //操作契约
String CourseQueue( );//生成待排课队列方法
Boolean QueueJudge( );//判断待排课队列是否为空
[OperationContract]
String FindFreeTime(TimeString() As Object,K As Object,Lab As Object);
//查找待排课程元素K的空闲时间方法
[OperationContract]
String WeightCalculation(K As Object,TimeString() As Object);
//计算时间片优化值方法
[OperationContract]
String MaximumTimeSlice(TimeString() As Object); //选择最大时间片方法
[OperationContract]
String AutomaticTimetable( ); //生成实验室课表方法}
[DataContract] //定义数据契约
public class K{…} //待排课K元素
public class TimeString{…} //时间字符串数组
public class PlanQueue{…} //待排课K元素队列
public class Lab{…} //待排课实验室集合}
在CourseSchedulingService.svc文件中通过继承服务接口的方式,实现“public class CourseSchedulingService : ICourseSchedulingService”,并且进一步对已经定义的各个服务操作契约的业务逻辑进行编码实现,算法实现的具体过程如图2所示。endprint
图2 实验室自动排课实现
把服务指定到WCF服务库对应的dll文件中的Services.CourseSchedulingService服务类上。把WCF服务对外终结点的Contract设为WCF服务库的CourseSchedulingService.dll中的Services.ICourseSchedulingService服务契约上。为服务添加一个通信的端点(endpoint),设置Address=basic、Binding=basicHttpBinding 、Contract=Services.ICourseSchedulingService。采用IIS托管方式,在实验室服务器的IIS建立Web应用程,指向WCF服务站点所在的目录,然后在IIS中发布的WCF服务,如图3所示。
2.3运行测试
利用已有的实验室管理系统平台[5]作为排课服务运行的测试平台。对原来的实验室管理系统的课程编排业务逻辑进行改造,将其作为WCF服务的调用客户端。通过访问已经发布在IIS服务器上的CourseSchedulingService服务地址,调用实验室排课服务。为了更好的测试实验室排课服务的可行性,以某高校过去3个学期的实验课编排数据作为测试用例,如表3所示,通过课程编排对排课服务的逻辑功能进行测试,服务执行的测试界面如图4所示。
3 结束语
本文根据高等院校的实验室排课管理的二级编排模式,利用贪心算法,以局部求优的思想,通过定义授课计划单元K元素、时间片字符串、课程优先级计算函数、时间片优化计算函数和选取可用最优时间片的目标评价函数,进行实验室课程编排算法设计。采用面向服务架构的开发模式,对实验室排课算法进行编码实现。利用WCF技术将排课业务封装成一个通用的Web服务类,以实验室服务器的IIS作为服务宿主,进行WCF服务发布托管。实现实验室排课功能模块与实验室管理平台系统进行集成,对原来的系统架构模式进行改造,降低了业务逻辑模块与系统平台间的耦合性,有利于实验室管理平台系统今后的维护和升级。
参考文献:
[1] 梁立,陈玉华,徐敏.基于贪心法的排课算法[J].云南师范大学学报,2005,25(3):9-12.
[2] 洪文圳.高职院校计算机实训室排课系统研究与设计[D].广州:华南理工大学,2009.
[3] 赵海宁,李洋.基于WCF构架的应用与研究[J].电脑知识与技术,2010,6(1):77-79.
[4] 吴清寿.基于WCF 的分布式系统模型研究与实现[J].吉林师范大学学报,2012,8(3):61-64.
[5] 洪文圳,李冬睿,李梅.基于WebService实训中心管理平台的设计与实现[J].科技和产业,2013,13(7):159-166.
图2 实验室自动排课实现
把服务指定到WCF服务库对应的dll文件中的Services.CourseSchedulingService服务类上。把WCF服务对外终结点的Contract设为WCF服务库的CourseSchedulingService.dll中的Services.ICourseSchedulingService服务契约上。为服务添加一个通信的端点(endpoint),设置Address=basic、Binding=basicHttpBinding 、Contract=Services.ICourseSchedulingService。采用IIS托管方式,在实验室服务器的IIS建立Web应用程,指向WCF服务站点所在的目录,然后在IIS中发布的WCF服务,如图3所示。
2.3运行测试
利用已有的实验室管理系统平台[5]作为排课服务运行的测试平台。对原来的实验室管理系统的课程编排业务逻辑进行改造,将其作为WCF服务的调用客户端。通过访问已经发布在IIS服务器上的CourseSchedulingService服务地址,调用实验室排课服务。为了更好的测试实验室排课服务的可行性,以某高校过去3个学期的实验课编排数据作为测试用例,如表3所示,通过课程编排对排课服务的逻辑功能进行测试,服务执行的测试界面如图4所示。
3 结束语
本文根据高等院校的实验室排课管理的二级编排模式,利用贪心算法,以局部求优的思想,通过定义授课计划单元K元素、时间片字符串、课程优先级计算函数、时间片优化计算函数和选取可用最优时间片的目标评价函数,进行实验室课程编排算法设计。采用面向服务架构的开发模式,对实验室排课算法进行编码实现。利用WCF技术将排课业务封装成一个通用的Web服务类,以实验室服务器的IIS作为服务宿主,进行WCF服务发布托管。实现实验室排课功能模块与实验室管理平台系统进行集成,对原来的系统架构模式进行改造,降低了业务逻辑模块与系统平台间的耦合性,有利于实验室管理平台系统今后的维护和升级。
参考文献:
[1] 梁立,陈玉华,徐敏.基于贪心法的排课算法[J].云南师范大学学报,2005,25(3):9-12.
[2] 洪文圳.高职院校计算机实训室排课系统研究与设计[D].广州:华南理工大学,2009.
[3] 赵海宁,李洋.基于WCF构架的应用与研究[J].电脑知识与技术,2010,6(1):77-79.
[4] 吴清寿.基于WCF 的分布式系统模型研究与实现[J].吉林师范大学学报,2012,8(3):61-64.
[5] 洪文圳,李冬睿,李梅.基于WebService实训中心管理平台的设计与实现[J].科技和产业,2013,13(7):159-166.
图2 实验室自动排课实现
把服务指定到WCF服务库对应的dll文件中的Services.CourseSchedulingService服务类上。把WCF服务对外终结点的Contract设为WCF服务库的CourseSchedulingService.dll中的Services.ICourseSchedulingService服务契约上。为服务添加一个通信的端点(endpoint),设置Address=basic、Binding=basicHttpBinding 、Contract=Services.ICourseSchedulingService。采用IIS托管方式,在实验室服务器的IIS建立Web应用程,指向WCF服务站点所在的目录,然后在IIS中发布的WCF服务,如图3所示。
2.3运行测试
利用已有的实验室管理系统平台[5]作为排课服务运行的测试平台。对原来的实验室管理系统的课程编排业务逻辑进行改造,将其作为WCF服务的调用客户端。通过访问已经发布在IIS服务器上的CourseSchedulingService服务地址,调用实验室排课服务。为了更好的测试实验室排课服务的可行性,以某高校过去3个学期的实验课编排数据作为测试用例,如表3所示,通过课程编排对排课服务的逻辑功能进行测试,服务执行的测试界面如图4所示。
3 结束语
本文根据高等院校的实验室排课管理的二级编排模式,利用贪心算法,以局部求优的思想,通过定义授课计划单元K元素、时间片字符串、课程优先级计算函数、时间片优化计算函数和选取可用最优时间片的目标评价函数,进行实验室课程编排算法设计。采用面向服务架构的开发模式,对实验室排课算法进行编码实现。利用WCF技术将排课业务封装成一个通用的Web服务类,以实验室服务器的IIS作为服务宿主,进行WCF服务发布托管。实现实验室排课功能模块与实验室管理平台系统进行集成,对原来的系统架构模式进行改造,降低了业务逻辑模块与系统平台间的耦合性,有利于实验室管理平台系统今后的维护和升级。
参考文献:
[1] 梁立,陈玉华,徐敏.基于贪心法的排课算法[J].云南师范大学学报,2005,25(3):9-12.
[2] 洪文圳.高职院校计算机实训室排课系统研究与设计[D].广州:华南理工大学,2009.
[3] 赵海宁,李洋.基于WCF构架的应用与研究[J].电脑知识与技术,2010,6(1):77-79.
[4] 吴清寿.基于WCF 的分布式系统模型研究与实现[J].吉林师范大学学报,2012,8(3):61-64.
[5] 洪文圳,李冬睿,李梅.基于WebService实训中心管理平台的设计与实现[J].科技和产业,2013,13(7):159-166.